private void OnDash(Vector2 direction)
 {
     Swapping    = (lerp < 1f);
     lerpTarget  = 1;
     returnTimer = 0.8f;
     burst       = (base.Scene as Level).Displacement.AddBurst(base.Center, 0.2f, 0f, 16f);
     if (lerp >= 0.2f)
     {
         speed = maxForwardSpeed;
     }
     else
     {
         speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, lerp / 0.2f);
     }
     Audio.Stop(returnSfx);
     Audio.Stop(moveSfx);
     if (!Swapping)
     {
         Audio.Play("event:/game/05_mirror_temple/swapblock_move_end", base.Center);
     }
     else
     {
         moveSfx = Audio.Play("event:/game/05_mirror_temple/swapblock_move", base.Center);
     }
 }
 private void OnDash(Vector2 direction)
 {
     Swapping    = (lerp < 1f);
     target      = 1;
     returnTimer = 0.8f;
     burst       = (Scene as Level).Displacement.AddBurst(MasterCenter, 0.2f, 0f, 16f);
     if (lerp >= 0.2f)
     {
         speed = maxForwardSpeed;
     }
     else
     {
         speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, lerp / 0.2f);
     }
     Audio.Stop(returnSfx);
     Audio.Stop(moveSfx);
     if (!Swapping)
     {
         Audio.Play(SFX.game_05_swapblock_move_end, MasterCenter);
     }
     else
     {
         moveSfx = Audio.Play(SFX.game_05_swapblock_move, MasterCenter);
     }
 }
        private static void EmitDreamBurst(Player player, Collider worldClipCollider)
        {
            Level level = player.SceneAs <Level>();

            if (level.OnInterval(0.04f))
            {
                DisplacementRenderer.Burst burst = level.Displacement.AddBurst(player.Center, 0.3f, 0f, 40f);
                burst.WorldClipCollider = worldClipCollider;
                burst.WorldClipPadding  = 2;
            }
        }
        public void FootstepRipple(Vector2 position)
        {
            bool flag = playerHasDreamDash;

            if (flag)
            {
                DisplacementRenderer.Burst burst = (Scene as Level).Displacement.AddBurst(position, 0.5f, 0f, 40f, 1f, null, null);
                burst.WorldClipCollider = Collider;
                burst.WorldClipPadding  = 1;
            }
        }
 public override void Added(Scene scene)
 {
     _sprite.Play("fade" + (_ghostberry ? "Ghost" : ""));
     _sprite.OnFinish = delegate
     {
         RemoveSelf();
     };
     base.Added(scene);
     foreach (Entity entity in base.Scene.Tracker.GetEntities <RustBerryPoints>())
     {
         if (entity != this && Vector2.DistanceSquared(entity.Position, Position) <= 256f)
         {
             entity.RemoveSelf();
         }
     }
     _burst = (scene as Level).Displacement.AddBurst(Position, 0.3f, 16f, 24f, 0.3f);
 }
Exemple #6
0
        public override void Added(Scene scene)
        {
            base.Added(scene);

            //Put each character where it should be, then play their animations.
            for (int i = 0; i < text.Length; i++)
            {
                sprites[i].CenterOrigin();
                sprites[i].X = (sprites[i].X - (textWidth / 2) + ((sprites[i].Width * i) - 1));

                sprites[i].Play("text" + text[i]);
            }

            foreach (Sprite spr in sprites)
            {
                spr.OnFinish = delegate(string a)
                {
                    base.RemoveSelf();
                };
            }

            sound.Path = "event:/char/dialogue/" + narrator;



            if (narrated)
            {
                base.Add(sound);
            }
            if (narrator != "secret_character")
            {
                sound.Param("dialogue_portrait", portrait);
                //sound.Param("dialogue_end", 1);
            }

            //Not entirely sure what this is for, maybe garbage collection if something gets missed
            foreach (Entity entity in base.Scene.Tracker.GetEntities <StrawberryPoints>())
            {
                if (entity != this && Vector2.DistanceSquared(entity.Position, this.Position) <= 256f)
                {
                    entity.RemoveSelf();
                }
            }
            //Graphics?????
            this.burst = (scene as Level).Displacement.AddBurst(this.Position, 0.3f, 16f, 24f, 0.3f, null, null);
        }
 private void OnDash(Vector2 direction)
 {
     if (noReturn)
     {
         Swapping = true;
         target   = 1 - target;
         burst    = (Scene as Level).Displacement.AddBurst(Center, 0.2f, 0f, 16f);
         float relativeLerp = target == 1 ? lerp : 1 - lerp;
         if (relativeLerp >= 0.2f)
         {
             speed = maxForwardSpeed;
         }
         else
         {
             speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, relativeLerp / 0.2f);
         }
         Audio.Stop(moveSfx);
         moveSfx = Audio.Play(PlayerHasDreamDash ? CustomSFX.game_dreamSwapBlock_dream_swap_block_move : SFX.game_05_swapblock_move, Center);
     }
     else
     {
         Swapping    = (lerp < 1f);
         target      = 1;
         returnTimer = ReturnTime;
         burst       = (Scene as Level).Displacement.AddBurst(Center, 0.2f, 0f, 16f);
         if (lerp >= 0.2f)
         {
             speed = maxForwardSpeed;
         }
         else
         {
             speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, lerp / 0.2f);
         }
         Audio.Stop(returnSfx);
         Audio.Stop(moveSfx);
         if (!Swapping)
         {
             Audio.Play(PlayerHasDreamDash ? CustomSFX.game_dreamSwapBlock_dream_swap_block_move_end : SFX.game_05_swapblock_move_end, Center);
         }
         else
         {
             moveSfx = Audio.Play(PlayerHasDreamDash ? CustomSFX.game_dreamSwapBlock_dream_swap_block_move : SFX.game_05_swapblock_move, Center);
         }
     }
 }
        // CUSTOM DREAM DASH STATE
        public static int DreamDashUpdate()
        {
            Player           player = FrostModule.StateGetPlayer();
            DynData <Player> data   = new DynData <Player>(player);

            Input.Rumble(RumbleStrength.Light, RumbleLength.Medium);
            Vector2 position = player.Position;

            player.Speed = player.DashDir * data.Get <CustomDreamBlock>("customDreamBlock").DashSpeed;
            player.NaiveMove(player.Speed * Engine.DeltaTime);
            float dreamDashCanEndTimer = data.Get <float>("dreamDashCanEndTimer");
            bool  flag = dreamDashCanEndTimer > 0f;

            if (flag)
            {
                data.Set <float>("dreamDashCanEndTimer", dreamDashCanEndTimer -= Engine.DeltaTime);
            }
            CustomDreamBlock dreamBlock = player.CollideFirst <CustomDreamBlock>();

            if (dreamBlock == null)
            {
                if (DreamDashedIntoSolid(player))
                {
                    bool invincible = SaveData.Instance.Assists.Invincible;
                    if (invincible)
                    {
                        player.Position = position;
                        player.Speed   *= -1f;
                        player.Play("event:/game/general/assist_dreamblockbounce", null, 0f);
                    }
                    else
                    {
                        player.Die(Vector2.Zero, false, true);
                    }
                }
                else
                {
                    if (dreamDashCanEndTimer <= 0f)
                    {
                        Celeste.Celeste.Freeze(0.05f);
                        bool flag5 = Input.Jump.Pressed && player.DashDir.X != 0f;
                        if (flag5)
                        {
                            data.Set("dreamJump", true);
                            player.Jump(true, true);
                        }
                        else
                        {
                            if (player.DashDir.Y >= 0f || player.DashDir.X != 0f)
                            {
                                bool flag7 = player.DashDir.X > 0f && player.CollideCheck <Solid>(player.Position - Vector2.UnitX * 5f);
                                if (flag7)
                                {
                                    player.MoveHExact(-5, null, null);
                                }
                                else
                                {
                                    bool flag8 = player.DashDir.X < 0f && player.CollideCheck <Solid>(player.Position + Vector2.UnitX * 5f);
                                    if (flag8)
                                    {
                                        player.MoveHExact(5, null, null);
                                    }
                                }
                                bool flag9  = player.ClimbCheck(-1, 0);
                                bool flag10 = player.ClimbCheck(1, 0);
                                int  moveX  = data.Get <int>("moveX");
                                bool flag11 = Input.Grab.Check && ((moveX == 1 && flag10) || (moveX == -1 && flag9));
                                if (flag11)
                                {
                                    player.Facing = (Facings)moveX;
                                    bool noGrabbing = SaveData.Instance.Assists.NoGrabbing;
                                    if (!noGrabbing)
                                    {
                                        return(1);
                                    }
                                    player.ClimbTrigger(moveX);
                                    player.Speed.X = 0f;
                                }
                            }
                        }
                        return(0);
                    }
                }
            }
            else
            {
                // new property
                data.Set("customDreamBlock", dreamBlock);
                if (player.Scene.OnInterval(0.1f))
                {
                    CreateTrail(player);
                }
                if (player.SceneAs <Level>().OnInterval(0.04f))
                {
                    DisplacementRenderer.Burst burst = player.SceneAs <Level>().Displacement.AddBurst(player.Center, 0.3f, 0f, 40f, 1f, null, null);
                    burst.WorldClipCollider = dreamBlock.Collider;
                    burst.WorldClipPadding  = 2;
                }
                if (dreamBlock.AllowRedirects && player.CanDash)
                {
                    bool sameDir = Input.GetAimVector(Facings.Right) == player.DashDir;
                    bool flag4   = !sameDir || dreamBlock.AllowRedirectsInSameDir;
                    if (flag4)
                    {
                        player.DashDir = Input.GetAimVector(Facings.Right);
                        player.Speed   = player.DashDir * player.Speed.Length();
                        player.Dashes  = Math.Max(0, player.Dashes - 1);
                        Audio.Play("event:/char/madeline/dreamblock_enter");
                        if (sameDir)
                        {
                            player.Speed   *= dreamBlock.SameDirectionSpeedMultiplier;
                            player.DashDir *= Math.Sign(dreamBlock.SameDirectionSpeedMultiplier);
                        }
                        Input.Dash.ConsumeBuffer();
                    }
                }
            }
            return(FrostModule.CustomDreamDashState);
        }
Exemple #9
0
        // Called via IL Delegate for non-returning blocks ONLY.
        new public void Update()
        {
            DisplacementRenderer.Burst burst = swapBlockData.Get <DisplacementRenderer.Burst>("burst");
            if (burst != null)
            {
                burst.Position = Center;
            }

            int target = swapBlockData.Get <int>("target");

            swapBlockData["redAlpha"] = Calc.Approach(swapBlockData.Get <float>("redAlpha"), (target != 1) ? 1 : 0, Engine.DeltaTime * 32f);

            float lerp = swapBlockData.Get <float>("lerp");

            if (lerp is 0f or 1f)
            {
                middleRed.SetAnimationFrame(0);
                middleGreen.SetAnimationFrame(0);
            }

            swapBlockData["speed"] = Calc.Approach(swapBlockData.Get <float>("speed"), maxForwardSpeed, maxForwardSpeed / 0.2f * Engine.DeltaTime);

            Direction = difference * (target == 0 && Swapping ? -1 : 1);

            float previousLerp = lerp;

            swapBlockData["lerp"] = lerp = Calc.Approach(lerp, target, swapBlockData.Get <float>("speed") * Engine.DeltaTime);
            if (lerp != previousLerp)
            {
                Vector2 liftSpeed = difference * maxForwardSpeed;
                Vector2 position  = Position;
                if (lerp < previousLerp)
                {
                    liftSpeed *= -1f;
                }
                swapLiftSpeedTimer = 0; // Reset grace timer
                swapLiftSpeed      = liftSpeed;
                if (Scene.OnInterval(0.02f))
                {
                    MoveParticles(difference);
                }

                MoveTo(Vector2.Lerp(start, end, lerp));

                if (position != Position)
                {
                    Audio.Position(swapBlockData.Get <EventInstance>("moveSfx"), Center);
                    EventInstance returnSfx = swapBlockData.Get <EventInstance>("returnSfx");
                    Audio.Position(returnSfx, Center);
                    if (Position == start && target == 0)
                    {
                        Audio.SetParameter(returnSfx, "end", 1f);
                        Audio.Play(SFX.game_05_swapblock_return_end, Center);
                    }
                    else if (Position == end && target == 1)
                    {
                        Audio.Play(SFX.game_05_swapblock_move_end, Center);
                    }
                }
            }

            if (Swapping && (lerp >= 1f || lerp <= 0f))
            {
                Swapping = false;
            }
            StopPlayerRunIntoAnimation = (lerp is <= 0f or >= 1f);
        }
        private static int DreamTunnelDashUpdate(this Player player)
        {
            DynData <Player> playerData = player.GetData();

            if (FeatherMode)
            {
                Vector2 input = Input.Aim.Value.SafeNormalize();
                if (input != Vector2.Zero)
                {
                    Vector2 vector = player.Speed.SafeNormalize();
                    if (vector != Vector2.Zero)
                    {
                        vector         = Vector2.Dot(input, vector) != -0.8f ? vector.RotateTowards(input.Angle(), 5f * Engine.DeltaTime) : vector;
                        vector         = vector.CorrectJoystickPrecision();
                        player.DashDir = vector;
                        player.Speed   = vector * 240f;
                    }
                }
            }

            Input.Rumble(RumbleStrength.Light, RumbleLength.Medium);
            Vector2 position = player.Position;

            player.NaiveMove(player.Speed * Engine.DeltaTime);
            float dreamDashCanEndTimer = playerData.Get <float>(Player_dreamTunnelDashCanEndTimer);

            if (dreamDashCanEndTimer > 0f)
            {
                playerData[Player_dreamTunnelDashCanEndTimer] = dreamDashCanEndTimer - Engine.DeltaTime;
            }
            Solid solid = player.CollideFirst <Solid, DreamBlock>();

            if (solid == null)
            {
                if (player.DreamTunneledIntoDeath())
                {
                    player.DreamDashDie(position);
                }
                else if (playerData.Get <float>(Player_dreamTunnelDashCanEndTimer) <= 0f)
                {
                    Celeste.Freeze(0.05f);
                    if (Input.Jump.Pressed && player.DashDir.X != 0f)
                    {
                        playerData["dreamJump"] = true;
                        player.Jump(true, true);
                    }
                    else if (player.DashDir.Y >= 0f || player.DashDir.X != 0f)
                    {
                        if (player.DashDir.X > 0f && player.CollideCheck <DreamBlock>(player.Position - Vector2.UnitX * 5f))
                        {
                            player.MoveHExact(-5, null, null);
                        }
                        else if (player.DashDir.X < 0f && player.CollideCheck <DreamBlock>(player.Position + Vector2.UnitX * 5f))
                        {
                            player.MoveHExact(5, null, null);
                        }
                        bool flag  = player.ClimbCheck(-1, 0);
                        bool flag2 = player.ClimbCheck(1, 0);
                        int  moveX = playerData.Get <int>("moveX");
                        if (Input.Grab.Check && ((moveX == 1 && flag2) || (moveX == -1 && flag)))
                        {
                            player.Facing = (Facings)moveX;
                            if (!SaveData.Instance.Assists.NoGrabbing)
                            {
                                return(Player.StClimb);
                            }
                            player.ClimbTrigger(moveX);
                            player.Speed.X = 0f;
                        }
                    }
                    return(Player.StNormal);
                }
            }
            else
            {
                playerData[Player_solid] = solid;
                if (player.Scene.OnInterval(0.1f))
                {
                    player.CreateDreamTrail();
                }
                Level level = playerData.Get <Level>("level");
                if (level.OnInterval(0.04f))
                {
                    DisplacementRenderer.Burst burst = level.Displacement.AddBurst(player.Center, 0.3f, 0f, 40f, 1f, null, null);
                    burst.WorldClipCollider = solid.Collider;
                    burst.WorldClipPadding  = 2;
                }
            }
            return(StDreamTunnelDash);
        }