# EvaluateDecorator

EvaluateDecoratorをC#スクリプトで記述できます。

## 作成方法

1. Projectウィンドウの「+」ボタンをクリック。
2. メニューからLogic Toolkit > Scripts > Decorator > Evaluate Decorator C# Scriptを選択。
3. スクリプト名を入力し、Enterで決定。

## スクリプトの書き方

- `LogicToolkit.BehaviorTree.EvaluateDecorator`を継承したクラスを作成します。
- 型に`System.SerializableAttribute`を適用します。
- `protected override bool OnEvaluate()`を実装し、実行時の処理を記述します。
- アクティブになった際に`protected override void OnActivated()`が呼ばれます。
- 非アクティブになった際に`protected override void OnDeactivated()`が呼ばれます。
- 評価対象になった際に`protected override void OnEnterEvaluation()`が呼ばれます。
  Selectorの子ノードに設定したDecoratorのAbort FlagsにLower Priorityを設定している場合は、優先度の低いノード(弟ノード)が実行中も評価対象になります。
- 評価対象ではなくなった際に`protected override void OnLeaveEvaluation()`が呼ばれます。

## コード例

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using LogicToolkit;
    using LogicToolkit.BehaviorTrees;

    [System.Serializable]
    public class EvaluateDecoratorExample : EvaluateDecorator
    {
        private float startTime = float.MaxValue;

        // OnActivated is called when activated.
        protected override void OnActivated()
        {
            startTime = Time.time;
        }

        // OnEnterEvaluation is called when entering the evaluation target
        protected override void OnEnterEvaluation()
        {
        }

        // OnEvaluate is called when evaluating the condition
        protected override bool OnEvaluate()
        {
            return Time.time - startTime <= 1f;
        }

        // OnLeaveEvaluation is called when leaving the evaluation target
        protected override void OnLeaveEvaluation()
        {
        }

        // OnDeactivated is called when it is deactivated.
        protected override void OnDeactivated()
        {
        }
    }

この例では、Abort FlagsをSelfに設定するとノードがアクティブになってから1秒経過後に中断します。

なお、同様の機能としてTimeLimitというスクリプトが予め同梱されています。