refactor(mech): replace DroneWorkModeDef with MechWorkModeDef and update logic

- Replace all references of `DroneWorkModeDef` with `MechWorkModeDef` in components and gizmos
- Delete `DroneWorkModeDef.cs` and remove related fields from `WulaDefOf`
- Update `WULA_AutonomousMech.xml` to use `JobGiver_DroneSelfShutdown` and correct mode names
- Remove redundant safety checks in `ThinkNode_ConditionalAutonomousWorkMode`
- Update WulaFallenEmpire assembly
This commit is contained in:
2025-12-11 16:02:38 +08:00
parent 967a917e2f
commit dc12f47b3d
8 changed files with 11 additions and 75 deletions

View File

@@ -28,7 +28,7 @@
<subNodes> <subNodes>
<li Class="JobGiver_GetEnergy_Charger" /> <li Class="JobGiver_GetEnergy_Charger" />
<!-- 如果没有充电站,强制休眠 --> <!-- 如果没有充电站,强制休眠 -->
<li Class="JobGiver_SelfShutdown" /> <li Class="WulaFallenEmpire.JobGiver_DroneSelfShutdown" />
</subNodes> </subNodes>
</li> </li>
@@ -164,10 +164,10 @@
<!-- 关机模式:立刻休眠 --> <!-- 关机模式:立刻休眠 -->
<li Class="WulaFallenEmpire.ThinkNode_ConditionalAutonomousWorkMode"> <li Class="WulaFallenEmpire.ThinkNode_ConditionalAutonomousWorkMode">
<requiredMode>Shutdown</requiredMode> <requiredMode>SelfShutdown</requiredMode>
<subNodes> <subNodes>
<li Class="JobGiver_SeekAllowedArea" /> <li Class="JobGiver_SeekAllowedArea" />
<li Class="JobGiver_SelfShutdown" /> <li Class="WulaFallenEmpire.JobGiver_DroneSelfShutdown" />
</subNodes> </subNodes>
</li> </li>

View File

@@ -43,7 +43,7 @@ namespace WulaFallenEmpire
public float criticalEnergyThreshold = 0.1f; // 临界能量阈值 public float criticalEnergyThreshold = 0.1f; // 临界能量阈值
public float rechargeCompleteThreshold = 0.9f; // 充电完成阈值 public float rechargeCompleteThreshold = 0.9f; // 充电完成阈值
public DroneWorkModeDef initialWorkMode; public MechWorkModeDef initialWorkMode;
public CompProperties_AutonomousMech() public CompProperties_AutonomousMech()
{ {
@@ -57,7 +57,7 @@ namespace WulaFallenEmpire
public Pawn MechPawn => parent as Pawn; public Pawn MechPawn => parent as Pawn;
private DroneWorkModeDef currentWorkMode; private MechWorkModeDef currentWorkMode;
public bool CanBeAutonomous public bool CanBeAutonomous
{ {
@@ -142,7 +142,7 @@ namespace WulaFallenEmpire
} }
} }
public DroneWorkModeDef CurrentWorkMode => currentWorkMode; public MechWorkModeDef CurrentWorkMode => currentWorkMode;
// 新增:能量状态检查方法 // 新增:能量状态检查方法
public float GetEnergyLevel() public float GetEnergyLevel()
@@ -161,7 +161,7 @@ namespace WulaFallenEmpire
if (currentWorkMode == null) if (currentWorkMode == null)
{ {
currentWorkMode = Props.initialWorkMode ?? WulaDefOf.Work; currentWorkMode = Props.initialWorkMode ?? MechWorkModeDefOf.Work;
} }
// 确保使用独立战斗系统 // 确保使用独立战斗系统
@@ -347,7 +347,7 @@ namespace WulaFallenEmpire
return availableWeapons.RandomElement(); return availableWeapons.RandomElement();
} }
public void SetWorkMode(DroneWorkModeDef mode) public void SetWorkMode(MechWorkModeDef mode)
{ {
currentWorkMode = mode; currentWorkMode = mode;

View File

@@ -74,7 +74,7 @@ namespace WulaFallenEmpire
public static IEnumerable<FloatMenuOption> GetWorkModeOptions(CompAutonomousMech comp, HashSet<CompAutonomousMech> groupedComps = null) public static IEnumerable<FloatMenuOption> GetWorkModeOptions(CompAutonomousMech comp, HashSet<CompAutonomousMech> groupedComps = null)
{ {
foreach (DroneWorkModeDef mode in DefDatabase<DroneWorkModeDef>.AllDefs.OrderBy(d => d.uiOrder)) foreach (MechWorkModeDef mode in DefDatabase<MechWorkModeDef>.AllDefs.OrderBy(d => d.uiOrder))
{ {
yield return new FloatMenuOption(mode.LabelCap, delegate yield return new FloatMenuOption(mode.LabelCap, delegate
{ {

View File

@@ -1,26 +0,0 @@
using UnityEngine;
using Verse;
namespace WulaFallenEmpire
{
public class DroneWorkModeDef : Def
{
[NoTranslate]
public string iconPath;
public Texture2D uiIcon;
public int uiOrder;
public override void PostLoad()
{
if (!string.IsNullOrEmpty(iconPath))
{
LongEventHandler.ExecuteWhenFinished(delegate
{
uiIcon = ContentFinder<Texture2D>.Get(iconPath);
});
}
}
}
}

View File

@@ -6,7 +6,7 @@ namespace WulaFallenEmpire
{ {
public class ThinkNode_ConditionalAutonomousWorkMode : ThinkNode_Conditional public class ThinkNode_ConditionalAutonomousWorkMode : ThinkNode_Conditional
{ {
public DroneWorkModeDef requiredMode; public MechWorkModeDef requiredMode;
protected override bool Satisfied(Pawn pawn) protected override bool Satisfied(Pawn pawn)
{ {
@@ -24,40 +24,6 @@ namespace WulaFallenEmpire
if (comp.CurrentWorkMode != requiredMode) if (comp.CurrentWorkMode != requiredMode)
return false; return false;
// 额外的安全检查确保pawn有工作设置
if (pawn.workSettings == null)
{
Log.Warning($"[WULA] {pawn.LabelShort} has no workSettings in ThinkNode_ConditionalAutonomousWorkMode");
return false;
}
// 检查是否启用了工作
if (!pawn.workSettings.EverWork)
{
Log.Warning($"[WULA] {pawn.LabelShort} has EverWork=false in ThinkNode_ConditionalAutonomousWorkMode");
return false;
}
// 检查是否有工作给予器
var workGivers = pawn.workSettings.WorkGiversInOrderNormal;
if (workGivers == null || workGivers.Count == 0)
{
Log.Warning($"[WULA] {pawn.LabelShort} has no work givers in ThinkNode_ConditionalAutonomousWorkMode");
return false;
}
// 检查是否为机械体且具有机械体能力
if (pawn.RaceProps.IsMechanoid)
{
// 检查是否有操纵能力
var manipulation = pawn.health?.capacities?.GetLevel(PawnCapacityDefOf.Manipulation);
if (manipulation < 0.1f)
{
Log.Warning($"[WULA] {pawn.LabelShort} has insufficient manipulation capacity: {manipulation}");
return false;
}
}
return true; return true;
} }
catch (System.Exception ex) catch (System.Exception ex)

View File

@@ -6,7 +6,7 @@ namespace WulaFallenEmpire
{ {
public class ThinkNode_ConditionalWorkMode_Drone : ThinkNode_Conditional public class ThinkNode_ConditionalWorkMode_Drone : ThinkNode_Conditional
{ {
public DroneWorkModeDef workMode; public MechWorkModeDef workMode;
public override ThinkNode DeepCopy(bool resolve = true) public override ThinkNode DeepCopy(bool resolve = true)
{ {

View File

@@ -80,10 +80,6 @@ namespace WulaFallenEmpire
[DefOf] [DefOf]
public static class WulaDefOf public static class WulaDefOf
{ {
public static DroneWorkModeDef Work;
public static DroneWorkModeDef Recharge;
public static DroneWorkModeDef Shutdown;
//public static DroneWorkModeDef AutoFight;
// public static PawnTableDef WULA_AutonomousMechs; // public static PawnTableDef WULA_AutonomousMechs;
static WulaDefOf() static WulaDefOf()