gui.py 2.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from random import randint
  2. import cocos
  3. from cocos.sprite import Sprite
  4. from sandbox.engulf.behaviour import GrassGrownUp
  5. from sandbox.engulf.subject import Cell, Grass
  6. from synergine2.terminals import TerminalPackage
  7. from synergine2_cocos2d.gui import Gui, GridLayerMixin
  8. from synergine2_cocos2d.gui import MainLayer as BaseMainLayer
  9. class CellsLayer(GridLayerMixin, BaseMainLayer):
  10. def __init__(self, *args, **kwargs):
  11. super().__init__(*args, **kwargs)
  12. self.cells = {}
  13. def born(self, grid_position):
  14. cell = Sprite('resources/cell.png')
  15. cell.rotation = randint(0, 360)
  16. self.grid_manager.scale_sprite(cell)
  17. self.grid_manager.position_sprite(cell, grid_position)
  18. self.cells[grid_position] = cell
  19. self.add(cell)
  20. class GrassLayer(GridLayerMixin, BaseMainLayer):
  21. def __init__(self, *args, **kwargs):
  22. super().__init__(*args, **kwargs)
  23. self.grasses = {}
  24. def born(self, subject_id, grid_position, opacity=100):
  25. grass = Sprite('resources/grass.png')
  26. grass.rotation = randint(0, 360)
  27. grass.opacity = opacity
  28. self.grid_manager.scale_sprite(grass)
  29. self.grid_manager.position_sprite(grass, grid_position)
  30. self.grasses[subject_id] = grass
  31. self.add(grass)
  32. def set_density(self, subject_id, density):
  33. self.grasses[subject_id].opacity = density
  34. class MainLayer(GridLayerMixin, BaseMainLayer):
  35. def __init__(self, terminal, *args, **kwargs):
  36. super().__init__(terminal, *args, **kwargs)
  37. self.cells = CellsLayer(terminal=terminal)
  38. self.add(self.cells)
  39. self.grasses = GrassLayer(terminal=terminal)
  40. self.add(self.grasses)
  41. class Game(Gui):
  42. def __init__(self, *args, **kwargs):
  43. super().__init__(*args, **kwargs)
  44. self.main_layer = MainLayer(terminal=self.terminal)
  45. self.main_scene = cocos.scene.Scene(self.main_layer)
  46. self.terminal.register_event_handler(
  47. GrassGrownUp,
  48. self.on_grass_grown_up,
  49. )
  50. def get_main_scene(self):
  51. return self.main_scene
  52. def before_received(self, package: TerminalPackage):
  53. if package.subjects: # It's thirst package
  54. for subject in package.subjects:
  55. if isinstance(subject, Cell):
  56. self.main_layer.cells.born(subject.position)
  57. if isinstance(subject, Grass):
  58. self.main_layer.grasses.born(
  59. subject.id,
  60. subject.position,
  61. subject.density,
  62. )
  63. def on_grass_grown_up(self, event: GrassGrownUp):
  64. self.main_layer.grasses.set_density(
  65. event.subject_id,
  66. event.density,
  67. )