public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            tween.Then(() => Body.Evaluate(ctx));
            return(tween);
        }
        public override Tween EvaluateAsTween(EvaluateContext ctx)
        {
            var tween = Expr.EvaluateAsTween(ctx);

            tween.Animate(Args.Args[0].EvaluateAsBool(ctx));
            return(tween);
        }
        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.Delay(Args.Args[0].EvaluateAsNumber(ctx));
            return(tween);
        }
        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);
        }