layer.py 3.7KB

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