Files
WulaFallenEmpireRW/Source/WulaFallenEmpire/BuildingComp/WULA_BuildingSpawner/CompProperties_BuildingSpawner.cs
2025-12-05 17:31:34 +08:00

83 lines
2.6 KiB
C#

using RimWorld;
using System.Collections.Generic;
using Verse;
namespace WulaFallenEmpire
{
public class CompProperties_BuildingSpawner : CompProperties
{
public ThingDef buildingToSpawn;
public bool destroyBuilding = true;
public int delayTicks = 0;
// 自动召唤设置
public bool canAutoCall = true;
public int autoCallDelayTicks = 0; // 默认10秒
// FlyOver 前提条件
public bool requireFlyOver = false;
// 屋顶限制
public bool allowThinRoof = true;
public bool allowThickRoof = true;
// 新增:科技需求
public ResearchProjectDef requiredResearch;
// 新增:生成时的效果器
public EffecterDef spawnEffecter;
// 新增:音效
public SoundDef spawnSound;
// 新增:建筑朝向设置
public Rot4 buildingRotation = Rot4.North;
// 新增:位置偏移
public IntVec2 spawnOffset = IntVec2.Zero;
// 新增:允许替换现有建筑
public bool canReplaceExisting = false;
// 新增:是否继承原建筑的派系
public bool inheritFaction = true;
// 新增:建筑生成后的燃料量(如果适用)
public FloatRange fuelRange = new FloatRange(1f, 1f);
public CompProperties_BuildingSpawner()
{
compClass = typeof(CompBuildingSpawner);
}
public override void ResolveReferences(ThingDef parentDef)
{
base.ResolveReferences(parentDef);
// 验证buildingToSpawn
if (buildingToSpawn != null && buildingToSpawn.category != ThingCategory.Building)
{
Log.Error($"CompProperties_BuildingSpawner: buildingToSpawn must be a building, but got {buildingToSpawn.defName}");
buildingToSpawn = null;
}
}
public override IEnumerable<string> ConfigErrors(ThingDef parentDef)
{
foreach (string item in base.ConfigErrors(parentDef))
{
yield return item;
}
if (buildingToSpawn == null)
{
yield return "buildingToSpawn is not set";
}
else if (buildingToSpawn.category != ThingCategory.Building)
{
yield return $"buildingToSpawn must be a building, but got {buildingToSpawn.defName}";
}
}
}
}