gui.py 2.4KB

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