(client) feat:健康给予,路径优化,结算界面,商店界面 (#60)

Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com>
Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/60
This commit is contained in:
2025-10-10 14:08:23 +08:00
parent 9a797479ff
commit 16b49f3d3a
1900 changed files with 114053 additions and 34157 deletions

View File

@@ -6,11 +6,12 @@ namespace AI
{
// 已经运行的帧数
protected int _elapsedFrames;
// 默认超时帧数
protected int _timeoutFrames = 180;
protected int _timeoutFrames = 180;
/// <summary>
/// 获取或设置该叶节点的超时帧数。确保超时帧数至少为1。
/// 获取或设置该叶节点的超时帧数。确保超时帧数至少为1。
/// </summary>
public int TimeoutFrames
{
@@ -22,32 +23,32 @@ namespace AI
public int RemainingFrames => TimeoutFrames - _elapsedFrames;
/// <summary>
/// 抽象方法,由具体的叶节点实现其核心业务逻辑。
/// <see cref="LeafNodeBase"/> 会在计时器管理后调用此方法。
/// 抽象方法,由具体的叶节点实现其核心业务逻辑。
/// <see cref="LeafNodeBase" /> 会在计时器管理后调用此方法。
/// </summary>
/// <returns>节点的执行状态Running, Success, Failure。</returns>
protected abstract Status ExecuteLeafLogic();
/// <summary>
/// <see cref="LeafNodeBase"/> 的 Tick 方法,包含了计时器和状态管理逻辑。
/// 此方法被密封,子类应实现 <see cref="ExecuteLeafLogic"/> 而不是重写 Tick。
/// <see cref="LeafNodeBase" /> 的 Tick 方法,包含了计时器和状态管理逻辑。
/// 此方法被密封,子类应实现 <see cref="ExecuteLeafLogic" /> 而不是重写 Tick。
/// </summary>
public sealed override Status Tick()
{
if (CurrentStatus == Status.Ready)
{
CurrentStatus = Status.Running;
_elapsedFrames = 0;
CurrentStatus = Status.Running;
_elapsedFrames = 0;
}
if (CurrentStatus == Status.Running)
{
_elapsedFrames++;
_elapsedFrames++;
if (_elapsedFrames > _timeoutFrames)
{
CurrentStatus = Status.Failure;
Reset();
CurrentStatus = Status.Failure;
Reset();
return Status.Failure;
}
@@ -55,9 +56,10 @@ namespace AI
if (logicResult != Status.Running)
{
CurrentStatus = logicResult;
Reset();
CurrentStatus = logicResult;
Reset();
}
return logicResult;
}
@@ -65,12 +67,12 @@ namespace AI
}
/// <summary>
/// 重置叶节点的状态,包括基类状态和内部计时器。
/// 重置叶节点的状态,包括基类状态和内部计时器。
/// </summary>
public override void Reset()
{
base.Reset();
_elapsedFrames = 0;
base.Reset();
_elapsedFrames = 0;
}
}
}
}