private void OnSpringOnCollide(On.Celeste.Spring.orig_OnCollide orig, Celeste.Spring self, Celeste.Player player)
 {
     orig(self, player);
     if (Settings.Enabled)
     {
         var canUseField = typeof(Celeste.Spring).GetField("playerCanUse", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
         if (!(player.StateMachine.State == 9 || !(bool)canUseField.GetValue(self)))
         {
             ApplyRules(player.Scene, "Spring");
         }
     }
 }
Esempio n. 2
0
        private static void SpringGreenOnCollide(On.Celeste.Spring.orig_OnCollide orig, Spring self, Player player)
        {
            if (self.GetType() == typeof(SpringGreen))
            {
                if (player.StateMachine.State == 9)
                {
                    return;
                }

                var origDashAttacking = player.DashAttacking;
                var origSpeedX        = player.Speed.X;
                var origSpeedY        = player.Speed.Y;
                if (origDashAttacking && player.Speed == Vector2.Zero)
                {
                    FieldInfo beforeDashSpeedFieldInfo = typeof(Player).GetPrivateField("beforeDashSpeed");
                    Vector2   bDSpeed = (Vector2)beforeDashSpeedFieldInfo?.GetValue(player);
                    origSpeedX = bDSpeed.X;
                    origSpeedY = bDSpeed.Y;
                }

                Vector2   origDashDir           = player.DashDir;
                FieldInfo varJumpSpeedFieldInfo = typeof(Player).GetPrivateField("varJumpSpeed");
                player.Speed.X = 0;
                player.Speed.Y = 0;
                orig(self, player);
                if (self.Orientation == Orientations.Floor)
                {
                    player.Speed.X = origSpeedX;
                    if (origSpeedY > 0.0f)
                    {
                        if (origDashDir.Y > 0.0f && origDashAttacking)
                        {
                            player.Speed.Y = -370f / 3;
                            varJumpSpeedFieldInfo?.SetValue(player, -370f / 3);
                        }
                        else
                        {
                            player.Speed.Y = -185f;
                        }
                    }
                    else
                    {
                        player.Speed.Y = origSpeedY - 185f;
                        varJumpSpeedFieldInfo?.SetValue(player, player.Speed.Y);
                    }
                }
                else if (self.Orientation == Orientations.WallLeft)
                {
                    player.Speed.Y = origSpeedY - 140f;
                    if (origSpeedX > 0.0f)
                    {
                        player.Speed.X = origSpeedX + 240f;
                    }
                    else
                    {
                        player.Speed.X = 240f;
                    }

                    varJumpSpeedFieldInfo?.SetValue(player, player.Speed.Y);
                }
                else
                {
                    player.Speed.Y = origSpeedY - 140f;
                    if (origSpeedX < 0.0f)
                    {
                        player.Speed.X = origSpeedX - 240f;
                    }
                    else
                    {
                        player.Speed.X = -240f;
                    }

                    varJumpSpeedFieldInfo?.SetValue(player, player.Speed.Y);
                }
            }
            else
            {
                orig(self, player);
            }
        }