Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 18 additions & 25 deletions src/sprite_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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():
Expand All @@ -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)



Expand Down Expand Up @@ -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:
Expand All @@ -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:
Expand Down