|  | @@ -1,13 +1,21 @@
 | 
	
		
			
			| 1 | 1 |  # coding: utf-8
 | 
	
		
			
			|  | 2 | +import io
 | 
	
		
			
			| 2 | 3 |  import os
 | 
	
		
			
			| 3 | 4 |  import random
 | 
	
		
			
			| 4 | 5 |  import typing
 | 
	
		
			
			| 5 | 6 |  
 | 
	
		
			
			| 6 | 7 |  import pyglet
 | 
	
		
			
			|  | 8 | +import time
 | 
	
		
			
			|  | 9 | +
 | 
	
		
			
			|  | 10 | +import tmx
 | 
	
		
			
			|  | 11 | +from PIL import Image
 | 
	
		
			
			| 7 | 12 |  from pyglet.window import key
 | 
	
		
			
			| 8 | 13 |  
 | 
	
		
			
			| 9 | 14 |  from cocos.actions import MoveTo as BaseMoveTo
 | 
	
		
			
			| 10 | 15 |  from cocos.audio.pygame.mixer import Sound
 | 
	
		
			
			|  | 16 | +
 | 
	
		
			
			|  | 17 | +from opencc.simulation.interior import InteriorManager
 | 
	
		
			
			|  | 18 | +from opencc.simulation.tmx import TileMap
 | 
	
		
			
			| 11 | 19 |  from opencc.user_action import UserAction
 | 
	
		
			
			| 12 | 20 |  from synergine2.config import Config
 | 
	
		
			
			| 13 | 21 |  from synergine2.log import SynergineLogger
 | 
	
	
		
			
			|  | @@ -34,6 +42,11 @@ class EditLayer(BaseEditLayer):
 | 
	
		
			
			| 34 | 42 |      def __init__(self, *args, **kwargs) -> None:
 | 
	
		
			
			| 35 | 43 |          super().__init__(*args, **kwargs)
 | 
	
		
			
			| 36 | 44 |  
 | 
	
		
			
			|  | 45 | +        # TODO BS 20171213: Into other layer !
 | 
	
		
			
			|  | 46 | +        self.last_interior_draw = 0
 | 
	
		
			
			|  | 47 | +        # FIXME BS: hardcoded (move into other layer)
 | 
	
		
			
			|  | 48 | +        self.interior_manager = InteriorManager(TileMap('opencc/maps/003/003.tmx'))
 | 
	
		
			
			|  | 49 | +
 | 
	
		
			
			| 37 | 50 |      def _on_key_press(self, k, m):
 | 
	
		
			
			| 38 | 51 |          if self.selection:
 | 
	
		
			
			| 39 | 52 |              if k == key.M:
 | 
	
	
		
			
			|  | @@ -45,6 +58,34 @@ class EditLayer(BaseEditLayer):
 | 
	
		
			
			| 45 | 58 |              if k == key.F:
 | 
	
		
			
			| 46 | 59 |                  self.user_action_pending = UserAction.ORDER_FIRE
 | 
	
		
			
			| 47 | 60 |  
 | 
	
		
			
			|  | 61 | +    def draw(self) -> None:
 | 
	
		
			
			|  | 62 | +        super().draw()
 | 
	
		
			
			|  | 63 | +        self.draw_interiors()
 | 
	
		
			
			|  | 64 | +
 | 
	
		
			
			|  | 65 | +    def draw_interiors(self):
 | 
	
		
			
			|  | 66 | +        # TODO BS 20171213: Into other layer !
 | 
	
		
			
			|  | 67 | +        now = time.time()
 | 
	
		
			
			|  | 68 | +        # FIXME: config
 | 
	
		
			
			|  | 69 | +        if now - self.last_interior_draw > 2:
 | 
	
		
			
			|  | 70 | +            self.last_interior_draw = now
 | 
	
		
			
			|  | 71 | +            subject_grid_positions = [
 | 
	
		
			
			|  | 72 | +                a.subject.position for a
 | 
	
		
			
			|  | 73 | +                in self.layer_manager.subject_layer.subjects_index.values()
 | 
	
		
			
			|  | 74 | +            ]
 | 
	
		
			
			|  | 75 | +            interiors = self.interior_manager.get_interiors(where_positions=subject_grid_positions)
 | 
	
		
			
			|  | 76 | +
 | 
	
		
			
			|  | 77 | +            if interiors:
 | 
	
		
			
			|  | 78 | +                # FIXME: hardcoded
 | 
	
		
			
			|  | 79 | +                image = Image.open('opencc/maps/003/background.png')
 | 
	
		
			
			|  | 80 | +                image_fake_file = io.BytesIO()
 | 
	
		
			
			|  | 81 | +                # FIXME: tile height/width !
 | 
	
		
			
			|  | 82 | +                self.interior_manager.update_image_for_interiors(image, interiors, 8, 8)
 | 
	
		
			
			|  | 83 | +                image.save(image_fake_file, format='PNG')
 | 
	
		
			
			|  | 84 | +                self.layer_manager.background_sprite.image = pyglet.image.load(
 | 
	
		
			
			|  | 85 | +                    'new_background.png',
 | 
	
		
			
			|  | 86 | +                    file=image_fake_file,
 | 
	
		
			
			|  | 87 | +                )
 | 
	
		
			
			|  | 88 | +
 | 
	
		
			
			| 48 | 89 |  
 | 
	
		
			
			| 49 | 90 |  class TileLayerManager(LayerManager):
 | 
	
		
			
			| 50 | 91 |      edit_layer_class = EditLayer
 |