add sect regions

This commit is contained in:
bridge
2025-10-08 23:26:19 +08:00
parent 5489bc725c
commit ad163c2af1
9 changed files with 158 additions and 19 deletions

View File

@@ -1,6 +1,9 @@
from src.classes.map import Map
from src.classes.tile import TileType
from src.classes.essence import Essence, EssenceType
from src.classes.sect_region import SectRegion
from src.classes.region import Shape
from src.classes.sect import Sect
def create_cultivation_world_map() -> Map:
"""
@@ -20,6 +23,49 @@ def create_cultivation_world_map() -> Map:
return game_map
def add_sect_headquarters(game_map: Map, enabled_sects: list[Sect]):
"""
根据已启用的宗门列表为其添加总部区域2x2或1x2等小矩形hover仅显示名称与描述
若未启用(列表中无该宗门),则不添加对应总部。
"""
# 为九个宗门设计坐标(根据地图地形大势和叙事):
# 仅登记矩形区域的西北角与东南角
locs: dict[str, tuple[tuple[int, int], tuple[int, int]]] = {
"明心剑宗": ((36, 10), (37, 11)), # 北部山脉以南的名门仙山
"百兽宗": ((22, 22), (23, 23)), # 中西部靠近山林
"水镜宗": ((58, 22), (59, 23)), # 湖心三岛——近东海内陆湖
"冥王宗": ((66, 8), (67, 9)), # 东北近海的群岛
"朱勾宗": ((48, 8), (49, 9)), # 东北内陆山地近雪域
"合欢宗": ((62, 40), (63, 41)), # 东南近海桃花岛
"镇魂宗": ((30, 46), (31, 47)), # 极南海上礁岛
"幽魂噬影宗":((44, 38), (45, 39)), # 南部雨林深处
"千帆城": ((60, 28), (61, 29)), # 海上浮岛靠近入海口
}
name_to_sect = {s.name: s for s in enabled_sects}
for sect_name, (nw, se) in locs.items():
sect = name_to_sect.get(sect_name)
if sect is None:
continue
# 名称与描述来自 sect.headquarter若为空则用 sect 名称/描述
hq_name = getattr(sect.headquarter, "name", sect.name) or sect.name
hq_desc = getattr(sect.headquarter, "desc", sect.desc) or sect.desc
region = SectRegion(
id=400 + sect.id, # 4xx 预留给宗门总部区域id
name=hq_name,
desc=hq_desc,
shape=Shape.RECTANGLE,
north_west_cor=f"{nw[0]},{nw[1]}",
south_east_cor=f"{se[0]},{se[1]}",
image_path=str(getattr(sect.headquarter, "image", None)),
)
game_map.regions[region.id] = region
game_map.region_names[region.name] = region
# 添加完成后,重新分配到 tiles
_assign_regions_to_tiles(game_map)
def _create_base_terrain(game_map: Map):
"""创建基础地形"""
width, height = game_map.width, game_map.height

View File

@@ -18,7 +18,7 @@ from src.classes.calendar import Month, Year, MonthStamp, create_month_stamp
from src.classes.cultivation import CultivationProgress
from src.classes.root import Root
from src.classes.age import Age
from src.run.create_map import create_cultivation_world_map
from src.run.create_map import create_cultivation_world_map, add_sect_headquarters
from src.utils.names import get_random_name, get_random_name_for_sect
from src.utils.id_generator import get_avatar_id
from src.utils.config import CONFIG
@@ -58,6 +58,9 @@ def make_avatars(world: World, count: int = 12, current_month_stamp: MonthStamp
enabled_sects = list(sects_by_id.values())
random.shuffle(enabled_sects)
enabled_sects = enabled_sects[:max_sects] if use_sects else []
# 在地图上添加启用宗门的总部(仅显示名称与描述)
if enabled_sects:
add_sect_headquarters(world.map, enabled_sects)
# 循环均匀分配宗门成员(轮询宗门)
sect_assign_index = 0
sect_member_count = 0