private static Tween CreateTweenVec4 <T>(EvaluateContext ctx, Arguments args) where T : TweenVec4, new()
        {
            var g = ((Variable)args.Args[0]).GetGameObject(ctx);
            var d = args.Args[1].EvaluateAsNumber(ctx);

            switch (args.Args.Count)
            {
            case 2:
            {
                return(TweenVec4.Add <T>(g, d));
            }

            case 3:
            {
                var v = args.Args[2].EvaluateAsNumber(ctx);
                return(TweenVec4.Add <T>(g, d, v, v, v, v));
            }

            case 6:
            {
                var v1 = args.Args[2].EvaluateAsNumber(ctx);
                var v2 = args.Args[3].EvaluateAsNumber(ctx);
                var v3 = args.Args[4].EvaluateAsNumber(ctx);
                var v4 = args.Args[5].EvaluateAsNumber(ctx);
                return(TweenVec4.Add <T>(g, d, v1, v2, v3, v4));
            }

            default:
                throw new ArgumentException("Invalid size of arguments");
            }
        }
        public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            tween.Then(() => Body.Evaluate(ctx));
            return(tween);
        }
        public override void Evaluate(EvaluateContext ctx)
        {
            var g      = ((Variable)Args.Args[0]).GetGameObject(ctx);
            var active = Args.Args[1].EvaluateAsBool(ctx);

            g.SetActive(active);
        }
        public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            tween.Delay(Args.Args[0].EvaluateAsNumber(ctx));
            return(tween);
        }
 public override void Evaluate(EvaluateContext ctx)
 {
     foreach (var node in Nodes)
     {
         node.Evaluate(ctx);
     }
 }
        public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            Map[Id].Invoke(tween);
            return(tween);
        }
        public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            tween.Animate(Args.Args[0].EvaluateAsBool(ctx));
            return(tween);
        }
 public override void Evaluate(EvaluateContext ctx)
 {
     if (Cond.EvaluateAsBool(ctx))
     {
         Body.Evaluate(ctx);
     }
 }
        private static Tween CreateTweenVec1 <T>(EvaluateContext ctx, Arguments args) where T : TweenVec1, new()
        {
            var g = ((Variable)args.Args[0]).GetGameObject(ctx);
            var d = args.Args[1].EvaluateAsNumber(ctx);

            switch (args.Args.Count)
            {
            case 2:
            {
                return(TweenVec1.Add <T>(g, d));
            }

            default:
                throw new ArgumentException("Invalid size of arguments");
            }
        }
 public override bool EvaluateAsBool(EvaluateContext ctx)
 {
     return(true);
 }
 public override float EvaluateAsNumber(EvaluateContext ctx)
 {
     return(Condition.EvaluateAsBool(ctx) ? Left.EvaluateAsNumber(ctx) : Right.EvaluateAsNumber(ctx));
 }
 public virtual bool EvaluateAsBool(EvaluateContext ctx) => EvaluateAsNumber(ctx) > 0f;
 public abstract void Evaluate(EvaluateContext ctx);
 public GameObject GetGameObject(EvaluateContext ctx)
 {
     return(ctx.ResolveGameObject(Value));
 }
 public override float EvaluateAsNumber(EvaluateContext ctx)
 {
     return(Left.EvaluateAsNumber(ctx) / Right.EvaluateAsNumber(ctx));
 }
 public override void Evaluate(EvaluateContext ctx)
 {
     EvaluateAsTween(ctx);
 }
 public abstract Tween EvaluateAsTween(EvaluateContext ctx);
 public override void Evaluate(EvaluateContext ctx)
 {
 }
 public override bool EvaluateAsBool(EvaluateContext ctx)
 {
     return(!Expr.EvaluateAsBool(ctx));
 }
 public override float EvaluateAsNumber(EvaluateContext ctx)
 {
     return(-Expr.EvaluateAsNumber(ctx));
 }
 public override void Evaluate(EvaluateContext ctx)
 {
     EvaluateAsNumber(ctx);
 }
 public override bool EvaluateAsBool(EvaluateContext ctx)
 {
     return(Left.EvaluateAsNumber(ctx) >= Right.EvaluateAsNumber(ctx));
 }
 public override void Evaluate(EvaluateContext ctx)
 {
     ctx.Callback();
 }
 public override Tween EvaluateAsTween(EvaluateContext ctx)
 {
     return(Factory[Id].Invoke(ctx, Args));
 }
 public override float EvaluateAsNumber(EvaluateContext ctx)
 {
     return(Value);
 }
        public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            switch (tween)
            {
            case TweenVec1 t:
            {
                if (Relative)
                {
                    t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx));
                }
                else
                {
                    t.From(Args.Args[0].EvaluateAsNumber(ctx));
                }
                break;
            }

            case TweenVec2 t:
            {
                switch (Args.Args.Count)
                {
                case 1:
                    if (Relative)
                    {
                        t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx));
                    }
                    else
                    {
                        t.From(Args.Args[0].EvaluateAsNumber(ctx));
                    }
                    break;

                default:
                    if (Relative)
                    {
                        t.From(Args.Args[0].EvaluateAsNumber(ctx), Args.Args[1].EvaluateAsNumber(ctx));
                    }
                    else
                    {
                        t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx), Args.Args[1].EvaluateAsNumber(ctx));
                    }
                    break;
                }
                break;
            }

            case TweenVec3 t:
            {
                switch (Args.Args.Count)
                {
                case 1:
                    if (Relative)
                    {
                        t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx));
                    }
                    else
                    {
                        t.From(Args.Args[0].EvaluateAsNumber(ctx));
                    }
                    break;

                default:
                    if (Relative)
                    {
                        t.From(Args.Args[0].EvaluateAsNumber(ctx), Args.Args[1].EvaluateAsNumber(ctx), Args.Args[2].EvaluateAsNumber(ctx));
                    }
                    else
                    {
                        t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx), Args.Args[1].EvaluateAsNumber(ctx), Args.Args[2].EvaluateAsNumber(ctx));
                    }
                    break;
                }
                break;
            }

            case TweenVec4 t:
            {
                switch (Args.Args.Count)
                {
                case 1:
                    if (Relative)
                    {
                        t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx));
                    }
                    else
                    {
                        t.From(Args.Args[0].EvaluateAsNumber(ctx));
                    }
                    break;

                default:
                    if (Relative)
                    {
                        t.From(Args.Args[0].EvaluateAsNumber(ctx), Args.Args[1].EvaluateAsNumber(ctx), Args.Args[2].EvaluateAsNumber(ctx), Args.Args[3].EvaluateAsNumber(ctx));
                    }
                    else
                    {
                        t.FromRelative(Args.Args[0].EvaluateAsNumber(ctx), Args.Args[1].EvaluateAsNumber(ctx), Args.Args[2].EvaluateAsNumber(ctx), Args.Args[3].EvaluateAsNumber(ctx));
                    }
                    break;
                }
                break;
            }
            }

            return(tween);
        }
 public override float EvaluateAsNumber(EvaluateContext ctx)
 {
     return(ctx.ResolveVariable(Value));
 }
 public virtual float EvaluateAsNumber(EvaluateContext ctx) => EvaluateAsBool(ctx) ? 1f : 0f;
 public override bool EvaluateAsBool(EvaluateContext ctx)
 {
     return(Left.EvaluateAsBool(ctx) || Right.EvaluateAsBool(ctx));
 }
 public override bool EvaluateAsBool(EvaluateContext ctx)
 {
     return(Math.Abs(Left.EvaluateAsNumber(ctx) - Right.EvaluateAsNumber(ctx)) >= Mathf.Epsilon);
 }