Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
HorizontalBarsPlayerResourcesDisplaySet.cs
Go to the documentation of this file.
6
8
10{
11 private int _maxSegmentCount;
12
13 private int _hpSegmentsCount;
14
15 private int _mpSegmentsCount;
16
17 private int _hpFruitCount;
18
19 private float _hpPercent;
20
21 private float _mpPercent;
22
23 private byte _drawTextStyle;
24
25 private bool _hpHovered;
26
27 private bool _mpHovered;
28
30
32
34
36
38
40
42
44
45 public string NameKey { get; private set; }
46
47 public string ConfigKey { get; private set; }
48
49 public HorizontalBarsPlayerResourcesDisplaySet(string nameKey, string configKey, string resourceFolderName, AssetRequestMode mode)
50 {
51 //IL_0064: Unknown result type (might be due to invalid IL or missing references)
52 //IL_0081: Unknown result type (might be due to invalid IL or missing references)
53 //IL_009e: Unknown result type (might be due to invalid IL or missing references)
54 //IL_00bb: Unknown result type (might be due to invalid IL or missing references)
55 //IL_00d8: Unknown result type (might be due to invalid IL or missing references)
56 //IL_00f5: Unknown result type (might be due to invalid IL or missing references)
57 //IL_0112: Unknown result type (might be due to invalid IL or missing references)
58 //IL_012f: Unknown result type (might be due to invalid IL or missing references)
59 NameKey = nameKey;
60 ConfigKey = configKey;
61 if (configKey == "HorizontalBarsWithFullText")
62 {
64 }
65 else if (configKey == "HorizontalBarsWithText")
66 {
68 }
69 else
70 {
72 }
73 string text = "Images\\UI\\PlayerResourceSets\\" + resourceFolderName;
74 _hpFill = Main.Assets.Request<Texture2D>(text + "\\HP_Fill", mode);
75 _hpFillHoney = Main.Assets.Request<Texture2D>(text + "\\HP_Fill_Honey", mode);
76 _mpFill = Main.Assets.Request<Texture2D>(text + "\\MP_Fill", mode);
77 _panelLeft = Main.Assets.Request<Texture2D>(text + "\\Panel_Left", mode);
78 _panelMiddleHP = Main.Assets.Request<Texture2D>(text + "\\HP_Panel_Middle", mode);
79 _panelRightHP = Main.Assets.Request<Texture2D>(text + "\\HP_Panel_Right", mode);
80 _panelMiddleMP = Main.Assets.Request<Texture2D>(text + "\\MP_Panel_Middle", mode);
81 _panelRightMP = Main.Assets.Request<Texture2D>(text + "\\MP_Panel_Right", mode);
82 }
83
84 public void Draw()
85 {
87 SpriteBatch spriteBatch = Main.spriteBatch;
88 int num = 16;
89 int num2 = 18;
90 int num3 = Main.screenWidth - 300 - 22 + num;
91 if (_drawTextStyle == 2)
92 {
93 num2 += 2;
94 DrawLifeBarText(spriteBatch, new Vector2(num3, num2));
95 DrawManaText(spriteBatch);
96 }
97 else if (_drawTextStyle == 1)
98 {
99 num2 += 4;
100 DrawLifeBarText(spriteBatch, new Vector2(num3, num2));
101 }
102 Vector2 vector = new Vector2(num3, num2);
103 vector.X += (_maxSegmentCount - _hpSegmentsCount) * _panelMiddleHP.Width();
104 bool isHovered = false;
105 ResourceDrawSettings resourceDrawSettings = default(ResourceDrawSettings);
106 resourceDrawSettings.ElementCount = _hpSegmentsCount + 2;
107 resourceDrawSettings.ElementIndexOffset = 0;
108 resourceDrawSettings.TopLeftAnchor = vector;
109 resourceDrawSettings.GetTextureMethod = LifePanelDrawer;
110 resourceDrawSettings.OffsetPerDraw = Vector2.Zero;
111 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitX;
112 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
113 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
114 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
115 resourceDrawSettings = default(ResourceDrawSettings);
116 resourceDrawSettings.ElementCount = _hpSegmentsCount;
117 resourceDrawSettings.ElementIndexOffset = 0;
118 resourceDrawSettings.TopLeftAnchor = vector + new Vector2(6f, 6f);
119 resourceDrawSettings.GetTextureMethod = LifeFillingDrawer;
120 resourceDrawSettings.OffsetPerDraw = new Vector2(_hpFill.Width(), 0f);
121 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.Zero;
122 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
123 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
124 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
125 _hpHovered = isHovered;
126 isHovered = false;
127 Vector2 vector2 = new Vector2(num3 - 10, num2 + 24);
128 vector2.X += (_maxSegmentCount - _mpSegmentsCount) * _panelMiddleMP.Width();
129 resourceDrawSettings = default(ResourceDrawSettings);
130 resourceDrawSettings.ElementCount = _mpSegmentsCount + 2;
131 resourceDrawSettings.ElementIndexOffset = 0;
132 resourceDrawSettings.TopLeftAnchor = vector2;
133 resourceDrawSettings.GetTextureMethod = ManaPanelDrawer;
134 resourceDrawSettings.OffsetPerDraw = Vector2.Zero;
135 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitX;
136 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
137 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
138 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
139 resourceDrawSettings = default(ResourceDrawSettings);
140 resourceDrawSettings.ElementCount = _mpSegmentsCount;
141 resourceDrawSettings.ElementIndexOffset = 0;
142 resourceDrawSettings.TopLeftAnchor = vector2 + new Vector2(6f, 6f);
143 resourceDrawSettings.GetTextureMethod = ManaFillingDrawer;
144 resourceDrawSettings.OffsetPerDraw = new Vector2(_mpFill.Width(), 0f);
145 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.Zero;
146 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
147 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
148 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
149 _mpHovered = isHovered;
150 }
151
152 private static void DrawManaText(SpriteBatch spriteBatch)
153 {
155 int num = 180;
156 Player localPlayer = Main.LocalPlayer;
157 string text = Lang.inter[2].Value + ":";
158 string text2 = localPlayer.statMana + "/" + localPlayer.statManaMax2;
159 Vector2 vector = new Vector2(Main.screenWidth - num, 65f);
160 string text3 = text + " " + text2;
161 Vector2 vector2 = FontAssets.MouseText.Value.MeasureString(text3);
162 DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, FontAssets.MouseText.Value, text, vector + new Vector2((0f - vector2.X) * 0.5f, 0f), color, 0f, default(Vector2), 1f, SpriteEffects.None, 0f);
163 DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, FontAssets.MouseText.Value, text2, vector + new Vector2(vector2.X * 0.5f, 0f), color, 0f, new Vector2(FontAssets.MouseText.Value.MeasureString(text2).X, 0f), 1f, SpriteEffects.None, 0f);
164 }
165
166 private static void DrawLifeBarText(SpriteBatch spriteBatch, Vector2 topLeftAnchor)
167 {
168 Vector2 vector = topLeftAnchor + new Vector2(130f, -20f);
169 Player localPlayer = Main.LocalPlayer;
171 string text = Lang.inter[0].Value + " " + localPlayer.statLifeMax2 + "/" + localPlayer.statLifeMax2;
172 Vector2 vector2 = FontAssets.MouseText.Value.MeasureString(text);
173 DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, FontAssets.MouseText.Value, Lang.inter[0].Value, vector + new Vector2((0f - vector2.X) * 0.5f, 0f), color, 0f, default(Vector2), 1f, SpriteEffects.None, 0f);
174 DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, FontAssets.MouseText.Value, localPlayer.statLife + "/" + localPlayer.statLifeMax2, vector + new Vector2(vector2.X * 0.5f, 0f), color, 0f, new Vector2(FontAssets.MouseText.Value.MeasureString(localPlayer.statLife + "/" + localPlayer.statLifeMax2).X, 0f), 1f, SpriteEffects.None, 0f);
175 }
176
177 private void PrepareFields(Player player)
178 {
179 PlayerStatsSnapshot playerStatsSnapshot = new PlayerStatsSnapshot(player);
180 _hpSegmentsCount = (int)((float)playerStatsSnapshot.LifeMax / playerStatsSnapshot.LifePerSegment);
181 _mpSegmentsCount = (int)((float)playerStatsSnapshot.ManaMax / playerStatsSnapshot.ManaPerSegment);
182 _maxSegmentCount = 20;
183 _hpFruitCount = playerStatsSnapshot.LifeFruitCount;
184 _hpPercent = (float)playerStatsSnapshot.Life / (float)playerStatsSnapshot.LifeMax;
185 _mpPercent = (float)playerStatsSnapshot.Mana / (float)playerStatsSnapshot.ManaMax;
186 }
187
188 private void LifePanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
189 {
190 sourceRect = null;
191 offset = Vector2.Zero;
192 sprite = _panelLeft;
193 drawScale = 1f;
194 if (elementIndex == lastElementIndex)
195 {
196 sprite = _panelRightHP;
197 offset = new Vector2(-16f, -10f);
198 }
199 else if (elementIndex != firstElementIndex)
200 {
201 sprite = _panelMiddleHP;
202 }
203 }
204
205 private void ManaPanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
206 {
207 sourceRect = null;
208 offset = Vector2.Zero;
209 sprite = _panelLeft;
210 drawScale = 1f;
211 if (elementIndex == lastElementIndex)
212 {
213 sprite = _panelRightMP;
214 offset = new Vector2(-16f, -6f);
215 }
216 else if (elementIndex != firstElementIndex)
217 {
218 sprite = _panelMiddleMP;
219 }
220 }
221
222 private void LifeFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
223 {
224 sprite = _hpFill;
225 if (elementIndex >= _hpSegmentsCount - _hpFruitCount)
226 {
227 sprite = _hpFillHoney;
228 }
229 FillBarByValues(elementIndex, sprite, _hpSegmentsCount, _hpPercent, out offset, out drawScale, out sourceRect);
230 }
231
232 private static void FillBarByValues(int elementIndex, Asset<Texture2D> sprite, int segmentsCount, float fillPercent, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
233 {
234 sourceRect = null;
235 offset = Vector2.Zero;
236 float num = 1f;
237 float num2 = 1f / (float)segmentsCount;
238 float t = 1f - fillPercent;
239 float lerpValue = Utils.GetLerpValue(num2 * (float)elementIndex, num2 * (float)(elementIndex + 1), t, clamped: true);
240 num = 1f - lerpValue;
241 drawScale = 1f;
242 Rectangle value = sprite.Frame();
243 int num3 = (int)((float)value.Width * (1f - num));
244 offset.X += num3;
245 value.X += num3;
246 value.Width -= num3;
247 sourceRect = value;
248 }
249
250 private void ManaFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
251 {
252 sprite = _mpFill;
253 FillBarByValues(elementIndex, sprite, _mpSegmentsCount, _mpPercent, out offset, out drawScale, out sourceRect);
254 }
255
256 public void TryToHover()
257 {
258 if (_hpHovered)
259 {
261 }
262 if (_mpHovered)
263 {
265 }
266 }
267}
static void DrawString(this SpriteBatch spriteBatch, DynamicSpriteFont spriteFont, string text, Vector2 position, Color color)
static Asset< DynamicSpriteFont > MouseText
Definition FontAssets.cs:10
HorizontalBarsPlayerResourcesDisplaySet(string nameKey, string configKey, string resourceFolderName, AssetRequestMode mode)
void ManaFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
void LifePanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
void ManaPanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
static void FillBarByValues(int elementIndex, Asset< Texture2D > sprite, int segmentsCount, float fillPercent, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
void LifeFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
static LocalizedText[] inter
Definition Lang.cs:28
static SpriteBatch spriteBatch
Definition Main.cs:974
static byte mouseTextColor
Definition Main.cs:1751
static int screenWidth
Definition Main.cs:1719
static IAssetRepository Assets
Definition Main.cs:209
static Player LocalPlayer
Definition Main.cs:2829
static float GetLerpValue(float from, float to, float t, bool clamped=false)
Definition Utils.cs:203
void Draw(SpriteBatch spriteBatch, ref bool isHovered)