custom-chatbot / data /BTCooldown.cs
fastx's picture
Upload 64 files
00437a9
raw
history blame
1.62 kB
using Photon.Deterministic;
using System;
namespace Quantum
{
[Serializable]
public unsafe partial class BTCooldown : BTDecorator
{
// How many time should we wait
public FP CooldownTime;
// An indexer so we know when the time started counting
public BTDataIndex StartTimeIndex;
public override void Init(Frame frame, AIBlackboardComponent* blackboard, BTAgent* agent)
{
base.Init(frame, blackboard, agent);
// We allocate space on the BTAgent so we can store the Start Time
agent->AddFPData(frame, 0);
}
protected override BTStatus OnUpdate(BTParams btParams)
{
var result = base.OnUpdate(btParams);
// We let the time check, which happens on the DryRun, happen
// If it results in success, then we store on the BTAgent the time value of the moment that it happened
if (result == BTStatus.Success)
{
var currentTime = btParams.Frame.DeltaTime * btParams.Frame.Number;
var frame = btParams.Frame;
var entity = btParams.Entity;
btParams.Agent->SetFPData(frame, currentTime, StartTimeIndex.Index);
}
return result;
}
// We get the Start Time stored on the BTAgent, then we check if the time + cooldown is already over
// If it is not over, then we return False, blocking the execution of the children nodes
public override Boolean DryRun(BTParams btParams)
{
var frame = btParams.Frame;
var entity = btParams.Entity;
FP startTime = btParams.Agent->GetFPData(frame, StartTimeIndex.Index);
var currentTime = btParams.Frame.DeltaTime * btParams.Frame.Number;
return currentTime >= startTime + CooldownTime;
}
}
}