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"),