示例#1
0
        private void Init(TweenMode mode, Ease.Easer easer, float duration, bool start)
        {
#if DEBUG
            if (duration <= 0)
            {
                throw new Exception("Tween duration cannot be less than zero");
            }
#else
            if (duration <= 0)
            {
                duration = .000001f;
            }
#endif

            UseRawDeltaTime = false;
            Mode            = mode;
            Easer           = easer;
            Duration        = duration;

            TimeLeft = 0;
            Percent  = 0;
            Active   = false;

            if (start)
            {
                Start();
            }
        }
示例#2
0
        public EntityMover(EntityData data, Vector2 offset) : base(data.Position + offset)
        {
            Collider = new Hitbox(data.Width, data.Height);

            Types       = FrostModule.GetTypes(data.Attr("types", "")).ToList();
            isBlacklist = data.Bool("blacklist");

            pauseTime    = data.Float("pauseTimeLength", 0f);
            pauseTimer   = data.Float("startPauseTimeLength", 0f);
            relativeMode = data.Bool("relativeMovementMode", false);
            onEndSFX     = data.Attr("onEndSFX", "");
            if (isBlacklist)
            {
                // Some basic types we don't want to move D:
                foreach (Type type in new List <Type>()
                {
                    typeof(Player), typeof(SolidTiles), typeof(BackgroundTiles), typeof(SpeedrunTimerDisplay), typeof(StrawberriesCounter)
                })
                {
                    Types.Add(type);
                }
            }

            endNode     = data.FirstNodeNullable(offset).GetValueOrDefault();
            easer       = EaseHelper.GetEase(data.Attr("easing", "CubeInOut"));
            duration    = data.Float("moveDuration", 1f);
            mustCollide = data.Bool("mustCollide", true);
            distance    = new Vector2(endNode.X - Position.X, endNode.Y - Position.Y);
        }
示例#3
0
        static public Tween Set(Entity entity, TweenMode tweenMode, float duration, Ease.Easer easer, Action <Tween> onUpdate, Action <Tween> onComplete = null)
        {
            Tween tween = Tween.Create(tweenMode, easer, duration, true);

            tween.OnUpdate   += onUpdate;
            tween.OnComplete += onComplete;
            entity.Add(tween);
            return(tween);
        }
示例#4
0
        static public Tween Create(TweenMode mode, Ease.Easer easer = null, float duration = 1f, bool start = false)
        {
            Tween tween;

            if (cached.Count == 0)
            {
                tween = new Tween();
            }
            else
            {
                tween = cached.Pop();
            }
            tween.OnUpdate = tween.OnComplete = tween.OnStart = null;

            tween.Init(mode, easer, duration, start);
            return(tween);
        }
示例#5
0
 public CustomDreamBlockV2(EntityData data, Vector2 offset) : base(data, offset)
 {
     ActiveBackColor              = ColorHelper.GetColor(data.Attr("activeBackColor", "Black"));
     DisabledBackColor            = ColorHelper.GetColor(data.Attr("disabledBackColor", "1f2e2d"));
     ActiveLineColor              = ColorHelper.GetColor(data.Attr("activeLineColor", "White"));
     DisabledLineColor            = ColorHelper.GetColor(data.Attr("disabledLineColor", "6a8480"));
     DashSpeed                    = data.Float("speed", 240f);
     AllowRedirects               = data.Bool("allowRedirects");
     AllowRedirectsInSameDir      = data.Bool("allowSameDirectionDash");
     SameDirectionSpeedMultiplier = data.Float("sameDirectionSpeedMultiplier", 1f);
     node          = data.FirstNodeNullable(new Vector2?(offset));
     moveSpeedMult = data.Float("moveSpeedMult", 1f);
     easer         = EaseHelper.GetEase(data.Attr("moveEase", "SineInOut"));
     ConserveSpeed = data.Bool("conserveSpeed", false);
     // legacy
     fastMoving = data.Bool("fastMoving", false);
 }
示例#6
0
 public static Ease.Easer Follow(Ease.Easer first, Ease.Easer second)
 {
     return((Ease.Easer)(t => (double)t > 0.5 ? (float)((double)second((float)((double)t * 2.0 - 1.0)) / 2.0 + 0.5) : first(t * 2f) / 2f));
 }
示例#7
0
 public static Ease.Easer Invert(Ease.Easer easer)
 {
     return((Ease.Easer)(t => 1f - easer(1f - t)));
 }
示例#8
0
        private void Init(TweenMode mode, Ease.Easer easer, float duration, bool start)
        {
            #if DEBUG
            if (duration <= 0)
                throw new Exception("Tween duration cannot be less than zero");
            #else
            if (duration <= 0)
                duration = .000001f;
            #endif

            Mode = mode;
            Easer = easer;
            Duration = duration;

            TimeLeft = 0;
            Percent = 0;
            Active = false;

            if (start)
                Start();
        }
示例#9
0
        static public Tween Position(Entity entity, Vector2 targetPosition, float duration, Ease.Easer easer, TweenMode tweenMode = TweenMode.Oneshot)
        {
            Vector2 startPosition = entity.Position;
            Tween   tween         = Tween.Create(tweenMode, easer, duration, true);

            tween.OnUpdate = (t) => { entity.Position = Vector2.Lerp(startPosition, targetPosition, t.Eased); };
            entity.Add(tween);
            return(tween);
        }