Changeset 251:432f6997d306


Ignore:
Timestamp:
04/07/11 22:40:34 (12 years ago)
Author:
Simon Cross <hodgestar@…>
Branch:
default
Phase:
public
Message:

More hooking up of interacting with NPCs.

Location:
skaapsteker
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • skaapsteker/dialogue.py

    r246 r251  
    2828    def get_state(self):
    2929        return self.states[self.state]
     30
     31    def has_text(self):
     32        return bool(self.states[self.state].text)
    3033
    3134    def event(self, ev):
  • skaapsteker/levelscene.py

    r250 r251  
    1212from .sprites import player
    1313from .widgets.text import Text
     14from .widgets.bubble import DialogueWidget
    1415
    1516
     
    2324        self._leveldef = leveldef
    2425        self._player_dead = False
     26        self._dialogue = None
    2527
    2628        self._level_surface = self._level.get_surface()
     
    8789            self._paused = True
    8890
    89     def _open_dialog(self, npc):
    90         print npc.dsm.get_state().text
    91         engine.CloseDialog.post(npc)
     91    def _open_dialogue(self, npc):
     92        if npc.dsm.has_text():
     93            if self._dialogue is not None:
     94                self._dialogue.close()
     95            self._world.freeze()
     96            self._dialogue = DialogueWidget(npc)
     97        else:
     98            self._close_dialogue()
    9299
    93     def _close_dialog(self, npc):
    94         pass
     100    def _close_dialogue(self):
     101        if self._dialogue is not None:
     102            self._world.thaw()
     103            self._dialogue.close()
     104            self._dialogue = None
    95105
    96106    def leave(self):
     
    108118            self._clip_rect = pygame.Rect((0, 0), screen_surface.get_size())
    109119
    110         if not self._paused:
     120        if not self._paused and not self._dialogue:
    111121            for key in self._fast_keys_down:
    112122                self._fast_key_map[key]()
     
    118128        self._level.draw(self._level_surface)
    119129        self._world.draw(self._level_surface)
     130        if self._dialogue:
     131            self._dialogue.draw(self._level_surface)
    120132
    121133        fps_text_pos = self._clip_rect.left + 10, self._clip_rect.top + 10
     
    149161                    self._quit(False)
    150162                return
     163            if self._dialogue:
     164                self._dialogue.dispatch(ev)
     165                return
    151166            if ev.key in self._fast_key_map:
    152167                self._fast_keys_down.add(ev.key)
     
    160175            self._player_dead = True
    161176        elif engine.OpenDialog.matches(ev):
    162             self._open_dialog(ev.npc)
     177            self._open_dialogue(ev.npc)
    163178        elif engine.CloseDialog.matches(ev):
    164             self._close_dialog(ev.npc)
     179            self._close_dialogue()
  • skaapsteker/sprites/base.py

    r250 r251  
    197197        AnimatedGameSprite.__init__(self, pos, **opts)
    198198        self._layer = Layers.PLAYER
     199        self._ticks_before_interact = 0
    199200
    200201    def setup(self, name, world, dsm, state):
     
    202203
    203204    def collided_player(self, player):
    204         OpenDialog.post(self)
     205        if self._ticks_before_interact == 0:
     206            self._ticks_before_interact = 60
     207            OpenDialog.post(self)
     208
     209    def update(self):
     210        super(NPC, self).update()
     211        if self._ticks_before_interact > 0:
     212            self._ticks_before_interact -= 1
    205213
    206214
Note: See TracChangeset for help on using the changeset viewer.