Files
cultivation-world-simulator/src/classes/world.py
2025-12-08 22:39:44 +08:00

48 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Optional
from src.classes.map import Map
from src.classes.calendar import Year, Month, MonthStamp
from src.classes.avatar_manager import AvatarManager
from src.classes.event_manager import EventManager
if TYPE_CHECKING:
from src.classes.avatar import Avatar
from src.classes.celestial_phenomenon import CelestialPhenomenon
@dataclass
class World():
map: Map
month_stamp: MonthStamp
avatar_manager: AvatarManager = field(default_factory=AvatarManager)
# 全局事件管理器
event_manager: EventManager = field(default_factory=EventManager)
# 当前天地灵机世界级buff/debuff
current_phenomenon: Optional["CelestialPhenomenon"] = None
# 天地灵机开始年份(用于计算持续时间)
phenomenon_start_year: int = 0
def get_info(self, detailed: bool = False, avatar: Optional["Avatar"] = None) -> dict:
"""
返回世界信息dict其中包含地图信息dict
如果指定了 avatar将传给 map.get_info 用于过滤区域和计算距离。
"""
static_info = self.static_info
map_info = self.map.get_info(detailed=detailed, avatar=avatar)
world_info = {**map_info, **static_info}
if self.current_phenomenon:
world_info["天地灵机"] = f"{self.current_phenomenon.name}{self.current_phenomenon.desc}"
return world_info
def get_avatars_in_same_region(self, avatar: "Avatar"):
return self.avatar_manager.get_avatars_in_same_region(avatar)
def get_observable_avatars(self, avatar: "Avatar"):
return self.avatar_manager.get_observable_avatars(avatar)
@property
def static_info(self) -> dict:
return {"世界描述": "这是一个修仙世界,修仙的境界有:练气、筑基、金丹、元婴。"}