Exemple #1
0
        public static void RenderPlayerSprite(On.Celeste.PlayerSprite.orig_Render orig, PlayerSprite self)
        {
            Player player = self.Entity as Player;

            if (player == null || self.Mode == PlayerSpriteMode.Badeline)
            {
                orig(self);
                return;
            }

            if (Settings.DuckToDabEnabled && player.Ducking)
            {
                Dab.Draw(
                    self.RenderPosition.Floor() + new Vector2(player.Facing == Facings.Left ? 6 : -6, -7),
                    Vector2.Zero, Color.White,
                    self.Scale
                    );
                return;
            }

            orig(self);
        }
        public void RenderPlayerSprite(On.Celeste.PlayerSprite.orig_Render orig, PlayerSprite self)
        {
            Player player = self.Entity as Player;

            if (player == null || self.Mode == PlayerSpriteMode.Badeline || Character == null || player.StateMachine.State == 9 || player.StateMachine.State == 5)
            {
                // state 9 is dreamdashing, state 5 is red bubble
                orig(self);
                return;
            }

            if (Settings.Mode == MadikaModuleChar.Invisible)
            {
                return;
            }

            AirDuck |= (player.Ducking && !player.OnSafeGround);

            AirDuck &= (!player.OnSafeGround && Input.MoveY == 1);

            bool ducking = player.Ducking || AirDuck;

            Color playerColor = player.Stamina < 20 && spriteflashing ? Color.Red : Color.White;

            //int widthFix = (Character.Sprite.Width / 2 + 2) * (player.Facing == Facings.Left ? 1 : -1);

            int dashes = player.Dashes;

            if (Character.HasWalkStillTextures)
            {
                Character.Sprite = GFX.Game[Character.SpriteName + "_" + (player.Speed.X == 0 ? "walk" : "still")];
            }

            if (Character.HasDashTextures)
            {
                Character.Sprite = GFX.Game[Character.SpriteName + "_" + dashes];
            }

            Vector2 renderPosition = new Vector2(self.RenderPosition.X, self.RenderPosition.Y).Floor();

            renderPosition.X += (1f - self.Scale.X) * (Character.Sprite.Width / 2);
            renderPosition.Y += (1f - self.Scale.Y) * (Character.Sprite.Height / 2);

            renderPosition.X -= Character.Sprite.Width / 4 + (player.Facing == Facings.Left ? 0 : Character.Sprite.Width / 2);

            if (Character.Sprite == GFX.Game["characters/player/o"])
            {
                renderPosition.Y += (float)Math.Cos(timePassed * 1.5);
            }



            if (player.Speed.X != 0 && player.OnSafeGround)
            {
                MTexture Body = new MTexture(Character.Sprite, new Rectangle(0, 0, Character.Sprite.Width, Character.Sprite.Height - Character.FootHeight));

                Body.Draw(
                    renderPosition + new Vector2(0, -Character.Sprite.Height),
                    Vector2.Zero, playerColor,
                    self.Scale
                    );

                if (player.Facing == Facings.Left)
                {
                    Character.LeftFoot.Draw(
                        renderPosition + new Vector2((OffsetFeet ? 0 : 1), -Character.FootHeight),
                        Vector2.Zero, playerColor,
                        self.Scale
                        );
                    Character.RightFoot.Draw(
                        renderPosition + new Vector2((OffsetFeet ? 1 : 0) - Character.RightFootX, -Character.FootHeight),
                        Vector2.Zero, playerColor,
                        self.Scale
                        );
                }
                else
                {
                    Character.LeftFoot.Draw(
                        renderPosition + new Vector2(-(OffsetFeet ? 1 : 0), -Character.FootHeight),
                        Vector2.Zero, playerColor,
                        self.Scale
                        );
                    Character.RightFoot.Draw(
                        renderPosition + new Vector2(-(OffsetFeet ? 0 : 1) + Character.RightFootX, -Character.FootHeight),
                        Vector2.Zero, playerColor,
                        self.Scale
                        );
                }
            }
            else
            {
                Character.Sprite.Draw(
                    renderPosition + new Vector2(0, -Character.Sprite.Height * (ducking ? 0.4f : 1f)),
                    Vector2.Zero, playerColor,
                    new Vector2(self.Scale.X, ducking ? 0.3f : self.Scale.Y)
                    );
            }
        }