rendered paste bodyclass PathFollower(soya.World):
"""A World that Follows the path of the points. PathFollower(parent,points,model)"""
def __init__(self,parent,points,model,speed):
soya.World.__init__(self,parent)
self.points = points
self.speed = speed
self.modela = model
self.follower = soya.Body(self,self.modela)
#self.speed = soya.Vector(self,0,0,-0.09)
self.state1 = soya.CoordSystState(self)
self.state2 = soya.CoordSystState(self)
self.cur_point = 0
self.state1.move(self.points[self.cur_point])
self.state2.move(self.points[self.cur_point+1])
self.factor = 1.0
#self.follower.look_at(self.points[self.cur_point])
self.maxpoint = len(points)
def begin_round(self):
soya.World.begin_round(self)
#print self.distance_to(self.points[self.cur_point])
#print self.factor
if self.factor > 1:
self.cur_point = self.cur_point +1
if self.maxpoint == self.cur_point:
self.cur_point = 0
self.state1.move(self.points[self.cur_point-1])
self.state2.move(self.points[self.cur_point])
self.state1.look_at(self.points[self.cur_point])
try:
self.state2.look_at(self.points[self.cur_point+1])
except IndexError:
self.state2.look_at(self.points[0])
#self.follower.look_at(self.points[self.cur_point])
self.factor = 0
def advance_time(self,p):
soya.World.advance_time(self,p)
self.factor += self.speed * p
self.interpolate(self.state1, self.state2, self.factor)
#self.add_mul_vector(p,self.speed)
mypath = [soya.Point(scene, 3,0,0),
soya.Point(scene, 0,-5,-1),
soya.Point(scene, 2,0,-3),
soya.Point(scene, -2,0,-5)]
mymodel = soya.Model.get("sword")
follower = PathFollower(scene,mypath,mymodel,0.05)