OOmadness
[-] OOmadness / Soya3D / Tutorials / ode-collision-6-hit_func-2-other
Tutorials : basic-1 - basic-2 - basic-3 - basic-4 - basic-5 - basic-6 - basic-loadingfile-1 - basic-savingfile-cerealizer-1 - basic-savingfile-pickle-1 - blender-auto-exporter-1 - bsp-game_skel - character-animation-1 - character-animation-2 - character-animation-shadow-cellshading-1 - deform-1 - facecutter-1 - fullscreen-1 - game_skel-1 - game_skel-2 - game_skel-3 - game_skel-4 - game_skel-5 - gui-1 - gui-2 - gui-background-1 - label3D-1 - modeling-1 - modeling-2 - modeling-3 - modeling-cellshading-1 - modeling-env-mapping-1 - modeling-material-1 - modeling-material-2 - modeling-shadow-1 - modeling-smoothlit-1 - modeling-solid-model-1 - modeling-transparency-1 - mouse-1 - multiple-cameras-1 - nested-world-1 - ode-collision-1-base - ode-collision-2-base - ode-collision-3-mass_influence - ode-collision-4-pushable - ode-collision-5-hit_func - ode-collision-6-hit_func-2-other - ode-collision-7-hit_func-3-contacts - ode-collision-8-terrain - ode-collision-9-box - ode-gravity - ode-join - ode-mass - ode-test - particle-1 - portal-1 - pudding-1 - pudding-2 - pudding-buttonbar-1 - pudding-buttonbar-2 - pudding-console-1 - pudding-console-2 - pudding-game_skel-5 - pudding-image-1 - pudding-image-slicing-1 - pudding-input-1 - pudding-listbox-1 - pudding-menu-1 - pudding-meter-1 - pudding-svgelements-1 - pudding-z-index-1 - ray-1 - raypicking-1 - raypicking-2 - raypicking-3 - shader-1 - shader-2 - shader-3 - shader-4 - sound-1 - soya-with-tk-1 - speed-1 - state-1 - static-shadows-1 - terrain-1 - terrain-2 - test - traveling-camera-1 - widget-1 - widget-background-1
Jiba
# -*- indent-tabs-mode: t -*-

INTRO = """
  the hit function take arguments, the first one is the body you collide and the
  second is a list of Contact object containing information about the Point of contact
  
 In this more complex scene Head will tell who they hit when collision occured
"""

import sys, os
from random import choice
import soya
from soya import Vector


soya.init("ode-collision-6-hit_func-2",width=1024,height=768)
soya.path.append(os.path.join(os.path.dirname(sys.argv[0]), "data"))

print INTRO

class PoliteHead(soya.Body):
	head_model = soya.Model.get("caterpillar_head")
	sentences = [
		"<%s> Oups sorry *%s*!",
		"<%s> Damned I hit *%s*",
		"<%s> excuse me *%s*. I hope I didn't hurt you",
		"<%s> *%s*! please mind you step !",
		"<%s> ho I did see you *%s* how. are you ?",
		
		]
	def __init__(self,parent,name):
		soya.Body.__init__(self,parent,self.head_model)
		self.name = name
	def hit(self,other,*args,**kargs):
		print choice(self.sentences)%(self.name,other.name)

################################################################################
scene = soya.World()
a_mass = 8
c_m    = 7
d_m    = 2
head_model = soya.Model.get("caterpillar_head")
head_a = PoliteHead(scene,"Pat")
head_a.mass = soya.SphericalMass(a_mass,1,"total_mass")
head_b = PoliteHead(scene,"Lili")
head_b.mass = soya.SphericalMass(3,1,"total_mass")
head_c = PoliteHead(scene,"Sam")
head_c.mass = soya.SphericalMass(c_m,1,"total_mass")
head_d = PoliteHead(scene,"Mike")
head_d.mass = soya.SphericalMass(d_m,1,"total_mass")


head_a.add_force(soya.Vector(head_a,15,34,56)*a_mass)#,soya.Vector(head_a,0.4,0.3,0.2))
head_a.add_force(soya.Vector(scene,-150,1,-505)*a_mass)
head_a.set_xyz(20,-5,0)
head_a.turn_y(30)

head_b.x = 1.0

head_b.add_force(Vector(head_b,0,0,-1368),Vector(head_b,0.0001,0.0002,0.0003))

head_c.set_xyz(-4.5,2.7,-77)
head_c.turn_y(180)

head_d.set_xyz(1,-50,-60)
head_d.turn_x(90)
head_d.add_force(soya.Vector(scene,0,350,-40)*d_m,soya.Vector(head_d,0.001,0.0015,0.002))

light = soya.Light(scene)
light.set_xyz(30, 5, -30)

camera = soya.Camera(scene)
camera.set_xyz(1,50,-40)
camera.turn_x(-90)

scene.gravity = soya.Vector(scene,0.0005,-0.03,2)
for head in (head_a,head_b,head_c,head_d,):
	soya.GeomSphere(head,1.2)
print "scene built"

soya.set_root_widget(camera)
ml = soya.MainLoop(scene)
ml.main_loop()