维度定义 (<DimensionDef>)

功能说明

维度定义用于配置游戏中的一个独立“维度”或“地图”,它是一个可玩的游戏区域。每个维度都会指定一套地图生成器 (mapGenerators) 来构建其地形、放置初始建筑或植被等。此外,它还可以关联一个故事情节 (story) 作为该维度的开场或主线,并包含用于游戏启动界面展示的图标 (icon) 和玩家是否可以在游戏开始时选择该维度的标志 (canSelect)。

可用参数

参数名类型默认值说明
defName字符串必需。该维度定义的唯一标识符。
label字符串(空)可选。该维度在游戏中显示的名称。
description字符串(空)可选。该维度的详细描述。
mapGenerators地图生成器数组必需。定义构建此维度的地图生成器链。详见下文**mapGenerators 字段**。
icon字符串(空)可选。用于在游戏开始界面选择地图时显示的图标路径。
canSelect布尔值true可选。指示玩家是否可以在游戏开始时直接选择该维度作为起始地图。
story定义可选。关联到该维度的一个故事情节定义,常用于开场引导或主线剧情。详见下文**story 字段**。

示例

这是一个定义了一个可选择的、包含多个地图生成器和开场故事的维度示例:

<Define>
    <!-- 引用或匿名定义的地图生成器 -->
    <MapGeneratorDef defName="GrasslandsTerrain">
        <workClass>BasicTerrainMapGenerator</workClass>
        <value>{"tileDefName":"Grass", "mapCellSizeX":100, "mapCellSizeY":100, "threshold":-1, "Scale":1}</value>
    </MapGeneratorDef>
  
    <MapGeneratorDef defName="ForestScatter">
        <workClass>PlantMapGenerator</workClass>
        <value>{"tileDefName":"Tree", "mapCellSizeX":100, "mapCellSizeY":100, "requiredBaseTileDefName":"Grass", "density":0.3, "threshold":0.1, "Scale":10}</value>
    </MapGeneratorDef>

    <!-- 引用或匿名定义的故事 -->
    <StoryDef defName="StartingSequence">
        <storyStage>
            <li>
                <nextWaitTime>3</nextWaitTime>
                <messageDef defName="WelcomeMessage"/> <!-- 引用已定义的消息 -->
            </li>
            <li>
                <lastWaitTime>3</lastWaitTime>
                <nextWaitTime>0</nextWaitTime>
                <eventDef defName="SpawnPlayerBase"/> <!-- 引用已定义的事件 -->
            </li>
        </storyStage>
    </StoryDef>

    <!-- 维度定义 -->
    <DimensionDef>
        <defName>ForestDimension</defName>
        <label>茂密森林</label>
        <description>一个绿意盎然、植被茂密的维度,适合喜爱自然风光的玩家。</description>
        <icon>UI/DimensionIcons/ForestMap</icon> <!-- 图标路径 -->
        <canSelect>true</canSelect> <!-- 玩家可以从菜单中选择此地图 -->
        <mapGenerators>
            <li>GrasslandsTerrain</li> <!-- 引用已定义的地图生成器 -->
            <li>ForestScatter</li>
            <li>
                <!-- 匿名定义的地图生成器,用于在特定位置生成起始点 -->
                <workClass>BuildingMapGenerator</workClass>
                <value>
                    {
                        "defName":"StartPoint",
                        "positionX":50,
                        "positionY":50,
                        "mapping":{"1":"StartPoint"},
                        "pattern":[[1]]
                    }
                </value>
            </li>
        </mapGenerators>
        <story>StartingSequence</story> <!-- 引用已定义的故事 -->
    </DimensionDef>

    <DimensionDef>
        <defName>TutorialDimension</defName>
        <label>新手教学</label>
        <description>带领新玩家熟悉游戏基础操作的教学维度。</description>
        <icon>UI/DimensionIcons/TutorialMap</icon>
        <canSelect>false</canSelect> <!-- 此地图仅在特定条件下加载,玩家不能手动选择 -->
        <mapGenerators>
            <li>
                <workClass>BasicTerrainMapGenerator</workClass>
                <value>{"tileDefName":"TutorialGround", "mapCellSizeX":30, "mapCellSizeY":30, "threshold":-1, "Scale":1}</value>
            </li>
            <!-- ...更多教学地图生成器 -->
        </mapGenerators>
        <story>
            <!-- 匿名定义一个简单的教学故事 -->
            <storyStage>
                <li>
                    <nextWaitTime>5</nextWaitTime>
                    <messageDef>
                        <type>ScreenCenterLargeText</type>
                        <text>欢迎来到教学!</text>
                        <color>Yellow</color>
                    </messageDef>
                </li>
            </storyStage>
        </story>
    </DimensionDef>
</Define>

复杂参数说明

mapGenerators 字段 (地图生成器数组)
  • 说明:这是一个数组,包含了用于构建当前维度的所有 地图生成器定义。数组中的 <li> 元素会按顺序执行。每个 <li> 都可以通过引用已定义的地图生成器 defName 或直接进行匿名定义来指定一个地图生成器。
  • 数组定义方式
    <mapGenerators>
        <li>MapGeneratorDef的defName1</li>
        <li>MapGeneratorDef的defName2</li>
        <li>
            <!-- 匿名定义一个地图生成器 -->
            <workClass>AnotherMapGeneratorClass</workClass>
            <value>
                {
                    "paramA": "valueA",
                    "paramB": 123
                }
            </value>
        </li>
    </mapGenerators>
    
story 字段 (故事定义)
  • 说明:关联到该维度的 故事定义。这可以是一个预定义故事的 defName 引用,也可以是在此处直接定义的匿名故事。通常用于在进入该维度时播放开场剧情或设置主线任务。
  • 引用方式
    <story>StoryDef的defName</story>
    
  • 匿名定义方式
    <story>
        <storyStage>
            <li>
                <nextWaitTime>5</nextWaitTime>
                <messageDef>
                    <type>ScreenCenterLargeText</type>
                    <text>新世界,新冒险!</text>
                </messageDef>
            </li>
        </storyStage>
    </story>