update map

This commit is contained in:
bridge
2025-12-03 22:38:53 +08:00
parent a5363a07ad
commit 9296cdde79
132 changed files with 751 additions and 223 deletions

View File

@@ -21,7 +21,7 @@ class TileType(Enum):
GRASSLAND = "grassland" # 草原
SWAMP = "swamp" # 沼泽
CAVE = "cave" # 洞穴
RUINS = "ruins" # 遗迹
RUIN = "ruin" # 遗迹
FARM = "farm" # 农田
SECT = "sect" # 宗门
ISLAND = "island" # 岛屿
@@ -30,6 +30,61 @@ class TileType(Enum):
TUNDRA = "tundra" # 苔原
MARSH = "marsh" # 湿地
# ============================================================
# 2x2 大型Tile 配置
# ============================================================
# 固定的大型Tile类型 (基于 TileType)
LARGE_TILE_TYPES: set[TileType] = {
TileType.CAVE,
TileType.RUIN,
TileType.SECT,
TileType.CITY,
}
# 动态的大型Tile前缀 (用于宗门名、城市名等)
# 地图存储的tile名称如果以这些类别开头的子文件夹对应则视为大型Tile
LARGE_TILE_CATEGORIES: set[str] = {"sect", "city"}
def is_large_tile(tile_name: str) -> bool:
"""
判断一个tile名称是否为2x2大型tile。
Args:
tile_name: tile的名称"cave", "明心剑宗", "青云城" 等)
Returns:
是否为大型tile
"""
# 1. 检查是否为标准大型TileType
try:
t = TileType(tile_name.lower())
return t in LARGE_TILE_TYPES
except ValueError:
pass
# 2. 非标准类型:宗门名、城市名等
# 这些tile的名称直接是中文名它们的切片存在于 sects/ 或 cities/ 目录
# 由于无法在此静态判断我们假设所有非标准TileType的名称都是大型tile
# (因为普通tile都在TileType枚举中)
return True
def get_large_tile_slices(tile_name: str) -> list[str]:
"""
获取大型tile的4个切片名称。
Args:
tile_name: 大型tile的名称
Returns:
4个切片名称的列表 [TL, TR, BL, BR]
"""
return [f"{tile_name}_{i}" for i in range(4)]
@dataclass
class Tile():
# 实际的地块