layer.py 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. # coding: utf-8
  2. from pyglet.window import key
  3. import cocos
  4. from synergine2.config import Config
  5. from synergine2.log import SynergineLogger
  6. from synergine2_cocos2d.middleware import MapMiddleware
  7. if False:
  8. from synergine2_cocos2d.actor import Actor
  9. from synergine2_cocos2d.gui import GridManager
  10. class LayerManager(object):
  11. def __init__(
  12. self,
  13. config: Config,
  14. logger: SynergineLogger,
  15. middleware: MapMiddleware,
  16. ) -> None:
  17. self.config = config
  18. self.logger = logger
  19. self.middleware = middleware
  20. self.grid_manager = None # type: GridManager
  21. self.scrolling_manager = None # type: cocos.layer.ScrollingManager
  22. self.main_scene = None # type: cocos.scene.Scene
  23. self.main_layer = None # type: cocos.layer.Layer
  24. self.edit_layer = None # TODO type
  25. self.background_sprite = None # type: cocos.sprite.Sprite
  26. self.ground_layer = None # type: cocos.tiles.RectMapLayer
  27. self.subject_layer = None # type: cocos.layer.ScrollableLayer
  28. self.top_layer = None # type: cocos.tiles.RectMapLayer
  29. def init(self) -> None:
  30. # TODO: cyclic import
  31. from synergine2_cocos2d.gui import MainLayer
  32. from synergine2_cocos2d.gui import EditLayer
  33. from synergine2_cocos2d.gui import GridManager
  34. self.middleware.init()
  35. self.grid_manager = GridManager(
  36. self.middleware.get_cell_width(),
  37. self.middleware.get_cell_height(),
  38. self.middleware.get_world_width(),
  39. self.middleware.get_world_height(),
  40. )
  41. self.main_scene = cocos.scene.Scene()
  42. self.scrolling_manager = cocos.layer.ScrollingManager()
  43. self.main_layer = MainLayer(
  44. self,
  45. self.grid_manager,
  46. **{
  47. 'width': 1200, # Note: world size
  48. 'height': 1000, # Note: world size
  49. }
  50. )
  51. self.edit_layer = EditLayer(
  52. self.config,
  53. self.logger,
  54. self,
  55. self.grid_manager,
  56. self.main_layer,
  57. **{
  58. 'bindings': {
  59. key.LEFT: 'left',
  60. key.RIGHT: 'right',
  61. key.UP: 'up',
  62. key.DOWN: 'down',
  63. key.NUM_ADD: 'zoomin',
  64. key.NUM_SUBTRACT: 'zoomout'
  65. },
  66. 'mod_modify_selection': key.MOD_SHIFT,
  67. 'mod_restricted_mov': key.MOD_ACCEL,
  68. 'fastness': 160.0,
  69. 'autoscroll_border': 20.0, # in pixels, float; None disables autoscroll
  70. 'autoscroll_fastness': 320.0,
  71. 'wheel_multiplier': 2.5,
  72. 'zoom_min': 0.1,
  73. 'zoom_max': 2.0,
  74. 'zoom_fastness': 1.0
  75. }
  76. )
  77. self.main_scene.add(self.scrolling_manager)
  78. self.scrolling_manager.add(self.main_layer, z=0)
  79. self.main_scene.add(self.edit_layer)
  80. self.background_sprite = self.middleware.get_background_sprite()
  81. self.ground_layer = self.middleware.get_ground_layer()
  82. self.subject_layer = cocos.layer.ScrollableLayer()
  83. self.top_layer = self.middleware.get_top_layer()
  84. self.main_layer.add(self.background_sprite)
  85. self.main_layer.add(self.ground_layer)
  86. self.main_layer.add(self.subject_layer)
  87. self.main_layer.add(self.top_layer)
  88. def center(self):
  89. self.background_sprite.position = 0 + (self.background_sprite.width/2), 0 + (self.background_sprite.height/2)
  90. self.ground_layer.set_view(0, 0, self.ground_layer.px_width, self.ground_layer.px_height)
  91. self.subject_layer.position = 0, 0
  92. self.top_layer.set_view(0, 0, self.top_layer.px_width, self.top_layer.px_height)
  93. def add_subject(self, subject: 'Actor') -> None:
  94. self.subject_layer.add(subject)
  95. def remove_subject(self, subject: 'Actor') -> None:
  96. self.subject_layer.remove(subject)
  97. def set_selectable(self, subject: 'Actor') -> None:
  98. self.edit_layer.set_selectable(subject)
  99. def unset_selectable(self, subject: 'Actor') -> None:
  100. self.edit_layer.unset_selectable(subject)