/// <summary> /// 返回状态给父节点 /// </summary> /// <param name="childNode"></param> /// <param name="status"></param> public void ReturnToParent(BevNode childNode, BevRunningStatus status) { OnExit(); if (parentNode != null) { parentNode.AcceptReturn(childNode, status); } }
protected override void OnExit() { if (selfStatus != BevRunningStatus.Executing) { ownTree.updateNodeEvnet -= UpdateNode; selfStatus = BevRunningStatus.None; } }
protected override void OnEnter() { if (selfStatus == BevRunningStatus.None) { selfStatus = BevRunningStatus.Executing; Action(); ownTree.updateNodeEvnet += UpdateNode; } ReturnToParent(this, selfStatus); }
/// <summary> /// 接受子节点返回 /// </summary> public override void DoReturn(BevNode childNode, BevRunningStatus status) { chindNodeStatusList[childNodeList.IndexOf(childNode)] = status; if (status == BevRunningStatus.Executing) { DelayTickChild(childNode); } else if (status == BevRunningStatus.Failure) { ReturnToParent(this, BevRunningStatus.Failure); } else if (status == BevRunningStatus.Succeed) { for (int i = 0; i < childNodeList.Count; i++) { if (chindNodeStatusList[i] == BevRunningStatus.Failure) { ReturnToParent(this, BevRunningStatus.Failure); } } ReturnToParent(this, BevRunningStatus.Succeed); } }
/// <summary> /// 接受子节点返回 /// </summary> public override void DoReturn(BevNode childNode, BevRunningStatus status) { if (status == BevRunningStatus.Failure) { ReturnToParent(this, BevRunningStatus.Failure); } else if (status == BevRunningStatus.Succeed) { int curIndex = childNodeList.IndexOf(childNode); if (curIndex == childNodeList.Count - 1) { ReturnToParent(this, BevRunningStatus.Succeed); } else { childNodeList[curIndex + 1].Tick(); } } else if (status == BevRunningStatus.Executing) { DelayTickChild(childNode); } }
/* 可重写接口 */ /// <summary> /// 子节点返回内容之后调用,根据子节点状态返回状态到父节点 /// </summary> /// <param name="childNode"></param> /// <param name="status"></param> public virtual void DoReturn(BevNode childNode, BevRunningStatus status) { }
/// <summary> /// 接受子节点返回 /// </summary> public void AcceptReturn(BevNode childNode, BevRunningStatus status) { ownTree.CurNode = this; DoReturn(childNode, status); }
public void OnActionComplete(BevRunningStatus status) { selfStatus = status; }
protected virtual void DoExit(ref BevNodeInputParam input, BevRunningStatus status) { }