P.S. to previous commit: instead of Sprite flow load_sprites function was changed: gathering the number of sprites with the same names before second _ and hold it at sprites dict. also now sprites must be named as objectname_action_number. Main commit - full sprites support, with caching, transparency and smooth scaling. drawing function moved to Object methods

This commit is contained in:
shiva404
2026-02-15 21:23:02 +03:00
parent ab58803373
commit f679dde81f
12 changed files with 637 additions and 838 deletions

View File

@@ -1,5 +1,4 @@
from common import dataclass, field
from common import dataclass, scale_image
@dataclass
class Object:
@@ -7,7 +6,29 @@ class Object:
name: str
sprite_name: str
sprite_state: int = 0
sprite_scale: int = 1
sprite_cache: None = None
def draw(self, draw_data):
if draw_data["spr_up"] == 0:
if self.sprite_state == len(draw_data["sprites"][self.sprite_name]) - 1:
self.sprite_state = 0
else:
self.sprite_state += 1
if self.sprite_cache is None:
self.sprite_cache = draw_data["sprites"][self.sprite_name][self.sprite_state]
if self.sprite_scale != draw_data["scale"]:
self.sprite_scale = draw_data["scale"]
self.sprite_cache = scale_image(draw_data["sprites"][self.sprite_name][self.sprite_state], draw_data["scale"])
rect = self.sprite_cache.get_rect(center = (draw_data["x"] + draw_data["w"] /2, draw_data["y"] + draw_data["h"]/ 2))
else:
rect = self.sprite_cache.get_rect(center = (draw_data["x"] + draw_data["w"] /2, draw_data["y"] + draw_data["h"]/ 2))
draw_data["screen"].blit(self.sprite_cache, rect)
@dataclass
class Terrain(Object):
pass
@@ -15,6 +36,7 @@ class Terrain(Object):
@dataclass
class Creature(Object):
pass
#status
#actions
#tasks
#items