comparison gamelib/state.py @ 492:c1f4f9149349 engine_refactor

Unify Thing and Item interaction handling.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 29 Aug 2010 20:38:03 +0200
parents 9f488671c02e
children 93ddcac0b772
comparison
equal deleted inserted replaced
491:9f488671c02e 492:c1f4f9149349
377 377
378 class InteractiveMixin(object): 378 class InteractiveMixin(object):
379 def is_interactive(self): 379 def is_interactive(self):
380 return True 380 return True
381 381
382 def interact(self, item): 382 def interact(self, tool):
383 if not self.is_interactive(): 383 if not self.is_interactive():
384 return 384 return None
385 if item is None: 385 if tool is None:
386 return self.interact_without() 386 return self.interact_without()
387 else: 387 handler = getattr(self, 'interact_with_' + tool.tool_name, None)
388 handler = getattr(self, 'interact_with_' + item.tool_name, None) 388 inverse_handler = self.get_inverse_interact(tool)
389 if handler is not None: 389 if handler is not None:
390 return handler(item) 390 return handler(tool)
391 else: 391 elif inverse_handler is not None:
392 return self.interact_default(item) 392 return inverse_handler(self)
393 else:
394 return self.interact_default(tool)
395
396 def get_inverse_interact(self, tool):
397 return None
393 398
394 def interact_without(self): 399 def interact_without(self):
395 return self.interact_default(None) 400 return self.interact_default(None)
396 401
397 def interact_default(self, item=None): 402 def interact_default(self, item=None):
530 self.state = state 535 self.state = state
531 536
532 def get_inventory_image(self): 537 def get_inventory_image(self):
533 return self.inventory_image 538 return self.inventory_image
534 539
535 def interact(self, tool): 540 def get_inverse_interact(self, tool):
536 if tool is None: 541 return getattr(tool, 'interact_with_' + self.tool_name, None)
537 return self.interact_without(state)
538 handler = getattr(self, 'interact_with_' + tool.name, None)
539 inverse_handler = getattr(tool, 'interact_with_' + self.tool_name, None)
540 if handler is not None:
541 return handler(tool)
542 elif inverse_handler is not None:
543 return inverse_handler(self)
544 else:
545 return self.interact_default(tool)
546 542
547 543
548 class CloneableItem(Item): 544 class CloneableItem(Item):
549 _counter = 0 545 _counter = 0
550 546