地图生成器工作类 (BasicTerrainMapGenerator)

功能说明

BasicTerrainMapGenerator 是一个基础地形地图生成器工作类,它基于柏林噪声(Perlin Noise)算法来生成地图的特定区域。通过配置不同的参数,您可以控制生成瓦片的类型、密度、大小和分布,从而创建出多样化的地形,如草地、沙漠、水域或山脉。

该生成器通过 MapGeneratorDef 中的 workClass 字段引用,其具体的行为由 value 字段中提供的 JSON 配置来控制。

可用参数

BasicTerrainMapGenerator 通过解析 MapGeneratorDefvalue 字段里的 JSON 配置来工作。此 JSON 配置对应 BasicTerrainGeneratorConfig

JSON参数名XML参数名 (N/A)类型默认值说明
tileDefNameN/A字符串DefaultTerrainTile必需。符合柏林噪声条件的区域将填充的 瓦片定义 (TileDef)defName
thresholdN/A浮点数0.0柏林噪声的最小阈值(-1到1之间),噪声值高于此值才可能放置 tileDefName 指定的瓦片。
maxThresholdN/A浮点数1.0柏林噪声的最大阈值(-1到1之间),噪声值低于此值才可能放置 tileDefName 指定的瓦片。
ElseTileDefNameN/A字符串无 (null)可选。当柏林噪声值不满足 thresholdmaxThreshold 范围时,该区域将填充的 瓦片定义 (TileDef) defName。如果为 null 则不放置任何瓦片。
scaleN/A浮点数0.1柏林噪声的缩放因子。值越大,地形特征(如山脉、湖泊)的尺寸越小;值越小,特征尺寸越大。
offsetXN/A浮点数0.0柏林噪声在X轴上的偏移量,用于改变噪声图案的起始位置。
offsetYN/A浮点数0.0柏林噪声在Y轴上的偏移量,用于改变噪声图案的起始位置。
mapCellSizeXN/A整数100地图生成区域的宽度(以单元格数量计)。
mapCellSizeYN/A整数100地图生成区域的高度(以单元格数量计)。
targetDimensionN/A枚举 (字符串)Base指定生成瓦片的目标地图层。详见下文**MapDimension 枚举**。
originXN/A整数0地图生成区域的左上角X坐标(以单元格数量计)。
originYN/A整数0地图生成区域的左上角Y坐标(以单元格数量计)。

示例

以下是一个 MapGeneratorDef 的示例,它使用了 BasicTerrainMapGenerator 来生成一个基础的草地地图:

<Define>
    <!-- 其他 TileDef 定义... -->
  
    <TileDef>
        <defName>Grass</defName>
        <label>草地</label>
        <texture>tileMap_Grass</texture>
        <collider>None</collider>
        <tileCost>0</tileCost>
    </TileDef>

    <MapGeneratorDef>
        <defName>GrassBase</defName>
        <label>草地基础生成器</label>
        <description>使用柏林噪声生成一个均匀的草地基础地形。</description>
        <workClass>BasicTerrainMapGenerator</workClass>
        <value>
        {
            "tileDefName":"Grass",           // 符合条件的区域填充为"Grass"瓦片
            "mapCellSizeX":100,              // 生成区域宽度100格
            "mapCellSizeY":100,              // 生成区域高度100格
            "threshold":-1.0,                 // 柏林噪声的最小阈值。设为-1.0表示只要噪声值不低于-1.0且不高于maxThreshold,就放置瓦片
            "maxThreshold":1.0,               // 柏林噪声的最大阈值。设为1.0表示只要噪声值不高于1.0且不低于threshold,就放置瓦片
            "scale":7.0,                     // 柏林噪声缩放因子,7.0会生成较小的特征
            "targetDimension":"Base",        // 在基础地形层生成
            "originX":0,                     // 从地图的(0,0)点开始生成
            "originY":0
        }
        </value>
    </MapGeneratorDef>

    <MapGeneratorDef>
        <defName>BasicWaterAndLand</defName>
        <label>基础水陆生成器</label>
        <description>使用柏林噪声生成水域和陆地交错的地形。</description>
        <workClass>BasicTerrainMapGenerator</workClass>
        <value>
        {
            "tileDefName":"Water",             // 噪声在 [0.0, 0.2) 区间放置水瓦片
            "ElseTileDefName":"Grass",         // 噪声在其他区间放置草地瓦片
            "threshold":0.0,                   // 噪声值大于等于0.0
            "maxThreshold":0.2,                // 噪声值小于0.2
            "scale":0.05,                      // 较大的地形特征,形成大片水域和陆地
            "offsetX":100.0,                   // 额外偏移量,使每次生成的地形不同
            "offsetY":50.0,
            "mapCellSizeX":200,                // 生成区域宽度200格
            "mapCellSizeY":200,                // 生成区域高度200格
            "targetDimension":"Base"           // 在基础地形层生成
        }
        </value>
    </MapGeneratorDef>
</Define>

复杂参数说明

value 字段 (JSON配置)
  • 说明MapGeneratorDef 中的 value 字段是一个特别说明,它不使用标准的XML元素赋值方式,而是直接作为文本内容包含一个JSON格式的字符串。这个JSON字符串包含了 BasicTerrainGeneratorConfig 的所有配置参数,用于指导 BasicTerrainMapGenerator 的具体生成行为。您需要确保提供的JSON字符串是语法正确的。
  • JSON属性与C#映射关系
    • threshold:在JSON中,用于配置C#类中的 MinThreshold 属性。
    • 其他JSON属性名(如 tileDefName, scale 等)与C#类中的对应属性名一致(忽略大小写差异,JSON通常使用驼峰式命名)。
  • 示例:请参考上方的 MapGeneratorDef 示例中 value 标签内的内容。
MapDimension 枚举 (地图层级)
  • 说明:这是一个枚举类型,用于指定 BasicTerrainGeneratorConfig 生成瓦片的目标地图层。不同的层级用于区分不同类型的地图元素,以便于渲染和逻辑处理。
  • 可选值
    • Base: 基础地形层,通常用于放置地面、水体等主要地形瓦片。
    • Building: 建筑层,通常用于放置建筑结构、墙壁等可互动或阻挡的瓦片。
    • Plant: 植物层,通常用于放置树木、草丛等植被瓦片。
  • 示例
    "targetDimension":"Base"
    
    "targetDimension":"Plant"