diff pytouhou/game/enemymanager.py @ 48:8353c33d53d4

Support a few more instructions
author Thibaut Girka <thib@sitedethib.com>
date Mon, 22 Aug 2011 15:45:42 +0200
parents 25ca15f714ad
children cbe1cb50f2fd
line wrap: on
line diff
--- a/pytouhou/game/enemymanager.py
+++ b/pytouhou/game/enemymanager.py
@@ -24,8 +24,17 @@ class Enemy(object):
         self.frame = 0
         self.sprite = None
         self.pending_bullets = []
-        self.bullet_attributes = []
+        self.bullet_attributes = None
         self.bullet_launch_offset = (0, 0)
+        self.vulnerable = True
+        self.death_callback = None
+        self.low_life_callback = None
+        self.low_life_trigger = None
+        self.timeout = None
+        self.remaining_lives = -1
+
+        self.bullet_launch_interval = 0
+        self.delay_attack = False
 
         self.death_sprite = None
         self.movement_dependant_sprites = None
@@ -38,19 +47,79 @@ class Enemy(object):
 
         self.hitbox = (0, 0)
 
-        self.ecl_runner.implementation.update({#67: ('HHIIffffI', self.set_bullet_attributes),
-                                               97: (self.set_sprite),
-                                               98: (self.set_multiple_sprites),
-                                               45: (self.set_angle_speed),
-                                               43: (self.set_pos),
-                                               46: (self.set_rotation_speed),
-                                               47: (self.set_speed),
-                                               48: (self.set_acceleration),
-                                               51: (self.target_player),
-                                               57: (self.move_to),
-                                               100: (self.set_death_sprite),
-                                               103: (self.set_hitbox)}) #TODO
+        self.ecl_runner.implementation.update({67: self.set_bullet_attributes,
+                                               97: self.set_sprite,
+                                               98: self.set_multiple_sprites,
+                                               45: self.set_angle_speed,
+                                               43: self.set_pos,
+                                               46: self.set_rotation_speed,
+                                               47: self.set_speed,
+                                               48: self.set_acceleration,
+                                               51: self.target_player,
+                                               57: self.move_to,
+                                               77: self.set_bullet_interval,
+                                               78: self.set_delay_attack,
+                                               79: self.set_no_delay_attack,
+                                               81: self.set_bullet_launch_offset,
+                                               100: self.set_death_sprite,
+                                               103: self.set_hitbox,
+                                               105: self.set_vulnerable,
+                                               108: self.set_death_callback,
+                                               113: self.set_low_life_trigger,
+                                               114: self.set_low_life_callback,
+                                               115: self.set_timeout,
+                                               126: self.set_remaining_lives}) #TODO
+
+
+    def set_remaining_lives(self, lives):
+        self.remaining_lives = lives
+
+
+    def set_death_callback(self, sub):
+        self.death_callback = sub
+
+
+    def set_low_life_trigger(self, value):
+        self.low_life_trigger = value
+
 
+    def set_low_life_callback(self, sub):
+        self.low_life_callback = sub
+
+
+    def set_timeout(self, timeout):
+        self.timeout = timeout
+
+
+    def set_vulnerable(self, vulnerable):
+        self.vulnerable = bool(vulnerable & 1)
+
+
+    def set_bullet_launch_offset(self, x, y, z):
+        self.bullet_launch_offset = (x, y)
+
+
+    def set_bullet_attributes(self, bullet_anim, launch_anim, bullets_per_shot,
+                              number_of_shots, speed, unknown, launch_angle,
+                              angle, flags):
+        self.bullet_attributes = (1, bullet_anim, launch_anim, bullets_per_shot,
+                                  number_of_shots, speed, unknown, launch_angle,
+                                  angle, flags)
+        if not self.delay_attack:
+            pass
+            #TODO: actually fire
+
+
+    def set_bullet_interval(self, value):
+        self.bullet_launch_interval = value
+
+
+    def set_delay_attack(self):
+        self.delay_attack = True
+
+
+    def set_no_delay_attack(self):
+        self.delay_attack = False
 
 
     def set_death_sprite(self, sprite_index):
@@ -94,7 +163,7 @@ class Enemy(object):
 
     def target_player(self, unknown, speed):
         self.speed = speed #TODO: unknown
-        player_x, player_y = 192., 400.#TODO
+        player_x, player_y = 192., 384.#TODO
         self.angle = atan2(player_y - self.y, player_x - self.x)