Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
FancyClassicPlayerResourcesDisplaySet.cs
Go to the documentation of this file.
6
8
10{
11 private float _currentPlayerLife;
12
13 private float _lifePerHeart;
14
16
18
20
21 private int _heartCountRow1;
22
23 private int _heartCountRow2;
24
25 private int _starCount;
26
28
29 private float _manaPerStar;
30
31 private float _currentPlayerMana;
32
34
36
38
40
42
44
46
48
50
52
54
56
57 private bool _hoverLife;
58
59 private bool _hoverMana;
60
61 private bool _drawText;
62
63 public string NameKey { get; private set; }
64
65 public string ConfigKey { get; private set; }
66
67 public FancyClassicPlayerResourcesDisplaySet(string nameKey, string configKey, string resourceFolderName, AssetRequestMode mode)
68 {
69 //IL_004e: Unknown result type (might be due to invalid IL or missing references)
70 //IL_006b: Unknown result type (might be due to invalid IL or missing references)
71 //IL_0088: Unknown result type (might be due to invalid IL or missing references)
72 //IL_00a5: Unknown result type (might be due to invalid IL or missing references)
73 //IL_00c2: Unknown result type (might be due to invalid IL or missing references)
74 //IL_00df: Unknown result type (might be due to invalid IL or missing references)
75 //IL_00fc: Unknown result type (might be due to invalid IL or missing references)
76 //IL_0119: Unknown result type (might be due to invalid IL or missing references)
77 //IL_0136: Unknown result type (might be due to invalid IL or missing references)
78 //IL_0153: Unknown result type (might be due to invalid IL or missing references)
79 //IL_0170: Unknown result type (might be due to invalid IL or missing references)
80 //IL_018d: Unknown result type (might be due to invalid IL or missing references)
81 NameKey = nameKey;
82 ConfigKey = configKey;
83 if (configKey == "NewWithText")
84 {
85 _drawText = true;
86 }
87 else
88 {
89 _drawText = false;
90 }
91 string text = "Images\\UI\\PlayerResourceSets\\" + resourceFolderName;
92 _heartLeft = Main.Assets.Request<Texture2D>(text + "\\Heart_Left", mode);
93 _heartMiddle = Main.Assets.Request<Texture2D>(text + "\\Heart_Middle", mode);
94 _heartRight = Main.Assets.Request<Texture2D>(text + "\\Heart_Right", mode);
95 _heartRightFancy = Main.Assets.Request<Texture2D>(text + "\\Heart_Right_Fancy", mode);
96 _heartFill = Main.Assets.Request<Texture2D>(text + "\\Heart_Fill", mode);
97 _heartFillHoney = Main.Assets.Request<Texture2D>(text + "\\Heart_Fill_B", mode);
98 _heartSingleFancy = Main.Assets.Request<Texture2D>(text + "\\Heart_Single_Fancy", mode);
99 _starTop = Main.Assets.Request<Texture2D>(text + "\\Star_A", mode);
100 _starMiddle = Main.Assets.Request<Texture2D>(text + "\\Star_B", mode);
101 _starBottom = Main.Assets.Request<Texture2D>(text + "\\Star_C", mode);
102 _starSingle = Main.Assets.Request<Texture2D>(text + "\\Star_Single", mode);
103 _starFill = Main.Assets.Request<Texture2D>(text + "\\Star_Fill", mode);
104 }
105
106 public void Draw()
107 {
108 Player localPlayer = Main.LocalPlayer;
109 SpriteBatch spriteBatch = Main.spriteBatch;
110 PrepareFields(localPlayer);
111 DrawLifeBar(spriteBatch);
112 DrawManaBar(spriteBatch);
113 }
114
115 private void DrawLifeBar(SpriteBatch spriteBatch)
116 {
117 Vector2 vector = new Vector2(Main.screenWidth - 300 + 4, 15f);
118 if (_drawText)
119 {
120 vector.Y += 6f;
121 DrawLifeBarText(spriteBatch, vector + new Vector2(-4f, 3f));
122 }
123 bool isHovered = false;
124 ResourceDrawSettings resourceDrawSettings = default(ResourceDrawSettings);
125 resourceDrawSettings.ElementCount = _heartCountRow1;
126 resourceDrawSettings.ElementIndexOffset = 0;
127 resourceDrawSettings.TopLeftAnchor = vector;
128 resourceDrawSettings.GetTextureMethod = HeartPanelDrawer;
129 resourceDrawSettings.OffsetPerDraw = Vector2.Zero;
130 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitX;
131 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
132 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
133 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
134 resourceDrawSettings = default(ResourceDrawSettings);
135 resourceDrawSettings.ElementCount = _heartCountRow2;
136 resourceDrawSettings.ElementIndexOffset = 10;
137 resourceDrawSettings.TopLeftAnchor = vector + new Vector2(0f, 28f);
138 resourceDrawSettings.GetTextureMethod = HeartPanelDrawer;
139 resourceDrawSettings.OffsetPerDraw = Vector2.Zero;
140 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitX;
141 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
142 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
143 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
144 resourceDrawSettings = default(ResourceDrawSettings);
145 resourceDrawSettings.ElementCount = _heartCountRow1;
146 resourceDrawSettings.ElementIndexOffset = 0;
147 resourceDrawSettings.TopLeftAnchor = vector + new Vector2(15f, 15f);
148 resourceDrawSettings.GetTextureMethod = HeartFillingDrawer;
149 resourceDrawSettings.OffsetPerDraw = Vector2.UnitX * 2f;
150 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitX;
151 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
152 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = new Vector2(0.5f, 0.5f);
153 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
154 resourceDrawSettings = default(ResourceDrawSettings);
155 resourceDrawSettings.ElementCount = _heartCountRow2;
156 resourceDrawSettings.ElementIndexOffset = 10;
157 resourceDrawSettings.TopLeftAnchor = vector + new Vector2(15f, 15f) + new Vector2(0f, 28f);
158 resourceDrawSettings.GetTextureMethod = HeartFillingDrawer;
159 resourceDrawSettings.OffsetPerDraw = Vector2.UnitX * 2f;
160 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitX;
161 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
162 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = new Vector2(0.5f, 0.5f);
163 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
164 _hoverLife = isHovered;
165 }
166
167 private static void DrawLifeBarText(SpriteBatch spriteBatch, Vector2 topLeftAnchor)
168 {
169 Vector2 vector = topLeftAnchor + new Vector2(130f, -24f);
170 Player localPlayer = Main.LocalPlayer;
172 string text = Lang.inter[0].Value + " " + localPlayer.statLifeMax2 + "/" + localPlayer.statLifeMax2;
173 Vector2 vector2 = FontAssets.MouseText.Value.MeasureString(text);
174 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);
175 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);
176 }
177
178 private void DrawManaBar(SpriteBatch spriteBatch)
179 {
180 Vector2 vector = new Vector2(Main.screenWidth - 40, 22f);
181 _ = _starCount;
182 bool isHovered = false;
183 ResourceDrawSettings resourceDrawSettings = default(ResourceDrawSettings);
184 resourceDrawSettings.ElementCount = _starCount;
185 resourceDrawSettings.ElementIndexOffset = 0;
186 resourceDrawSettings.TopLeftAnchor = vector;
187 resourceDrawSettings.GetTextureMethod = StarPanelDrawer;
188 resourceDrawSettings.OffsetPerDraw = Vector2.Zero;
189 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitY;
190 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
191 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = Vector2.Zero;
192 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
193 resourceDrawSettings = default(ResourceDrawSettings);
194 resourceDrawSettings.ElementCount = _starCount;
195 resourceDrawSettings.ElementIndexOffset = 0;
196 resourceDrawSettings.TopLeftAnchor = vector + new Vector2(15f, 16f);
197 resourceDrawSettings.GetTextureMethod = StarFillingDrawer;
198 resourceDrawSettings.OffsetPerDraw = Vector2.UnitY * -2f;
199 resourceDrawSettings.OffsetPerDrawByTexturePercentile = Vector2.UnitY;
200 resourceDrawSettings.OffsetSpriteAnchor = Vector2.Zero;
201 resourceDrawSettings.OffsetSpriteAnchorByTexturePercentile = new Vector2(0.5f, 0.5f);
202 resourceDrawSettings.Draw(spriteBatch, ref isHovered);
203 _hoverMana = isHovered;
204 }
205
206 private static void DrawManaText(SpriteBatch spriteBatch)
207 {
208 Vector2 vector = FontAssets.MouseText.Value.MeasureString(Lang.inter[2].Value);
210 int num = 50;
211 if (vector.X >= 45f)
212 {
213 num = (int)vector.X + 5;
214 }
215 DynamicSpriteFontExtensionMethods.DrawString(spriteBatch, FontAssets.MouseText.Value, Lang.inter[2].Value, new Vector2(Main.screenWidth - num, 6f), color, 0f, default(Vector2), 1f, SpriteEffects.None, 0f);
216 }
217
218 private void HeartPanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
219 {
220 sourceRect = null;
221 offset = Vector2.Zero;
222 sprite = _heartLeft;
223 drawScale = 1f;
224 if (elementIndex == lastElementIndex && elementIndex == firstElementIndex)
225 {
226 sprite = _heartSingleFancy;
227 offset = new Vector2(-4f, -4f);
228 }
229 else if (elementIndex == lastElementIndex && lastElementIndex == _lastHeartPanelIndex)
230 {
231 sprite = _heartRightFancy;
232 offset = new Vector2(-8f, -4f);
233 }
234 else if (elementIndex == lastElementIndex)
235 {
236 sprite = _heartRight;
237 }
238 else if (elementIndex != firstElementIndex)
239 {
240 sprite = _heartMiddle;
241 }
242 }
243
244 private void HeartFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
245 {
246 sourceRect = null;
247 offset = Vector2.Zero;
248 sprite = _heartLeft;
249 if (elementIndex < _playerLifeFruitCount)
250 {
251 sprite = _heartFillHoney;
252 }
253 else
254 {
255 sprite = _heartFill;
256 }
257 float num = (drawScale = Utils.GetLerpValue(_lifePerHeart * (float)elementIndex, _lifePerHeart * (float)(elementIndex + 1), _currentPlayerLife, clamped: true));
258 if (elementIndex == _lastHeartFillingIndex && num > 0f)
259 {
260 drawScale += Main.cursorScale - 1f;
261 }
262 }
263
264 private void StarPanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
265 {
266 sourceRect = null;
267 offset = Vector2.Zero;
268 sprite = _starTop;
269 drawScale = 1f;
270 if (elementIndex == lastElementIndex && elementIndex == firstElementIndex)
271 {
272 sprite = _starSingle;
273 }
274 else if (elementIndex == lastElementIndex)
275 {
276 sprite = _starBottom;
277 offset = new Vector2(0f, 0f);
278 }
279 else if (elementIndex != firstElementIndex)
280 {
281 sprite = _starMiddle;
282 }
283 }
284
285 private void StarFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset<Texture2D> sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
286 {
287 sourceRect = null;
288 offset = Vector2.Zero;
289 sprite = _starFill;
290 float num = (drawScale = Utils.GetLerpValue(_manaPerStar * (float)elementIndex, _manaPerStar * (float)(elementIndex + 1), _currentPlayerMana, clamped: true));
291 if (elementIndex == _lastStarFillingIndex && num > 0f)
292 {
293 drawScale += Main.cursorScale - 1f;
294 }
295 }
296
297 private void PrepareFields(Player player)
298 {
299 PlayerStatsSnapshot playerStatsSnapshot = new PlayerStatsSnapshot(player);
300 _playerLifeFruitCount = playerStatsSnapshot.LifeFruitCount;
301 _lifePerHeart = playerStatsSnapshot.LifePerSegment;
302 _currentPlayerLife = playerStatsSnapshot.Life;
303 _manaPerStar = playerStatsSnapshot.ManaPerSegment;
304 _heartCountRow1 = Utils.Clamp((int)((float)playerStatsSnapshot.LifeMax / _lifePerHeart), 0, 10);
305 _heartCountRow2 = Utils.Clamp((int)((float)(playerStatsSnapshot.LifeMax - 200) / _lifePerHeart), 0, 10);
306 int lastHeartFillingIndex = (int)((float)playerStatsSnapshot.Life / _lifePerHeart);
307 _lastHeartFillingIndex = lastHeartFillingIndex;
309 _starCount = (int)((float)playerStatsSnapshot.ManaMax / _manaPerStar);
310 _currentPlayerMana = playerStatsSnapshot.Mana;
312 }
313
314 public void TryToHover()
315 {
316 if (_hoverLife)
317 {
319 }
320 if (_hoverMana)
321 {
323 }
324 }
325}
static void DrawString(this SpriteBatch spriteBatch, DynamicSpriteFont spriteFont, string text, Vector2 position, Color color)
static Asset< DynamicSpriteFont > MouseText
Definition FontAssets.cs:10
FancyClassicPlayerResourcesDisplaySet(string nameKey, string configKey, string resourceFolderName, AssetRequestMode mode)
void HeartFillingDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
void HeartPanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
void StarPanelDrawer(int elementIndex, int firstElementIndex, int lastElementIndex, out Asset< Texture2D > sprite, out Vector2 offset, out float drawScale, out Rectangle? sourceRect)
void StarFillingDrawer(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)