43 lines
1.0 KiB
C#
43 lines
1.0 KiB
C#
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;
|
|
}
|
|
}
|