Spaces:
Runtime error
Runtime error
| using Photon.Deterministic; | |
| namespace Quantum | |
| { | |
| public abstract unsafe partial class BTDecorator : BTNode | |
| { | |
| [] public AssetRefBTNode Child; | |
| protected BTNode _childInstance; | |
| public BTAbort AbortType; | |
| public BTNode ChildInstance | |
| { | |
| get | |
| { | |
| return _childInstance; | |
| } | |
| } | |
| public override BTNodeType NodeType | |
| { | |
| get | |
| { | |
| return BTNodeType.Decorator; | |
| } | |
| } | |
| public override void OnReset(BTParams btParams) | |
| { | |
| base.OnReset(btParams); | |
| OnExit(btParams); | |
| if (_childInstance != null) | |
| _childInstance.OnReset(btParams); | |
| BTManager.OnDecoratorReset?.Invoke(btParams.Entity, Guid.Value); | |
| } | |
| public override void OnExit(BTParams btParams) | |
| { | |
| base.OnExit(btParams); | |
| } | |
| protected override BTStatus OnUpdate(BTParams btParams) | |
| { | |
| if (DryRun(btParams) == true) | |
| { | |
| BTManager.OnDecoratorChecked?.Invoke(btParams.Entity, Guid.Value, true); | |
| if (_childInstance != null) | |
| { | |
| var childResult = _childInstance.RunUpdate(btParams); | |
| if (childResult == BTStatus.Abort) | |
| { | |
| EvaluateAbortNode(btParams); | |
| SetStatus(btParams.Frame, BTStatus.Abort, btParams.Agent); | |
| return BTStatus.Abort; | |
| } | |
| return childResult; | |
| } | |
| return BTStatus.Success; | |
| } | |
| BTManager.OnDecoratorChecked?.Invoke(btParams.Entity, Guid.Value, false); | |
| return BTStatus.Failure; | |
| } | |
| public override bool OnDynamicRun(BTParams btParams) | |
| { | |
| var result = DryRun(btParams); | |
| if (result == false) | |
| { | |
| return false; | |
| } | |
| else if (ChildInstance.NodeType != BTNodeType.Decorator) | |
| { | |
| return true; | |
| } | |
| else | |
| { | |
| return ChildInstance.OnDynamicRun(btParams); | |
| } | |
| } | |
| public override void Loaded(IResourceManager resourceManager, Native.Allocator allocator) | |
| { | |
| base.Loaded(resourceManager, allocator); | |
| // Cache the child | |
| _childInstance = (BTNode)resourceManager.GetAsset(Child.Id); | |
| _childInstance.Parent = this; | |
| } | |
| } | |
| } |