gui.py 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import cocos
  2. import pyglet
  3. from cocos.actions import Repeat, ScaleBy, Reverse
  4. from sandbox.life_game.simulation import CellDieEvent
  5. from sandbox.life_game.simulation import CellBornEvent
  6. from synergine2.gui import Gui
  7. from synergine2.simulation import Event
  8. from synergine2.terminals import TerminalPackage
  9. from synergine2.terminals import Terminal
  10. class HelloWorld(cocos.layer.Layer):
  11. def __init__(self):
  12. super().__init__()
  13. self.label = cocos.text.Label(
  14. '...',
  15. font_name='Times New Roman',
  16. font_size=21,
  17. anchor_x='center', anchor_y='center'
  18. )
  19. self.label.position = 320, 240
  20. scale = ScaleBy(3, duration=5)
  21. self.label.do(Repeat(scale + Reverse(scale)))
  22. self.add(self.label)
  23. class LifeGameGui(Gui):
  24. def __init__(
  25. self,
  26. terminal: Terminal,
  27. read_queue_interval: float = 1 / 60.0,
  28. ):
  29. super().__init__(terminal, read_queue_interval)
  30. self.hello_layer = HelloWorld()
  31. self.main_scene = cocos.scene.Scene(self.hello_layer)
  32. self.terminal.register_event_handler(CellDieEvent, self.on_cell_die)
  33. self.terminal.register_event_handler(CellBornEvent, self.on_cell_born)
  34. self.born = 0
  35. self.die = 0
  36. def get_main_scene(self) -> HelloWorld:
  37. return self.main_scene
  38. def before_received(self, package: TerminalPackage):
  39. self.born = 0
  40. self.die = 0
  41. def after_received(self, package: TerminalPackage):
  42. self.hello_layer.label.element.text = 'This cycle: {0} born, {1} dead'.format(
  43. self.born,
  44. self.die,
  45. )
  46. def on_cell_die(self, event: Event):
  47. self.die += 1
  48. def on_cell_born(self, event: Event):
  49. self.born += 1