#### 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:])