def __init__(self,blob,speed=1.0,jump_velocity=0.5): self.blob=blob self.__speed=speed self.jump_velocity=jump_velocity self.was_moving_right=True self.mrm=Matrix44.z_rotation(radians( self.__speed)) self.mlm=Matrix44.z_rotation(radians(-self.__speed)) self.swapm=Matrix44.z_rotation(radians(180)) self.vel=0.0 self.on_floor=False self.bob=0.0 self.bob_dir=1.0 self.bob_mtx=numpy.array([ 1.0,0.0,0.0,0.0, 0.0,1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0, ])
def tick(self): self.bob_mtx[9]=self.bob*0.6 self.vel-=GRAVITY self.blob.position[2]+=self.vel self.on_floor=False rh=get_game().get_ring_height()+self.blob.size/2.0 if rh>self.blob.position[2]: self.blob.position[2]=rh self.vel=0 self.on_floor=True #apply damage enemies=list(get_game().mgr_team.obs[(self.blob.team+1)%2]) me=Vector3(self.blob.position) for enemy in enemies: if self.vel<0.0 and not self.on_floor and not enemy.dead: them=Vector3(enemy.position) dist=(me-them).get_length() if 2*dist<self.blob.size+enemy.size: self.blob.position[2]-=self.vel enemy.damage(self.blob) self.on_floor=True self.jump() self.on_floor=False break elif self.on_floor and enemy.dead: them=Vector3(enemy.position) dist=(me-them).get_length() if 2*dist<self.blob.size+enemy.size: self.blob.position[2]-=self.vel enemy.remove_from_world() self.blob.size+=enemy.food*1.4 game=get_game() if game.tower_height-1>=0 and self.blob.size>game.rings[game.tower_height-1].strength: game.tower_height-=1 game.rings[game.tower_height].remove_from_world() game.rings=game.rings[:-1] remaining=len(game.rings) if remaining==2: Spawner(Enemy2,150).add_to_world() elif remaining==1: Spawner(Enemy3,75).add_to_world() elif remaining==0: inst=Enemy4() rot=random.randint(1,360) m=Matrix44.z_rotation(radians(rot)) inst.zrot-=rot v=Vector3(inst.position) inst.position=list(m.transform(v)) inst.add_to_world()
def tick(self): self.timer-=1 if self.timer<=0: if len(get_game().mgr_team.obs[1])>=4: self.timer+=random.randint(1,150) else: self.timer=self.timeout inst=self.klass() rot=random.randint(1,360) m=Matrix44.z_rotation(radians(rot)) inst.zrot-=rot v=Vector3(inst.position) inst.position=list(m.transform(v)) #player=list(get_game().mgr_team.obs[0]) #if player: # player=player[0] # inst.position=player.position[:] # inst.position[2]+=10.0 inst.add_to_world()