All pastes #633761 Raw Edit

Mine

public python v1 · immutable
#633761 ·published 2007-07-25 22:26 UTC
rendered paste body
## SEE COMMENTS AT THE END // VEHA OS COMENTARIOS LA NO FINAL ###### SCRIPT COMEÇA LÁ EM BAIXO ##################### INICIO DA BIBLIOTECA #############################import GameLogic as Gimport socketimport OSCO = G.getCurrentController().getOwner()class MO:	def __init__(self):		self.s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)		self.s.settimeout(0.4)		self.s.bind((host, port))			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 ensagem			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)				#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.4)		#s.bind((host, port))		try:			if self.s.recvfrom(1024):				raw, addr = self.s.recvfrom(1024)				if raw:					dec = OSC.decodeOSC(raw)			if dec:				return dec			else:				return [[0],[0]]		except:			return [[0],[0]]			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					#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		#só precisa mexer nesses dois aí em cima		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 ######################## English bellow## esse script gera copias de um objeto do blender pra cada blob, e acompanha o movimento desses blobls## esse script pressupõe que sua camera está olhando exatamente pra baixo (para o plano x,y)## os objetos vão ser movidos somente no eixo x,y, mantendo o z sempre constante (0)## ele deve estar associado ao objeto q vai ser "copiado" e ligado a um sensor allways e a um controlador Edit Object (Add Object) chamado "duplicador"## esse objeto deve se chamar "mae"## esse objeto deve ter uma propriedade do tipo INT, chamada "vida", com o valor 0 (zero)## esse objeto tb deve ter o script multiObject_killer.py associado a um sensor Property (Prop: vida,  Equal, Value 1) e ligada a um controlador Edit Object (End Object) chamado "assassino"## 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]]### ENGLISH ##### This script is designed to be used with a multitouch table using the TouchLib. It receives OSC signals from the demo software OSC that comes along with touchlib##It generates  copies of an object for each finger found on the table, then each copy of the original object follows the finger## this object will be moved only on X and Y axis, assuming camera is pointing exaclty down## this script must be associated with the object you want to be copied. It has to be connected on an Allways Sensor and to a Edit Object (Add Object) Controller called "duplicador"## the object this is script is associated to must be called "mae" (mother)## the object this is script is associated to have a property (type INT), called "vida", with value set to 0 (zero)## this object mus also have the other script "multiObject_killer.py" linked to a sensor Property (Prop: vida, Equal, Valeu 1) and linked to a controller Edit Object (End Object) called "assassino"if not O.Init:	G.MOC = MO()else:	message = G.MOC.get_osc("localhost", 3333)	if isinstance(message[0], list):		msgs = len(message)-1	else :		msgs = 0	print message	while msgs >=0: # faz um loop ao contrário na lista para rodar as mensagens alive antes das set			if isinstance(message[0], list):			mensagem = message[msgs]		else :			mensagem = message			if mensagem[0] == "alive" and len(mensagem)>1:			#print "mensagem alive: " + str(mensagem[1:])					G.MOC.tuioLiveAndDie(mensagem[1:])		if mensagem[0] == "set" and len(mensagem)>1:			#print "mensagem set: " + str(mensagem[1:])					G.MOC.tuioMove(mensagem[1:])		#if message[msgs][0] == "fseq" and len(mensagem)>1:			#print "fseq: " + str(mensagem[1])		msgs = msgs-1