Mercurial > nagslang
comparison nagslang/game_object.py @ 569:f735665c359e
Only save state when PuzzleDoor is activated, not on update.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 07 Sep 2013 22:39:16 +0200 |
parents | 33f28f1cb0eb |
children | 3c7593a84b06 |
comparison
equal
deleted
inserted
replaced
568:35168dbf76bd | 569:f735665c359e |
---|---|
398 interactible=environment.Interactible( | 398 interactible=environment.Interactible( |
399 environment.Action(self._post_door_event, condition)), | 399 environment.Action(self._post_door_event, condition)), |
400 ) | 400 ) |
401 | 401 |
402 def _post_door_event(self, protagonist): | 402 def _post_door_event(self, protagonist): |
403 self.door_opened() | |
403 DoorEvent.post(self.destination, self.dest_pos) | 404 DoorEvent.post(self.destination, self.dest_pos) |
405 | |
406 def door_opened(self): | |
407 pass | |
404 | 408 |
405 | 409 |
406 class Door(BaseDoor): | 410 class Door(BaseDoor): |
407 def __init__(self, space, position, destination, dest_pos, angle): | 411 def __init__(self, space, position, destination, dest_pos, angle): |
408 super(Door, self).__init__( | 412 super(Door, self).__init__( |
456 environment.FunctionCondition(lambda p: self.is_open), | 460 environment.FunctionCondition(lambda p: self.is_open), |
457 ) | 461 ) |
458 | 462 |
459 @property | 463 @property |
460 def is_open(self): | 464 def is_open(self): |
461 return self._stored_state['is_open'] | 465 if self._stored_state['is_open']: |
466 return True | |
467 return self.puzzler.glue.get_state_of(self._key_state) | |
468 | |
469 def door_opened(self): | |
470 self._stored_state['is_open'] = True | |
462 | 471 |
463 def set_stored_state_dict(self, stored_state): | 472 def set_stored_state_dict(self, stored_state): |
464 self._stored_state = stored_state | 473 self._stored_state = stored_state |
465 self._stored_state.setdefault('is_open', False) | 474 self._stored_state.setdefault('is_open', False) |
466 return True | 475 return True |
467 | |
468 def update(self, dt): | |
469 if not self.is_open: | |
470 self._stored_state['is_open'] = self.puzzler.glue.get_state_of( | |
471 self._key_state) | |
472 super(PuzzleDoor, self).update(dt) | |
473 | 476 |
474 @classmethod | 477 @classmethod |
475 def requires(cls): | 478 def requires(cls): |
476 return [("name", "string"), ("position", "coordinates"), | 479 return [("name", "string"), ("position", "coordinates"), |
477 ("destination", "level name"), ("dest_pos", "coordinate"), | 480 ("destination", "level name"), ("dest_pos", "coordinate"), |