All pastes #595806 Raw Edit

Something

public text v1 · immutable
#595806 ·published 2007-06-29 17:45 UTC
rendered paste body
#### SCRIPT COMEÇA LÁ EM BAIXO ####

################# INICIO DA BIBLIOTECA #############################

import socket
import OSC

def tuioLiveAndDie(message):
#lida com as mensages "alive"
	
	if tuio_ObjectBorn(message) != 0:
		tuio_createObject(tuio_ObjectBorn(message))
	if tuio_ObjectDied(message) != 0:
		tuio_killObject(tuio_ObjectDied(message))
	objs = GameLogic.getCurrentScene().getObjectList()
	print "Objetos na cena ---------"	
	for obj in objs:
		if obj.name.startswith("dedo"):
			print obj.name
	print " ---------"


def tuio_ObjectBorn(message):
	result = ""
	scene = GameLogic.getCurrentScene() 
	object = scene.getObjectList()  #pega os objetos da cena
	for alive in message: #checa nos objetos da cena para ver se já existe cada objeto que veio na mensagem
		for o in object:
			if (str(o.name) == "dedo" + str(alive)): #se existir
				break #quebra e vai checar o próximo objeto
		else:
			result = result + "," + "dedo" + str(alive) #se não adiciona esse objeto a lista de resultado dos objetos q nasceram
	if result=="":
		return 0
	else:
		result = result.lstrip(",")		
		#print "Objetos nasceram: " + result		
		return result.split(",") #retorna uma lista dos objetos que devem ser criados
		

def tuio_ObjectDied(message):
	result = ""
	scene = GameLogic.getCurrentScene()
	object = scene.getObjectList() 
	for o in object:
		for alive in message:
			if (str(o.name) == "dedo" + str(alive)):
				break
		else:
			result = result + "," + str(o.name)
	if result=="":
		return 0
	else:
		result = result.lstrip(",")		
		#print "Objetos morreram: " + result
		return result.split(",")
		


def get_osc(host, port):
       s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
       s.settimeout(0.5)
       s.bind((host, port))
       raw, addr = s.recvfrom(1024)
       dec = OSC.decodeOSC(raw)
       #s.close
       return dec


def tuio_createObject(objs):

	for obj in objs:

		cont=GameLogic.getCurrentController()
		dpl = cont.getActuator("duplicador")
		dpl.setObject("mae") #cria uma cópia do objeto "mae"
		dpl.instantAddObject()
		dpl.getLastCreatedObject().name = obj #renomeia para o id q veio na mensagem
		print "Objeto foi criado: " + obj

def tuio_killObject(objs):

	for obj in objs:

		ListaObjetos = GameLogic.getCurrentScene().getObjectList()
		if ListaObjetos[obj].name.startswith("dedo"):  # se não for um dos objetos q já estavam na cena
			print "vida: " + str(ListaObjetos[obj].vida)
			ListaObjetos[obj].vida = 1 #seta a propriedade pra 1 e mata
			print "vida: " + str(ListaObjetos[obj].name) + " : " + str(ListaObjetos[obj].vida)
			print "Objeto foi brutalmente assassinado: " + obj

def converteCoord(coordenadas):
	#recebe uma lista, item 0 é X, item 1 é Y, item 2 é z
	#assumindo q 0,0 eh o centro
	telaX = 62.486
	telaY = 44.444
	z = coordenadas[2] # não mexe na coordenada Z
	x = (telaX*coordenadas[0])-(telaX/2)
	y = ((telaY*coordenadas[1])-(telaY/2))*-1
	return [x,y,z]
	
def tuioMove(msg):
	ide = msg[0]
	x = msg[1]
	y = msg[2]
	z = 0
	coords =  converteCoord([x,y,z])
	ListaObjetos = GameLogic.getCurrentScene().getObjectList()
	print "posicao anterior de: " "dedo" + str(ide) + " - " + str(ListaObjetos["dedo" + str(ide)].getPosition())
	ListaObjetos["dedo" + str(ide)].setPosition(coords)

	print "Objeto " + "dedo" + str(ide) + " foi movido para as coordenadas " + str(coords)


############ FIM DA BIBLIOTECA #################
############## INICIO DO SCRIPT ######################



message = get_osc("localhost", 3333)

## message se espera uma lista bidimensional, com mensagens no padrão TUIO
## exemplo de mensagem:
## 
## [['set',3, 0.88888888888888, 0.99999999999999999, ...],['alive', 1, 2, 3], ['fseq', 10000]]

msgs = len(message)-1

while msgs >=0: # faz um loop ao contrário na lista para rodar as mensagens alive antes das set
	
	if message[msgs][0] == "alive" and len(message[msgs])>1:
		print "mensagem alive: " + str(message[msgs][1:])		
		tuioLiveAndDie(message[msgs][1:])
	if message[msgs][0] == "set" and len(message[msgs])>1:
		print "mensagem set: " + str(message[msgs][1:])		
		tuioMove(message[msgs][1:])
	#if message[msgs][0] == "fseq" and len(message[msgs])>1:
		#print "fseq: " + str(message[msgs][1])

	msgs = msgs-1

#for msg in message:
#if message[0] == "alive" and len(message)>1:
#	print "mensagem alive: " + str(message[1:])
#	tuioLiveAndDie(message[1:])	
#if message[0] == "set" and len(message)>1:
#	print "mensagem set: " + str(message[1:])
#	tuioMove(message[1:])