gui.py 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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.simulation import Event
  7. from synergine2.terminals import TerminalPackage
  8. from synergine2.terminals import Terminal
  9. class HelloWorld(cocos.layer.Layer):
  10. def __init__(self):
  11. super().__init__()
  12. self.label = cocos.text.Label(
  13. '...',
  14. font_name='Times New Roman',
  15. font_size=21,
  16. anchor_x='center', anchor_y='center'
  17. )
  18. self.label.position = 320, 240
  19. scale = ScaleBy(3, duration=5)
  20. self.label.do(Repeat(scale + Reverse(scale)))
  21. self.add(self.label)
  22. class Gui(object):
  23. def __init__(self, terminal: Terminal):
  24. self.terminal = terminal
  25. self.terminal.register_event_handler(CellDieEvent, self.on_cell_die)
  26. self.terminal.register_event_handler(CellBornEvent, self.on_cell_born)
  27. cocos.director.director.init()
  28. self.hello_layer = HelloWorld()
  29. self.main_scene = cocos.scene.Scene(self.hello_layer)
  30. self.born = 0
  31. self.die = 0
  32. pyglet.clock.schedule_interval(lambda *_, **__: self.terminal.read(), 1 / 60.0)
  33. def run(self):
  34. cocos.director.director.run(self.main_scene)
  35. def before_received(self, package: TerminalPackage):
  36. self.born = 0
  37. self.die = 0
  38. def after_received(self, package: TerminalPackage):
  39. self.hello_layer.label.element.text = 'This cycle: {0} born, {1} dead'.format(
  40. self.born,
  41. self.die,
  42. )
  43. def on_cell_die(self, event: Event):
  44. self.die += 1
  45. def on_cell_born(self, event: Event):
  46. self.born += 1