#### SCRIPT COMEÇA LÁ EM BAIXO #### ################# INICIO DA BIBLIOTECA ############################# import socket import OSC def tuioLiveAndDie(message): #lida com as mensages "alive" tuio_createObject(tuio_ObjectBorn(message)) tuio_killObject(tuio_ObjectDied(message)) 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 = "%s,dedo%i" % (result, 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 = "%s,%s" % (result,o.name) if result=="": return 0 else: result = result.lstrip(",") 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): if 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): if 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 ListaObjetos[obj].vida = 1 #seta a propriedade pra 1 e mata 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() 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:]) msgs = msgs-1