public static void Draw(SpriteBatch spriteBatch) { ROIPlayer player = Main.LocalPlayer.GetModPlayer <ROIPlayer>(); float percent = VoidManager.Instance.Percent(player) / 100f; spriteBatch.Draw(voidMeterEmpty, DrawingOffset, null, Color.White, 0f, Vector2.Zero, new Vector2(1f, 1f), SpriteEffects.None, 1f); spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearClamp, DepthStencilState.Default, RasterizerState.CullNone, null, Main.GameViewMatrix.ZoomMatrix); var radialShader = GameShaders.Misc["ROI:RadialProgress"]; radialShader.Shader.Parameters["progress"].SetValue(percent); radialShader.Shader.CurrentTechnique.Passes[0].Apply(); spriteBatch.Draw(voidMeterFilled, DrawingOffset, null, Color.White, 0f, Vector2.Zero, new Vector2(1f, 1f), SpriteEffects.None, 1f); spriteBatch.End(); Main.spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, Main.DefaultSamplerState, DepthStencilState.None, RasterizerState.CullCounterClockwise, null, Main.GameViewMatrix.TransformationMatrix); Rectangle textureBound = new Rectangle((int)DrawingOffset.X, (int)DrawingOffset.Y, voidMeterEmpty.Width, voidMeterFilled.Height); if (textureBound.Contains((int)Main.MouseScreen.X, (int)Main.MouseScreen.Y)) { Main.hoverItemName = $"Void meter : {player.VoidAffinityAmount}/{player.MaxVoidAffinity}\n" + $"Percent : {percent * 100}%\n" + $"Tier : {player.VoidTier}"; } }
public static void Draw(SpriteBatch sb) { ROIPlayer player = Main.LocalPlayer.GetModPlayer <ROIPlayer>(); int main_UIScreenAnchorX = (int)typeof(Main) .GetField("UI_ScreenAnchorX", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null); player.VoidHeartHP = 100; player.MaxVoidHeartStats = 100; player.MaxVoidHeartStatsExtra = 100; int LifePerHeart = 10; int numberOfVoidHeart = player.MaxVoidHeartStats / 10; Vector2 drawingOffset = new Vector2(500, 6f); int additionalHealth = player.MaxVoidHeartStatsExtra - player.VoidHeartHP; LifePerHeart += additionalHealth / numberOfVoidHeart; int numberOfHeartToDraw = player.MaxVoidHeartStatsExtra / LifePerHeart; if (numberOfHeartToDraw >= 10) { numberOfHeartToDraw = 10; } string text = $"Void HP {player.VoidHeartHP}/{player.MaxVoidHeartStatsExtra}"; Vector2 textSize = Main.fontMouseText.MeasureString(text); sb.DrawString(Main.fontMouseText, text, new Vector2(drawingOffset.X + textSize.X, drawingOffset.Y), new Microsoft.Xna.Framework.Color((int)Main.mouseTextColor, (int)Main.mouseTextColor, (int)Main.mouseTextColor, (int)Main.mouseTextColor), 0f, new Vector2(Main.fontMouseText.MeasureString(Main.player[Main.myPlayer].statLife + "/" + Main.player[Main.myPlayer].statLifeMax2).X, 0f), 1f, SpriteEffects.None, 0f); for (int i = 1; i < player.MaxVoidHeartStatsExtra / LifePerHeart + 1; i++) { float heartScale = 1f; float heartAlpha; bool pulsatingEffect = false; if (player.VoidHeartHP >= i * LifePerHeart) { heartAlpha = 255; if (player.VoidHeartHP == i * LifePerHeart) { pulsatingEffect = true; } } else { float individualHeartValue = ((float)Main.player[Main.myPlayer].statLife - (float)(i - 1) * LifePerHeart) / LifePerHeart; heartAlpha = (int)(30f + 225f * individualHeartValue); if (heartAlpha < 30) { heartAlpha = 30; } heartScale = individualHeartValue / 4f + 0.75f; if ((double)heartScale < 0.75) { heartScale = 0.75f; } if (individualHeartValue > 0f) { pulsatingEffect = true; } } if (pulsatingEffect) { heartScale += Main.cursorScale - 1f; } int alpha = (int)((double)((float)heartAlpha) * 0.9); Main.spriteBatch.Draw(heartTexture, new Vector2((float)(500 + 26 * (i - 1) + main_UIScreenAnchorX + heartTexture.Width / 2), 32f + ((float)heartTexture.Height - (float)heartTexture.Height * heartScale) / 2f + (float)(heartTexture.Height / 2)), new Microsoft.Xna.Framework.Rectangle?(new Microsoft.Xna.Framework.Rectangle(0, 0, heartTexture.Width, heartTexture.Height)), new Microsoft.Xna.Framework.Color(heartAlpha, heartAlpha, heartAlpha, alpha), 0f, new Vector2((float)(Main.heartTexture.Width / 2), (float)(Main.heartTexture.Height / 2)), heartScale, SpriteEffects.None, 0f); } }