43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
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) -> dict:
|
||
"""
|
||
返回世界信息(dict),其中包含地图信息(dict)。
|
||
"""
|
||
static_info = self.static_info
|
||
map_info = self.map.get_info(detailed=detailed)
|
||
world_info = {**map_info, **static_info}
|
||
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 {"static_info": "这是一个修仙世界,修仙的境界有:练气、筑基、金丹、元婴。"} |