*
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
public enum BehaviorStatus {
|
||||
Invalid,
|
||||
Success,
|
||||
Fail,
|
||||
Running
|
||||
};
|
||||
|
||||
public abstract class AiBehavior : MonoBehaviour {
|
||||
public string behaviorName;
|
||||
|
||||
protected virtual void OnBegin(AiBlackboard blackboard) { }
|
||||
protected virtual void OnEnd(AiBlackboard blackboard) { }
|
||||
protected abstract BehaviorStatus OnExecute(AiBlackboard blackboard);
|
||||
private BehaviorStatus _state = BehaviorStatus.Invalid;
|
||||
public BehaviorStatus State {
|
||||
get { return _state; }
|
||||
}
|
||||
|
||||
public bool Running {
|
||||
get { return _state == BehaviorStatus.Running; }
|
||||
}
|
||||
|
||||
public BehaviorStatus Tick(AiBlackboard blackboard) {
|
||||
if (_state != BehaviorStatus.Running) {
|
||||
OnBegin(blackboard);
|
||||
}
|
||||
|
||||
_state = OnExecute(blackboard);
|
||||
if (_state == BehaviorStatus.Running) {
|
||||
_state = BehaviorStatus.Success;
|
||||
}
|
||||
|
||||
if (_state != BehaviorStatus.Running) {
|
||||
OnEnd(blackboard);
|
||||
}
|
||||
|
||||
return _state;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user