diff skaapsteker/sprites/base.py @ 273:95e2ef31e714

Hit "down" to interact with things.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 08 Apr 2011 19:09:09 +0200
parents 56a529a69e97
children 15b2be883a40
line wrap: on
line diff
--- a/skaapsteker/sprites/base.py	Fri Apr 08 17:32:50 2011 +0200
+++ b/skaapsteker/sprites/base.py	Fri Apr 08 19:09:09 2011 +0200
@@ -192,30 +192,22 @@
 class NPC(AnimatedGameSprite):
 
     collision_layer = NPC_LAYER
-    collides_with = set([PC_LAYER])
 
     debug_color = (240, 240, 240)
     bounce_factor = (0, 0)    #  NPC's don't bounce by default
 
     block = False
+    actionable = True
 
     def __init__(self, pos, **opts):
         AnimatedGameSprite.__init__(self, pos, **opts)
         self._layer = Layers.PLAYER
-        self._ticks_before_interact = 0
 
     def setup(self, name, world, dsm, state):
         self.dsm = dialogue.DSM(name, world, dsm, state)
 
-    def collided_player(self, player):
-        if self._ticks_before_interact == 0:
-            self._ticks_before_interact = 120
-            OpenDialog.post(self)
-
-    def update(self):
-        super(NPC, self).update()
-        if self._ticks_before_interact > 0:
-            self._ticks_before_interact -= 1
+    def player_action(self, player):
+        OpenDialog.post(self)
 
 
 class Projectile(GameSprite):
@@ -226,10 +218,10 @@
     mobile = False
     gravitates = False
 
-    collision_layer = MONSTER_LAYER
-    collides_with = set([PC_LAYER])
+    collision_layer = NPC_LAYER
 
     portable = True
+    actionable = True
 
     def __init__(self, pos, **opts):
         GameSprite.__init__(self, pos, **opts)
@@ -247,7 +239,7 @@
         return (0, 0, 240)
 
 
-    def collided_player(self, player):
+    def player_action(self, player):
         print "Player touched %s" % self
         player.take_item(self)
 
@@ -258,6 +250,7 @@
     gravitates = False
     collides_with = set([PC_LAYER, MONSTER_LAYER, NPC_LAYER])
     is_ground = True
+    actionable = False
     bounce_factor = (0.0, 0.0)
 
     def __init__(self, pos, image):
@@ -282,19 +275,12 @@
 class Doorway(GameSprite):
     mobile = False
     gravitates = False
-    collides_with = set([PC_LAYER])
-    wants_updates = True
 
     blocks = False
+    actionable = True
 
     image_file = 'torii.png'
 
-    debug_color = (120, 240, 120)
-
-    def __init__(self, pos, **opts):
-        GameSprite.__init__(self, pos, **opts)
-        self._ticks_before_interact = 120
-
 
     def setup_image_data(self, pos):
         super(Doorway, self).setup_image_data(pos)
@@ -309,16 +295,7 @@
         print leadsto
 
 
-    def update(self):
-        super(Doorway, self).update()
-        if self._ticks_before_interact > 0:
-            self._ticks_before_interact -= 1
-
-
-    def collided_player(self, player):
-        if self._ticks_before_interact != 0:
-            return
-        self._ticks_before_interact = 120
+    def player_action(self, player):
         print "Player touched %s" % self
         from .. import engine, levelscene
         engine.ChangeScene.post((levelscene.LevelScene, self.leadsto))
@@ -326,7 +303,7 @@
 
 
 class StartingDoorway(Doorway):
-    collides_with = set()
+    actionable = False
 
     def setup_image_data(self, pos):
         self.image = pygame.Surface((0, 0))
@@ -338,12 +315,6 @@
         Doorway.setup(self, facing, None)
 
 
-    def collided_player(self, player):
-        print "Player touched %s" % self
-        from .. import engine, levelscene
-        engine.ChangeScene.post((levelscene.LevelScene, self.leadsto))
-
-
 
 def find_sprite(descr, mod_name=None):
     """Create a sprite object from a dictionary describing it."""