|
@@ -56,7 +56,7 @@ class Actor(AnimatedInterface, cocos.sprite.Sprite):
|
56
|
56
|
self.subject = subject
|
57
|
57
|
self.cshape = None # type: collision_model.AARectShape
|
58
|
58
|
self.update_cshape()
|
59
|
|
- self.build_animation_images()
|
|
59
|
+ self.build_animation_images(subject.id)
|
60
|
60
|
self.current_image = image
|
61
|
61
|
self.need_update_cshape = False
|
62
|
62
|
self.properties = properties or {}
|
|
@@ -74,6 +74,7 @@ class Actor(AnimatedInterface, cocos.sprite.Sprite):
|
74
|
74
|
default_appliable_image,
|
75
|
75
|
)
|
76
|
76
|
|
|
77
|
+ # FIXME NOW: nom des image utilise au dessus
|
77
|
78
|
final_name = '_'.join([
|
78
|
79
|
str(subject_id),
|
79
|
80
|
ntpath.basename(base_image_path),
|
|
@@ -86,6 +87,13 @@ class Actor(AnimatedInterface, cocos.sprite.Sprite):
|
86
|
87
|
def get_default_appliable_images(self) -> typing.List[Image.Image]:
|
87
|
88
|
return []
|
88
|
89
|
|
|
90
|
+ def get_animation_appliable_images(
|
|
91
|
+ self,
|
|
92
|
+ animation_name: str,
|
|
93
|
+ animation_position: int,
|
|
94
|
+ ) -> typing.List[Image.Image]:
|
|
95
|
+ return []
|
|
96
|
+
|
89
|
97
|
def freeze(self) -> None:
|
90
|
98
|
"""
|
91
|
99
|
Set object to freeze mode: No visual modification can be done anymore
|
|
@@ -112,18 +120,41 @@ class Actor(AnimatedInterface, cocos.sprite.Sprite):
|
112
|
120
|
self.position = new_position
|
113
|
121
|
self.cshape.center = new_position # Note: if remove: strange behaviour: drag change actor position with anomaly
|
114
|
122
|
|
115
|
|
- def build_animation_images(self) -> None:
|
|
123
|
+ def build_animation_images(self, subject_id: int) -> None:
|
116
|
124
|
"""
|
117
|
125
|
Fill self.animation_images with self.animation_image_paths
|
118
|
126
|
:return: None
|
119
|
127
|
"""
|
|
128
|
+ cache_dir = self.config.resolve('global.cache_dir_path')
|
120
|
129
|
for animation_name, animation_image_paths in self.animation_image_paths.items():
|
121
|
130
|
self.animation_images[animation_name] = []
|
122
|
|
- for animation_image_path in animation_image_paths:
|
|
131
|
+ for i, animation_image_path in enumerate(animation_image_paths):
|
123
|
132
|
final_image_path = self.path_manager.path(animation_image_path)
|
|
133
|
+ final_image = Image.open(final_image_path)
|
|
134
|
+
|
|
135
|
+ # NOW: recup les image a paste en fonction du mode et de la weapon
|
|
136
|
+ for appliable_image in self.get_animation_appliable_images(
|
|
137
|
+ animation_name,
|
|
138
|
+ i,
|
|
139
|
+ ):
|
|
140
|
+ final_image.paste(
|
|
141
|
+ appliable_image,
|
|
142
|
+ (0, 0),
|
|
143
|
+ appliable_image,
|
|
144
|
+ )
|
|
145
|
+
|
|
146
|
+ # FIXME NOW: nom des image utilise au dessus
|
|
147
|
+ final_name = '_'.join([
|
|
148
|
+ str(subject_id),
|
|
149
|
+ ntpath.basename(final_image_path),
|
|
150
|
+ ])
|
|
151
|
+ final_path = os.path.join(cache_dir, final_name)
|
|
152
|
+
|
|
153
|
+ final_image.save(final_path)
|
|
154
|
+
|
124
|
155
|
self.animation_images[animation_name].append(
|
125
|
|
- pyglet.resource.image(
|
126
|
|
- final_image_path,
|
|
156
|
+ pyglet.image.load(
|
|
157
|
+ final_path,
|
127
|
158
|
)
|
128
|
159
|
)
|
129
|
160
|
|