diff --git a/src/sprite_manager.py b/src/sprite_manager.py index c4340f1..9ae02cc 100644 --- a/src/sprite_manager.py +++ b/src/sprite_manager.py @@ -2,7 +2,13 @@ import pygame import os from typing import Dict, Tuple, Optional, List -from src.utils.constants import ALL_DRAGON_TYPES, GROWTH_STAGES, STAGE_EGG +from src.utils.constants import ( + ALL_DRAGON_TYPES, GROWTH_STAGES, STAGE_EGG, + DRAGON_RED, DRAGON_BLUE, DRAGON_GREEN, + DRAGON_PURPLE, DRAGON_SHADOW, + DRAGON_INFERNO, DRAGON_GLACIER, DRAGON_ANCIENT, + DRAGON_THUNDER, DRAGON_VOID +) from src.resource_path import get_resource_path from src.dragon_gene_system import get_gene_system @@ -22,14 +28,6 @@ def __init__(self, assets_path: str = "assets/sprites/dragons"): def _load_dragon_sprites(self): """Load dragon sprites from files, with fallback to placeholders.""" - # Import dragon colors from constants - from src.utils.constants import ( - DRAGON_RED, DRAGON_BLUE, DRAGON_GREEN, - DRAGON_PURPLE, DRAGON_SHADOW, - DRAGON_INFERNO, DRAGON_GLACIER, DRAGON_ANCIENT, - DRAGON_THUNDER, DRAGON_VOID - ) - # Color mapping for dragon types type_colors = { "fire": DRAGON_RED, @@ -69,12 +67,6 @@ def _load_dragon_sprites(self): def _generate_placeholder_sprites(self): """Generate pixel art sprites programmatically (DEPRECATED - use _load_dragon_sprites).""" - # Import dragon colors from constants - from src.utils.constants import ( - DRAGON_RED, DRAGON_BLUE, DRAGON_GREEN, - DRAGON_PURPLE, DRAGON_SHADOW - ) - # Color mapping for dragon types type_colors = { "fire": DRAGON_RED, @@ -263,9 +255,9 @@ def get_sprite(self, dragon_type: str, stage: str) -> pygame.Surface: return sprite # Fallback to placeholder - return self._create_placeholder_sprite(stage, (200, 200, 200), 60) + return self._create_pixel_art_sprite(stage, (200, 200, 200), 60) - def _load_sprite_from_file(self, dragon_type: str, stage: str) -> pygame.Surface: + def _load_sprite_from_file(self, dragon_type: str, stage: str) -> Optional[pygame.Surface]: """Try to load sprite from file. Args: @@ -325,7 +317,7 @@ def render_gene_dragon(self, dragon, scale: float = 1.0) -> Optional[pygame.Surf # Gene dragons are shown at full size once hatched return gene_system.render_dragon(dragon.genotype, (0, 0), scale) - def get_dragon_sprite(self, dragon, stage: str = None) -> pygame.Surface: + def get_dragon_sprite(self, dragon, stage: Optional[str] = None) -> pygame.Surface: """Get sprite for a dragon (gene-based or legacy). Args: @@ -335,8 +327,8 @@ def get_dragon_sprite(self, dragon, stage: str = None) -> pygame.Surface: Returns: Pygame surface with the sprite """ - if stage is None: - stage = dragon.stage + # Ensure stage is always a string + actual_stage: str = stage if stage is not None else dragon.stage # Check if this is a gene-based dragon if dragon.is_gene_based(): @@ -345,7 +337,7 @@ def get_dragon_sprite(self, dragon, stage: str = None) -> pygame.Surface: return sprite # Fallback to legacy system - return self.get_sprite(dragon.dragon_type, stage) + return self.get_sprite(dragon.dragon_type, actual_stage) @@ -386,8 +378,8 @@ def apply_rgb_tint(self, surface: pygame.Surface, rgb_modifier: Tuple[int, int, return tinted - def get_dragon_with_enchantments(self, dragon_type: str = None, stage: str = None, - enchantments: List[str] = None, dragon = None) -> pygame.Surface: + def get_dragon_with_enchantments(self, dragon_type: Optional[str] = None, stage: Optional[str] = None, + enchantments: Optional[List[str]] = None, dragon = None) -> pygame.Surface: """Get a dragon sprite with RGB color tinting from enchantments. Args: @@ -409,10 +401,11 @@ def get_dragon_with_enchantments(self, dragon_type: str = None, stage: str = Non dragon_sprite = self.render_gene_dragon(dragon, scale=1.0) if dragon_sprite is None: # Fallback to legacy if gene rendering fails - dragon_sprite = self.get_sprite(dragon.dragon_type, stage) + # stage is guaranteed to be a string here from dragon.stage + dragon_sprite = self.get_sprite(dragon.dragon_type, dragon.stage) else: # Legacy dragon - dragon_sprite = self.get_sprite(dragon.dragon_type, stage) + dragon_sprite = self.get_sprite(dragon.dragon_type, dragon.stage) else: # Legacy API - use dragon_type and stage if dragon_type is None or stage is None: