Source code for models.chunk

"""
Model do Chunk
Representa um chunk do mapa do jogo
"""

from dataclasses import dataclass
from typing import List, Optional


[docs] @dataclass class Chunk: """ Model que representa um chunk do mapa Attributes: id_chunk: Identificador único do chunk (chave primária) id_bioma: FK para Bioma.id_bioma id_mapa: FK para Mapa.id_mapa x: Coordenada X do chunk no grid y: Coordenada Y do chunk no grid """ id_chunk: int id_bioma: int id_mapa: int x: int y: int
[docs] def get_display_name(self) -> str: """ Retorna o nome formatado do chunk para exibição Returns: String formatada do chunk """ return f"{self.id_bioma} ({self.id_mapa} - {self.x}, {self.y})"
[docs] def is_desert(self) -> bool: """Verifica se o chunk é um deserto""" return self.id_bioma == 'deserto'
[docs] def is_jungle(self) -> bool: """Verifica se o chunk é uma selva""" return self.id_bioma == 'selva'
[docs] def is_forest(self) -> bool: """Verifica se o chunk é uma floresta""" return self.id_bioma == 'floresta'
[docs] def is_ocean(self) -> bool: """Verifica se o chunk é um oceano""" return self.id_bioma == 'oceano'
[docs] def is_day(self) -> bool: """Verifica se é dia no chunk""" return self.x % 2 == 0
[docs] def is_night(self) -> bool: """Verifica se é noite no chunk""" return self.x % 2 != 0
[docs] def get_adjacent_chunk_ids(self, map_size: int = 32) -> List[int]: """ Retorna os IDs dos chunks adjacentes Baseado na lógica de grid do mapa Args: map_size: Tamanho do mapa (assumindo mapa quadrado) Returns: Lista de IDs dos chunks adjacentes """ adjacent = [] # Horizontal if self.id_chunk > 1: adjacent.append(self.id_chunk - 1) if self.id_chunk < 1000: # Assumindo 1000 chunks adjacent.append(self.id_chunk + 1) # Vertical if self.id_chunk > map_size: adjacent.append(self.id_chunk - map_size) if self.id_chunk <= 1000 - map_size: adjacent.append(self.id_chunk + map_size) return adjacent
[docs] def belongs_to_map(self, mapa_nome: str, mapa_turno: str) -> bool: """ Verifica se o chunk pertence a um mapa específico Args: mapa_nome: Nome do mapa mapa_turno: Turno do mapa Returns: True se o chunk pertence ao mapa """ return self.id_mapa == mapa_nome and self.x == mapa_turno
[docs] def get_bioma_type(self) -> str: """ Retorna o tipo de bioma como string Returns: Nome do bioma """ return self.id_bioma
[docs] def get_map_key(self) -> tuple: """ Retorna a chave do mapa como tupla Returns: Tupla (nome_mapa, turno_mapa) """ return (self.id_mapa, self.x)
[docs] def __str__(self) -> str: """Representação string do chunk""" return f"Chunk({self.id_chunk}: {self.get_display_name()})"
[docs] def __repr__(self) -> str: """Representação detalhada do chunk""" return (f"Chunk(id_chunk={self.id_chunk}, " f"id_bioma={self.id_bioma}, " f"id_mapa={self.id_mapa}, " f"x={self.x}, " f"y={self.y})")
[docs] def __eq__(self, other) -> bool: """Comparação de igualdade baseada na chave primária""" if not isinstance(other, Chunk): return False return self.id_chunk == other.id_chunk
[docs] def __hash__(self) -> int: """Hash baseado na chave primária""" return hash(self.id_chunk)