Example #1
0
        public void RenderHair(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
        {
            Player player = self.Entity as Player;

            if (player == null || self.GetSprite().Mode == PlayerSpriteMode.Badeline || Character == null)
            {
                orig(self);
                return;
            }
            if (Character.HasHair)
            {
                if (self.Sprite.HasHair)
                {
                    Vector2 origin = new Vector2(5f, 5f);
                    Color   color  = self.Border * self.Alpha;

                    Vector2 offset = new Vector2(Character.HairOffset.X * (self.GetHairScale(0).X > 0 ? 1 : -1), Character.HairOffset.Y);

                    if (self.DrawPlayerSpriteOutline)
                    {
                        Color   color2   = self.Sprite.Color;
                        Vector2 position = self.Sprite.Position;
                        self.Sprite.Color = color;

                        self.Sprite.Position = position + new Vector2(0f, -1f) + offset;
                        self.Sprite.Render();
                        self.Sprite.Position = position + new Vector2(0f, 1f) + offset;
                        self.Sprite.Render();
                        self.Sprite.Position = position + new Vector2(-1f, 0f) + offset;
                        self.Sprite.Render();
                        self.Sprite.Position = position + new Vector2(1f, 0f) + offset;
                        self.Sprite.Render();
                        self.Sprite.Color    = color2;
                        self.Sprite.Position = position;
                    }
                    self.Nodes[0] = self.Nodes[0].Floor();
                    if (color.A > 0)
                    {
                        for (int i = 0; i < self.Sprite.HairCount; i++)
                        {
                            MTexture hairTexture = self.GetHairTexture(i);
                            Vector2  hairScale   = self.GetHairScale(i);
                            hairTexture.Draw(self.Nodes[i] + new Vector2(-1f, 0f) + offset, origin, color, hairScale);
                            hairTexture.Draw(self.Nodes[i] + new Vector2(1f, 0f) + offset, origin, color, hairScale);
                            hairTexture.Draw(self.Nodes[i] + new Vector2(0f, -1f) + offset, origin, color, hairScale);
                            hairTexture.Draw(self.Nodes[i] + new Vector2(0f, 1f) + offset, origin, color, hairScale);
                        }
                    }
                    for (int num = self.Sprite.HairCount - 1; num >= 0; num--)
                    {
                        self.GetHairTexture(num).Draw(self.Nodes[num] + offset, origin, self.GetHairColor(num), self.GetHairScale(num));
                    }
                    if (Character.SpriteName.Contains("baldemonika"))
                    {
                        GFX.Game["characters/player/baldemonikaribbon"].Draw(self.Nodes[0] + offset - new Vector2(self.GetHairScale(0).X > 0 ? 1 : -1, 2), origin, Color.White, self.GetHairScale(0));
                    }
                }
            }
        }
Example #2
0
 private static void onPlayerHairRender(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
 {
     // display hair only if it is enabled, or that it doesn't belong to a Player entity.
     if (HasHair || !(self.Entity is Player))
     {
         orig(self);
     }
 }
Example #3
0
 void PlayerHair_Render(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
 {
     //int oldNum = self.Sprite.HairCount;
     //int newNum = oldNum - 4 + Settings.HairLength;
     //Player player = self.Entity as Player;
     //if (Settings.Enabled && newNum <= countCache)
     //{
     //self.Sprite.HairCount = newNum;
     //}
     orig(self);
     //self.Sprite.HairCount = oldNum;
 }
Example #4
0
        public void RenderHair(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
        {
            if (!(self.Entity is Player) || !Settings.Enabled || (self.Entity as Player).Dashes > MAX_DASH_COUNT)
            {
                orig(self);
                return;
            }

            Player    player = self.Entity as Player;
            IHairType hair   = Instance.triggerManager.GetHair(player.Dashes);

            if (hair != null)
            {
                hair.Render(orig, self);
            }
            else
            {
                orig(self);
            }
        }
Example #5
0
 /// <summary>
 /// Renders the hair, allowing for custom rendering.
 /// </summary>
 /// <param name="orig">The default function for hair rendering.</param>
 /// <param name="self">The player's hair</param>
 /// <remarks>
 /// It is reccomended to look at the default hair rendering code before writing this.
 /// To keep compatability, use the hair color and texture functions in the PlayerHair class.
 /// </remarks>
 public virtual void Render(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
 {
     orig(self);
 }
Example #6
0
        public static void RenderHair(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
        {
            if (Settings.BaldelineEnabled)
            {
                return;
            }
            Player player = self.Entity as Player;

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

            if (Settings.SkateboardEnabled)
            {
                for (int i = 0; i < self.Nodes.Count; i++)
                {
                    self.Nodes[i] = self.Nodes[i] + SkateboardPlayerOffset;
                }
            }
            if (Settings.DuckToDabEnabled && player.Ducking)
            {
                for (int i = 0; i < self.Nodes.Count; i++)
                {
                    self.Nodes[i] = self.Nodes[i] + DabPlayerOffset;
                }
            }

            if (Settings.WoomyEnabled)
            {
                PlayerSprite sprite = self.GetSprite();
                if (!sprite.HasHair)
                {
                    return;
                }

                const float woomyOffs      = 3f;
                Vector2     woomyScaleMul  = new Vector2(0.7f, 0.7f);
                Vector2     woomyScaleOffs = new Vector2(-0.2f, -0.2f);

                Vector2 origin      = new Vector2(5f, 5f);
                Color   colorBorder = self.Border * self.Alpha;

                RenderHairPlayerOutline(self);

                Vector2  pos;
                MTexture tex;
                Color    color;
                Vector2  scale;

                self.Nodes[0] = self.Nodes[0].Floor();

                if (colorBorder.A > 0)
                {
                    tex   = self.GetHairTexture(0);
                    scale = self.GetHairScale(0);
                    pos   = self.Nodes[0];
                    tex.Draw(pos + new Vector2(-1f, 0f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(1f, 0f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(0f, -1f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(0f, 1f), origin, colorBorder, scale);

                    tex   = self.GetHairTexture(2);
                    scale = self.GetHairScale(sprite.HairCount - 2) * woomyScaleMul + woomyScaleOffs;
                    pos   = self.Nodes[0];
                    tex.Draw(pos + new Vector2(-1f - woomyOffs, 0f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(1f - woomyOffs, 0f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(0f - woomyOffs, -1f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(0f - woomyOffs, 1f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(-1f + woomyOffs, 0f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(1f + woomyOffs, 0f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(0f + woomyOffs, -1f), origin, colorBorder, scale);
                    tex.Draw(pos + new Vector2(0f + woomyOffs, 1f), origin, colorBorder, scale);

                    for (int i = 1; i < sprite.HairCount; i++)
                    {
                        tex   = self.GetHairTexture(i);
                        scale = self.GetHairScale(sprite.HairCount - i - 1) * woomyScaleMul + woomyScaleOffs;
                        pos   = self.Nodes[i];
                        tex.Draw(pos + new Vector2(-1f - woomyOffs, 0f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(1f - woomyOffs, 0f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(0f - woomyOffs, -1f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(0f - woomyOffs, 1f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(-1f + woomyOffs, 0f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(1f + woomyOffs, 0f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(0f + woomyOffs, -1f), origin, colorBorder, scale);
                        tex.Draw(pos + new Vector2(0f + woomyOffs, 1f), origin, colorBorder, scale);
                    }
                }

                tex   = self.GetHairTexture(0);
                color = self.GetHairColor(0);
                scale = self.GetHairScale(0);
                tex.Draw(self.Nodes[0], origin, color, scale);

                tex   = self.GetHairTexture(2);
                color = self.GetHairColor(0);
                scale = self.GetHairScale(sprite.HairCount - 2) * woomyScaleMul + woomyScaleOffs;
                tex.Draw(self.Nodes[0] + new Vector2(-woomyOffs, 0f), origin, color, scale);
                tex.Draw(self.Nodes[0] + new Vector2(woomyOffs, 0f), origin, color, scale);

                for (int i = sprite.HairCount - 1; i >= 1; i--)
                {
                    tex   = self.GetHairTexture(i);
                    color = self.GetHairColor(i);
                    scale = self.GetHairScale(sprite.HairCount - i - 1) * woomyScaleMul + woomyScaleOffs;
                    tex.Draw(self.Nodes[i] + new Vector2(-woomyOffs, 0f), origin, color, scale);
                    tex.Draw(self.Nodes[i] + new Vector2(woomyOffs, 0f), origin, color, scale);
                }

                goto End;
            }

            orig(self);

End:
            if (Settings.SkateboardEnabled)
            {
                for (int i = 0; i < self.Nodes.Count; i++)
                {
                    self.Nodes[i] = self.Nodes[i] - SkateboardPlayerOffset;
                }
            }
            if (Settings.DuckToDabEnabled && player.Ducking)
            {
                for (int i = 0; i < self.Nodes.Count; i++)
                {
                    self.Nodes[i] = self.Nodes[i] - DabPlayerOffset;
                }
            }
        }
Example #7
0
 void PlayerHair_Render(On.Celeste.PlayerHair.orig_Render orig, PlayerHair self)
 {
     //self.Sprite.HairCount = Settings.HairLength;
     orig(self);
 }