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: numero_chunk: ID único do chunk (chave primária) id_bioma: Nome do bioma do chunk (FK para Bioma.NomeBioma) id_mapa_nome: Nome do mapa (parte da FK para Mapa) id_mapa_turno: Turno do mapa (parte da FK para Mapa) """ numero_chunk: int id_bioma: str id_mapa_nome: str id_mapa_turno: str
[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_nome} - {self.id_mapa_turno})"
[docs] def is_desert(self) -> bool: """Verifica se o chunk é um deserto""" return self.id_bioma.lower() == 'deserto'
[docs] def is_jungle(self) -> bool: """Verifica se o chunk é uma selva""" return self.id_bioma.lower() == 'selva'
[docs] def is_forest(self) -> bool: """Verifica se o chunk é uma floresta""" return self.id_bioma.lower() == 'floresta'
[docs] def is_ocean(self) -> bool: """Verifica se o chunk é um oceano""" return self.id_bioma.lower() == 'oceano'
[docs] def is_day(self) -> bool: """Verifica se é dia no chunk""" return self.id_mapa_turno.lower() == 'dia'
[docs] def is_night(self) -> bool: """Verifica se é noite no chunk""" return self.id_mapa_turno.lower() == 'noite'
[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.numero_chunk > 1: adjacent.append(self.numero_chunk - 1) if self.numero_chunk < 1000: # Assumindo 1000 chunks adjacent.append(self.numero_chunk + 1) # Vertical if self.numero_chunk > map_size: adjacent.append(self.numero_chunk - map_size) if self.numero_chunk <= 1000 - map_size: adjacent.append(self.numero_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_nome == mapa_nome and self.id_mapa_turno == 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_nome, self.id_mapa_turno)
[docs] def __str__(self) -> str: """Representação string do chunk""" return f"Chunk({self.numero_chunk}: {self.get_display_name()})"
[docs] def __repr__(self) -> str: """Representação detalhada do chunk""" return (f"Chunk(numero_chunk={self.numero_chunk}, " f"id_bioma='{self.id_bioma}', " f"id_mapa_nome='{self.id_mapa_nome}', " f"id_mapa_turno='{self.id_mapa_turno}')")
[docs] def __eq__(self, other) -> bool: """Comparação de igualdade baseada na chave primária""" if not isinstance(other, Chunk): return False return self.numero_chunk == other.numero_chunk
[docs] def __hash__(self) -> int: """Hash baseado na chave primária""" return hash(self.numero_chunk)