Kaynağa Gözat

interiors: finish base code and tests

Bastien Sevajol 6 yıl önce
ebeveyn
işleme
5e10df0b65

+ 19 - 0
opencc/simulation/interior.py Dosyayı Görüntüle

1
 # coding: utf-8
1
 # coding: utf-8
2
 import typing
2
 import typing
3
 
3
 
4
+from PIL.PngImagePlugin import PngImageFile
4
 from synergine2_xyz.map import TMXMap
5
 from synergine2_xyz.map import TMXMap
5
 from synergine2_xyz.utils import get_direct_around_positions_of_position
6
 from synergine2_xyz.utils import get_direct_around_positions_of_position
6
 
7
 
87
                 if where_position in interior and interior not in interiors:
88
                 if where_position in interior and interior not in interiors:
88
                     interiors.append(interior)
89
                     interiors.append(interior)
89
         return interiors
90
         return interiors
91
+
92
+    def update_image_for_interiors(
93
+        self,
94
+        image: PngImageFile,
95
+        interiors: typing.List[typing.List[typing.Tuple[int, int]]],
96
+        tile_width: int,
97
+        tile_height: int,
98
+    ) -> None:
99
+        # TODO BS 20171213: Optimization can be done: keep in cache modifications on image instead change it entirely
100
+        pixels = image.load()
101
+
102
+        for interior in interiors:
103
+            for tile_x, tile_y in interior:
104
+                start_x = tile_x * tile_width
105
+                start_y = tile_y * tile_height
106
+                for x in range(start_x, start_x+tile_width):
107
+                    for y in range(start_y, start_y+tile_height):
108
+                        pixels[x, y] = (0, 0, 0, 0)

+ 1 - 0
requirements.txt Dosyayı Görüntüle

9
 pyglet==1.3.0
9
 pyglet==1.3.0
10
 pytest==3.3.0
10
 pytest==3.3.0
11
 python-dateutil==2.6.1
11
 python-dateutil==2.6.1
12
+Pillow==4.3.0
12
 PyYAML==3.12
13
 PyYAML==3.12
13
 redis==2.10.6
14
 redis==2.10.6
14
 six==1.11.0
15
 six==1.11.0

+ 13 - 0
tests/gui/test_interiors.py Dosyayı Görüntüle

1
 # coding: utf-8
1
 # coding: utf-8
2
 from synergine2_xyz.map import TMXMap
2
 from synergine2_xyz.map import TMXMap
3
+from PIL import Image
3
 
4
 
4
 from opencc.simulation.interior import InteriorManager
5
 from opencc.simulation.interior import InteriorManager
5
 
6
 
112
     interiors = manager.get_interiors(where_positions=[(0, 1), (4, 2)])
113
     interiors = manager.get_interiors(where_positions=[(0, 1), (4, 2)])
113
 
114
 
114
     assert 2 == len(interiors)
115
     assert 2 == len(interiors)
116
+    interiors = sorted(interiors)
115
 
117
 
116
     assert (0, 1) in interiors[0]
118
     assert (0, 1) in interiors[0]
117
     assert (1, 1) in interiors[0]
119
     assert (1, 1) in interiors[0]
128
     assert (3, 3) in interiors[1]
130
     assert (3, 3) in interiors[1]
129
     assert (4, 3) in interiors[1]
131
     assert (4, 3) in interiors[1]
130
     assert 6 == len(interiors[1])
132
     assert 6 == len(interiors[1])
133
+
134
+
135
+def test_interiors_zones__make_image_transparent__just_replace():
136
+    map_ = TMXMap('tests/fixtures/one_interior.tmx')
137
+    manager = InteriorManager(map_)
138
+    interiors = manager.get_interiors()
139
+    image = Image.open('tests/fixtures/white_40x40.png')
140
+    after_image_bytes = Image.open('tests/fixtures/white_one_interior_40x40.png').tobytes()
141
+
142
+    manager.update_image_for_interiors(image, interiors, 8, 8)
143
+    assert after_image_bytes == image.tobytes()