实现单局 Run 模型的基础落地
- 核心改动在 RunModel.cs、RunStateFactory.cs 和 RunStateAdvanceService.cs。现在项目里有了 RunNodeType / RunNodeStatus / RunNodeSeed / RunNodeState / RunState,并支持用预置节点序列创建 Run,以及在节点完成后推进、更新局内库存快照、标记通关或失败。 - 库存边界也补上了。PlayerInventoryComponent.cs 新增了 ReplaceInventorySnapshot(...),底层通过 PlayerInventoryStateStore.cs 重建工作副本,避免后续把 Run 真值硬塞回 PlayerInventory 内部状态。 - 节点事件载体已经扩展为可承载 Run 上下文,同时保留原来的无参 Create() 以兼容现有调用点。相关改动在 NodeEnterEventArgs.cs 和 NodeCompleteEventArgs.cs。 - 我还补了纯模型编辑器测试,覆盖 Run 创建、节点推进、失败标记和事件快照克隆,文件在 RunStateTests.cs。
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
using GeometryTD.CustomUtility;
|
||||
using GeometryTD.Definition;
|
||||
using GeometryTD.Procedure;
|
||||
|
||||
namespace GeometryTD.CustomEvent
|
||||
{
|
||||
@@ -9,19 +12,49 @@ namespace GeometryTD.CustomEvent
|
||||
|
||||
public override int Id => EventId;
|
||||
|
||||
public string RunId { get; private set; }
|
||||
|
||||
public int NodeId { get; private set; }
|
||||
|
||||
public RunNodeType NodeType { get; private set; }
|
||||
|
||||
public bool Succeeded { get; private set; }
|
||||
|
||||
public BackpackInventoryData InventorySnapshotAfterNode { get; private set; }
|
||||
|
||||
public NodeCompleteEventArgs()
|
||||
{
|
||||
}
|
||||
|
||||
public static NodeCompleteEventArgs Create()
|
||||
{
|
||||
return Create(null, 0, RunNodeType.None, true, null);
|
||||
}
|
||||
|
||||
public static NodeCompleteEventArgs Create(
|
||||
string runId,
|
||||
int nodeId,
|
||||
RunNodeType nodeType,
|
||||
bool succeeded,
|
||||
BackpackInventoryData inventorySnapshotAfterNode)
|
||||
{
|
||||
var args = ReferencePool.Acquire<NodeCompleteEventArgs>();
|
||||
args.RunId = runId;
|
||||
args.NodeId = nodeId;
|
||||
args.NodeType = nodeType;
|
||||
args.Succeeded = succeeded;
|
||||
args.InventorySnapshotAfterNode = InventoryCloneUtility.CloneInventory(inventorySnapshotAfterNode);
|
||||
|
||||
return args;
|
||||
}
|
||||
|
||||
public override void Clear()
|
||||
{
|
||||
RunId = null;
|
||||
NodeId = 0;
|
||||
NodeType = RunNodeType.None;
|
||||
Succeeded = false;
|
||||
InventorySnapshotAfterNode = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using GameFramework;
|
||||
using GameFramework.Event;
|
||||
using GeometryTD.Procedure;
|
||||
|
||||
namespace GeometryTD.CustomEvent
|
||||
{
|
||||
@@ -9,19 +10,40 @@ namespace GeometryTD.CustomEvent
|
||||
|
||||
public override int Id => EventId;
|
||||
|
||||
public string RunId { get; private set; }
|
||||
|
||||
public int NodeId { get; private set; }
|
||||
|
||||
public RunNodeType NodeType { get; private set; }
|
||||
|
||||
public int SequenceIndex { get; private set; }
|
||||
|
||||
public NodeEnterEventArgs()
|
||||
{
|
||||
}
|
||||
|
||||
public static NodeEnterEventArgs Create()
|
||||
{
|
||||
return Create(null, 0, RunNodeType.None, -1);
|
||||
}
|
||||
|
||||
public static NodeEnterEventArgs Create(string runId, int nodeId, RunNodeType nodeType, int sequenceIndex)
|
||||
{
|
||||
var args = ReferencePool.Acquire<NodeEnterEventArgs>();
|
||||
args.RunId = runId;
|
||||
args.NodeId = nodeId;
|
||||
args.NodeType = nodeType;
|
||||
args.SequenceIndex = sequenceIndex;
|
||||
|
||||
return args;
|
||||
}
|
||||
|
||||
public override void Clear()
|
||||
{
|
||||
RunId = null;
|
||||
NodeId = 0;
|
||||
NodeType = RunNodeType.None;
|
||||
SequenceIndex = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user