コード例 #1
0
ファイル: Node.cs プロジェクト: zahiwonder/Behaviour
        public override TR Drive(Context ctx)
        {
            var thisContinuation = ctx.Continuation;
            var value            = default(T);
            var skipIoGet        = false;

            if (thisContinuation != null)
            {
                // Continuation
                ctx.Continuation = thisContinuation.SubContinuation;

                // 0表示需要继续ioGet
                // 1表示需要继续subTree
                if (thisContinuation.NextStep == 1)
                {
                    skipIoGet = true;
                    value     = (T)thisContinuation.Param;
                }
            }

            if (!skipIoGet)
            {
                value = ioGet.GetUserValue().Drive(ctx);

                if (ctx.Continuation != null)
                {
                    // ioGet抛出了Continue
                    if (thisContinuation == null)
                    {
                        thisContinuation = new Continuation()
                        {
                            SubContinuation = ctx.Continuation,
                            NextStep        = 0,
                        };
                    }
                    else
                    {
                        thisContinuation.SubContinuation = ctx.Continuation;
                        thisContinuation.NextStep        = 0;
                    }

                    ctx.Continuation = thisContinuation;

                    return(default(TR));
                }
            }

            var oldValue = box.SetVal(value);
            var ret      = subTree.GetUserValue().Drive(ctx);

            box.SetVal(oldValue);

            if (ctx.Continuation != null)
            {
                // subTree抛出了Continue
                if (thisContinuation == null)
                {
                    thisContinuation = new Continuation()
                    {
                        SubContinuation = ctx.Continuation,
                    };
                }

                ctx.Continuation       = thisContinuation;
                thisContinuation.Param = value;
            }

            return(ret);
        }
コード例 #2
0
ファイル: UnitAI.cs プロジェクト: zahiwonder/Behaviour
 public override bool Drive(Context ctx)
 {
     return(((T)ctx.Self).HpRateLessThan(p0.GetUserValue()));
 }
コード例 #3
0
 public static Thunk <float> Plus(Thunk <float> a, Thunk <float> b)
 {
     return(Help.MakePureThunk(a.GetUserValue() + b.GetUserValue()));
 }