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:
Binary file not shown.
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user