Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
WiresUI.cs
Go to the documentation of this file.
1using System;
5
7
8public class WiresUI
9{
10 public static class Settings
11 {
12 [Flags]
13 public enum MultiToolMode
14 {
15 Red = 1,
16 Green = 2,
17 Blue = 4,
18 Yellow = 8,
19 Actuator = 0x10,
20 Cutter = 0x20
21 }
22
24
25 private static int _lastActuatorEnabled;
26
27 public static bool DrawWires
28 {
29 get
30 {
32 {
33 return false;
34 }
35 if (!Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].mech)
36 {
37 if (Main.player[Main.myPlayer].InfoAccMechShowWires)
38 {
39 return Main.player[Main.myPlayer].builderAccStatus[8] == 0;
40 }
41 return false;
42 }
43 return true;
44 }
45 }
46
47 public static bool HideWires => Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].type == 3620;
48
49 public static bool DrawToolModeUI
50 {
51 get
52 {
53 int type = Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].type;
54 if (type != 3611)
55 {
56 return type == 3625;
57 }
58 return true;
59 }
60 }
61
62 public static bool DrawToolAllowActuators
63 {
64 get
65 {
66 int type = Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].type;
67 if (type == 3611)
68 {
70 }
71 if (type == 3625)
72 {
74 }
75 return _lastActuatorEnabled == 2;
76 }
77 }
78 }
79
80 public class WiresRadial
81 {
83
84 public bool active;
85
86 public bool OnWiresMenu;
87
88 private float _lineOpacity;
89
90 public void Update()
91 {
93 LineUpdate();
94 }
95
96 private void LineUpdate()
97 {
98 bool value = true;
99 float min = 0.75f;
100 Player player = Main.player[Main.myPlayer];
102 {
103 value = false;
104 min = 0f;
105 }
106 if (player.dead || Main.mouseItem.type > 0)
107 {
108 value = false;
109 _lineOpacity = 0f;
110 return;
111 }
112 if (player.cursorItemIconEnabled && player.cursorItemIconID != 0 && player.cursorItemIconID != 3625)
113 {
114 value = false;
115 _lineOpacity = 0f;
116 return;
117 }
119 {
120 value = false;
121 _lineOpacity = 0f;
122 return;
123 }
124 float num = Utils.Clamp(_lineOpacity + 0.05f * (float)value.ToDirectionInt(), min, 1f);
125 _lineOpacity += 0.05f * (float)Math.Sign(num - _lineOpacity);
126 if (Math.Abs(_lineOpacity - num) < 0.05f)
127 {
128 _lineOpacity = num;
129 }
130 }
131
132 private void FlowerUpdate()
133 {
134 Player player = Main.player[Main.myPlayer];
136 {
137 active = false;
138 return;
139 }
140 if ((player.mouseInterface || player.lastMouseInterface) && !OnWiresMenu)
141 {
142 active = false;
143 return;
144 }
145 if (player.dead || Main.mouseItem.type > 0)
146 {
147 active = false;
148 OnWiresMenu = false;
149 return;
150 }
151 OnWiresMenu = false;
153 {
154 return;
155 }
156 if (active)
157 {
158 active = false;
159 }
161 {
162 active = true;
165 {
167 }
168 }
169 }
170
171 public void Draw(SpriteBatch spriteBatch)
172 {
173 DrawFlower(spriteBatch);
174 DrawCursorArea(spriteBatch);
175 }
176
177 private void DrawLine(SpriteBatch spriteBatch)
178 {
179 if (active || _lineOpacity == 0f)
180 {
181 return;
182 }
183 Vector2 vector = Main.MouseScreen;
184 Vector2 vector2 = new Vector2(Main.screenWidth / 2, Main.screenHeight - 70);
186 {
187 vector = Vector2.Zero;
188 }
189 Vector2 vector3 = vector - vector2;
192 vector3.ToRotation();
193 vector3.Length();
194 bool flag = false;
195 bool drawToolAllowActuators = Settings.DrawToolAllowActuators;
196 for (int i = 0; i < 6; i++)
197 {
198 if (!drawToolAllowActuators && i == 5)
199 {
200 continue;
201 }
202 bool flag2 = Settings.ToolMode.HasFlag((Settings.MultiToolMode)(1 << i));
203 if (i == 5)
204 {
205 flag2 = Settings.ToolMode.HasFlag(Settings.MultiToolMode.Actuator);
206 }
207 Vector2 vector4 = vector2 + Vector2.UnitX * (45f * ((float)i - 1.5f));
208 int num = i;
209 if (i == 0)
210 {
211 num = 3;
212 }
213 if (i == 3)
214 {
215 num = 0;
216 }
217 switch (num)
218 {
219 case 0:
220 case 1:
221 vector4 = vector2 + new Vector2((45f + (float)(drawToolAllowActuators ? 15 : 0)) * (float)(2 - num), 0f) * _lineOpacity;
222 break;
223 case 2:
224 case 3:
225 vector4 = vector2 + new Vector2((0f - (45f + (float)(drawToolAllowActuators ? 15 : 0))) * (float)(num - 1), 0f) * _lineOpacity;
226 break;
227 case 5:
228 vector4 = vector2 + new Vector2(0f, 22f) * _lineOpacity;
229 break;
230 case 4:
231 flag2 = false;
232 vector4 = vector2 - new Vector2(0f, drawToolAllowActuators ? 22f : 0f) * _lineOpacity;
233 break;
234 }
235 bool flag3 = false;
237 {
238 flag3 = Vector2.Distance(vector4, vector) < 19f * _lineOpacity;
239 }
240 if (flag)
241 {
242 flag3 = false;
243 }
244 if (flag3)
245 {
246 flag = true;
247 }
248 Texture2D value = TextureAssets.WireUi[(Settings.ToolMode.HasFlag(Settings.MultiToolMode.Cutter) ? 8 : 0) + (flag3 ? 1 : 0)].Value;
249 Texture2D texture2D = null;
250 switch (i)
251 {
252 case 0:
253 case 1:
254 case 2:
255 case 3:
256 texture2D = TextureAssets.WireUi[2 + i].Value;
257 break;
258 case 4:
259 texture2D = TextureAssets.WireUi[Settings.ToolMode.HasFlag(Settings.MultiToolMode.Cutter) ? 7 : 6].Value;
260 break;
261 case 5:
262 texture2D = TextureAssets.WireUi[10].Value;
263 break;
264 }
265 Color color = Color.White;
266 Color color2 = Color.White;
267 if (!flag2 && i != 4)
268 {
269 if (flag3)
270 {
271 color2 = new Color(100, 100, 100);
272 color2 = new Color(120, 120, 120);
273 color = new Color(200, 200, 200);
274 }
275 else
276 {
277 color2 = new Color(150, 150, 150);
278 color2 = new Color(80, 80, 80);
279 color = new Color(100, 100, 100);
280 }
281 }
282 Utils.CenteredRectangle(vector4, new Vector2(40f));
283 if (flag3)
284 {
286 {
287 switch (i)
288 {
289 case 0:
290 Settings.ToolMode ^= Settings.MultiToolMode.Red;
291 break;
292 case 1:
293 Settings.ToolMode ^= Settings.MultiToolMode.Green;
294 break;
295 case 2:
296 Settings.ToolMode ^= Settings.MultiToolMode.Blue;
297 break;
298 case 3:
299 Settings.ToolMode ^= Settings.MultiToolMode.Yellow;
300 break;
301 case 4:
302 Settings.ToolMode ^= Settings.MultiToolMode.Cutter;
303 break;
304 case 5:
305 Settings.ToolMode ^= Settings.MultiToolMode.Actuator;
306 break;
307 }
308 }
309 if (!Main.mouseLeft || Main.player[Main.myPlayer].mouseInterface)
310 {
311 Main.player[Main.myPlayer].mouseInterface = true;
312 }
313 OnWiresMenu = true;
314 }
315 spriteBatch.Draw(value, vector4, null, color * _lineOpacity, 0f, value.Size() / 2f, _lineOpacity, SpriteEffects.None, 0f);
316 spriteBatch.Draw(texture2D, vector4, null, color2 * _lineOpacity, 0f, texture2D.Size() / 2f, _lineOpacity, SpriteEffects.None, 0f);
317 }
318 if (Main.mouseLeft && Main.mouseLeftRelease && !flag)
319 {
320 active = false;
321 }
322 }
323
324 private void DrawFlower(SpriteBatch spriteBatch)
325 {
326 if (!active)
327 {
328 return;
329 }
330 Vector2 vector = Main.MouseScreen;
331 Vector2 vector2 = position;
333 {
334 vector = ((PlayerInput.GamepadThumbstickRight != Vector2.Zero) ? (position + PlayerInput.GamepadThumbstickRight * 40f) : ((!(PlayerInput.GamepadThumbstickLeft != Vector2.Zero)) ? position : (position + PlayerInput.GamepadThumbstickLeft * 40f)));
335 }
336 Vector2 vector3 = vector - vector2;
339 float num = vector3.ToRotation();
340 float num2 = vector3.Length();
341 bool flag = false;
342 bool drawToolAllowActuators = Settings.DrawToolAllowActuators;
343 float num3 = 4 + drawToolAllowActuators.ToInt();
344 float num4 = (drawToolAllowActuators ? 11f : (-0.5f));
345 for (int i = 0; i < 6; i++)
346 {
347 if (!drawToolAllowActuators && i == 5)
348 {
349 continue;
350 }
351 bool flag2 = Settings.ToolMode.HasFlag((Settings.MultiToolMode)(1 << i));
352 if (i == 5)
353 {
354 flag2 = Settings.ToolMode.HasFlag(Settings.MultiToolMode.Actuator);
355 }
356 Vector2 vector4 = vector2 + Vector2.UnitX * (45f * ((float)i - 1.5f));
357 switch (i)
358 {
359 case 0:
360 case 1:
361 case 2:
362 case 3:
363 {
364 float num5 = i;
365 if (i == 0)
366 {
367 num5 = 3f;
368 }
369 if (i == 3)
370 {
371 num5 = 0f;
372 }
373 vector4 = vector2 + Vector2.UnitX.RotatedBy(num5 * ((float)Math.PI * 2f) / num3 - (float)Math.PI / num4) * 45f;
374 break;
375 }
376 case 5:
377 vector4 = vector2 + Vector2.UnitX.RotatedBy((float)(i - 1) * ((float)Math.PI * 2f) / num3 - (float)Math.PI / num4) * 45f;
378 break;
379 case 4:
380 flag2 = false;
381 vector4 = vector2;
382 break;
383 }
384 bool flag3 = false;
385 if (i == 4)
386 {
387 flag3 = num2 < 20f;
388 }
389 switch (i)
390 {
391 case 4:
392 flag3 = num2 < 20f;
393 break;
394 case 0:
395 case 1:
396 case 2:
397 case 3:
398 case 5:
399 {
400 float value = (vector4 - vector2).ToRotation().AngleTowards(num, (float)Math.PI * 2f / (num3 * 2f)) - num;
401 if (num2 >= 20f && Math.Abs(value) < 0.01f)
402 {
403 flag3 = true;
404 }
405 break;
406 }
407 }
409 {
410 flag3 = Vector2.Distance(vector4, vector) < 19f;
411 }
412 if (flag)
413 {
414 flag3 = false;
415 }
416 if (flag3)
417 {
418 flag = true;
419 }
420 Texture2D value2 = TextureAssets.WireUi[(Settings.ToolMode.HasFlag(Settings.MultiToolMode.Cutter) ? 8 : 0) + (flag3 ? 1 : 0)].Value;
421 Texture2D texture2D = null;
422 switch (i)
423 {
424 case 0:
425 case 1:
426 case 2:
427 case 3:
428 texture2D = TextureAssets.WireUi[2 + i].Value;
429 break;
430 case 4:
431 texture2D = TextureAssets.WireUi[Settings.ToolMode.HasFlag(Settings.MultiToolMode.Cutter) ? 7 : 6].Value;
432 break;
433 case 5:
434 texture2D = TextureAssets.WireUi[10].Value;
435 break;
436 }
437 Color color = Color.White;
438 Color color2 = Color.White;
439 if (!flag2 && i != 4)
440 {
441 if (flag3)
442 {
443 color2 = new Color(100, 100, 100);
444 color2 = new Color(120, 120, 120);
445 color = new Color(200, 200, 200);
446 }
447 else
448 {
449 color2 = new Color(150, 150, 150);
450 color2 = new Color(80, 80, 80);
451 color = new Color(100, 100, 100);
452 }
453 }
454 Utils.CenteredRectangle(vector4, new Vector2(40f));
455 if (flag3)
456 {
458 {
459 switch (i)
460 {
461 case 0:
462 Settings.ToolMode ^= Settings.MultiToolMode.Red;
463 break;
464 case 1:
465 Settings.ToolMode ^= Settings.MultiToolMode.Green;
466 break;
467 case 2:
468 Settings.ToolMode ^= Settings.MultiToolMode.Blue;
469 break;
470 case 3:
471 Settings.ToolMode ^= Settings.MultiToolMode.Yellow;
472 break;
473 case 4:
474 Settings.ToolMode ^= Settings.MultiToolMode.Cutter;
475 break;
476 case 5:
477 Settings.ToolMode ^= Settings.MultiToolMode.Actuator;
478 break;
479 }
480 }
481 Main.player[Main.myPlayer].mouseInterface = true;
482 OnWiresMenu = true;
483 }
484 spriteBatch.Draw(value2, vector4, null, color, 0f, value2.Size() / 2f, 1f, SpriteEffects.None, 0f);
485 spriteBatch.Draw(texture2D, vector4, null, color2, 0f, texture2D.Size() / 2f, 1f, SpriteEffects.None, 0f);
486 }
487 if (Main.mouseLeft && Main.mouseLeftRelease && !flag)
488 {
489 active = false;
490 }
491 }
492
493 private void DrawCursorArea(SpriteBatch spriteBatch)
494 {
495 if (active || _lineOpacity == 0f)
496 {
497 return;
498 }
499 Vector2 vector = Main.MouseScreen + new Vector2(10 - 9 * PlayerInput.UsingGamepad.ToInt(), 25f);
500 Color color = new Color(50, 50, 50);
501 bool drawToolAllowActuators = Settings.DrawToolAllowActuators;
502 if (!drawToolAllowActuators)
503 {
505 {
506 vector += new Vector2(-20f, 10f);
507 }
508 else
509 {
510 vector += new Vector2(0f, 10f);
511 }
512 }
514 Texture2D texture = value;
515 Rectangle rectangle = new Rectangle(140, 2, 6, 6);
516 Rectangle rectangle2 = new Rectangle(148, 2, 6, 6);
517 Rectangle rectangle3 = new Rectangle(128, 0, 10, 10);
518 float num = 1f;
519 float scale = 1f;
520 bool flag = false;
521 if (flag && !drawToolAllowActuators)
522 {
523 num *= Main.cursorScale;
524 }
525 float num2 = _lineOpacity;
527 {
528 num2 *= Main.GamepadCursorAlpha;
529 }
530 for (int i = 0; i < 5; i++)
531 {
532 if (!drawToolAllowActuators && i == 4)
533 {
534 continue;
535 }
536 float num3 = num2;
537 Vector2 vec = vector + Vector2.UnitX * (45f * ((float)i - 1.5f));
538 int num4 = i;
539 if (i == 0)
540 {
541 num4 = 3;
542 }
543 if (i == 1)
544 {
545 num4 = 2;
546 }
547 if (i == 2)
548 {
549 num4 = 1;
550 }
551 if (i == 3)
552 {
553 num4 = 0;
554 }
555 if (i == 4)
556 {
557 num4 = 5;
558 }
559 int num5 = num4;
560 switch (num5)
561 {
562 case 2:
563 num5 = 1;
564 break;
565 case 1:
566 num5 = 2;
567 break;
568 }
569 bool flag2 = Settings.ToolMode.HasFlag((Settings.MultiToolMode)(1 << num5));
570 if (num5 == 5)
571 {
572 flag2 = Settings.ToolMode.HasFlag(Settings.MultiToolMode.Actuator);
573 }
574 Color color2 = Color.HotPink;
575 switch (num4)
576 {
577 case 0:
578 color2 = new Color(253, 58, 61);
579 break;
580 case 1:
581 color2 = new Color(83, 180, 253);
582 break;
583 case 2:
584 color2 = new Color(83, 253, 153);
585 break;
586 case 3:
587 color2 = new Color(253, 254, 83);
588 break;
589 case 5:
590 color2 = Color.WhiteSmoke;
591 break;
592 }
593 if (!flag2)
594 {
595 color2 = Color.Lerp(color2, Color.Black, 0.65f);
596 }
597 if (flag)
598 {
599 if (drawToolAllowActuators)
600 {
601 switch (num4)
602 {
603 case 0:
604 vec = vector + new Vector2(-12f, 0f) * num;
605 break;
606 case 3:
607 vec = vector + new Vector2(12f, 0f) * num;
608 break;
609 case 1:
610 vec = vector + new Vector2(-6f, 12f) * num;
611 break;
612 case 2:
613 vec = vector + new Vector2(6f, 12f) * num;
614 break;
615 case 5:
616 vec = vector + new Vector2(0f, 0f) * num;
617 break;
618 }
619 }
620 else
621 {
622 vec = vector + new Vector2(12 * (num4 + 1), 12 * (3 - num4)) * num;
623 }
624 }
625 else if (drawToolAllowActuators)
626 {
627 switch (num4)
628 {
629 case 0:
630 vec = vector + new Vector2(-12f, 0f) * num;
631 break;
632 case 3:
633 vec = vector + new Vector2(12f, 0f) * num;
634 break;
635 case 1:
636 vec = vector + new Vector2(-6f, 12f) * num;
637 break;
638 case 2:
639 vec = vector + new Vector2(6f, 12f) * num;
640 break;
641 case 5:
642 vec = vector + new Vector2(0f, 0f) * num;
643 break;
644 }
645 }
646 else
647 {
648 float num6 = 0.7f;
649 switch (num4)
650 {
651 case 0:
652 vec = vector + new Vector2(0f, -12f) * num * num6;
653 break;
654 case 3:
655 vec = vector + new Vector2(12f, 0f) * num * num6;
656 break;
657 case 1:
658 vec = vector + new Vector2(-12f, 0f) * num * num6;
659 break;
660 case 2:
661 vec = vector + new Vector2(0f, 12f) * num * num6;
662 break;
663 }
664 }
665 vec = vec.Floor();
666 spriteBatch.Draw(texture, vec, rectangle3, color * num3, 0f, rectangle3.Size() / 2f, scale, SpriteEffects.None, 0f);
667 spriteBatch.Draw(value, vec, rectangle, color2 * num3, 0f, rectangle.Size() / 2f, scale, SpriteEffects.None, 0f);
668 if (Settings.ToolMode.HasFlag(Settings.MultiToolMode.Cutter))
669 {
670 spriteBatch.Draw(value, vec, rectangle2, color * num3, 0f, rectangle2.Size() / 2f, scale, SpriteEffects.None, 0f);
671 }
672 }
673 }
674 }
675
676 private static WiresRadial radial = new WiresRadial();
677
678 public static bool Open => radial.active;
679
680 public static void HandleWiresUI(SpriteBatch spriteBatch)
681 {
682 radial.Update();
683 radial.Draw(spriteBatch);
684 }
685}
void Draw(Texture2D texture, Vector2 position, Color color)
static double Abs(double value)
static int Sign(decimal value)
Definition Math.cs:1202
static Asset< Texture2D > BuilderAcc
static Asset< Texture2D >[] WireUi
void Draw(SpriteBatch spriteBatch)
Definition WiresUI.cs:171
void DrawLine(SpriteBatch spriteBatch)
Definition WiresUI.cs:177
void DrawCursorArea(SpriteBatch spriteBatch)
Definition WiresUI.cs:493
void DrawFlower(SpriteBatch spriteBatch)
Definition WiresUI.cs:324
static WiresRadial radial
Definition WiresUI.cs:676
static void HandleWiresUI(SpriteBatch spriteBatch)
Definition WiresUI.cs:680
static Vector2 GamepadThumbstickRight
static bool ingameOptionsWindow
Definition Main.cs:704
static bool drawingPlayerChat
Definition Main.cs:1739
static UserInterface InGameUI
Definition Main.cs:383
static bool SmartInteractShowingGenuine
Definition Main.cs:2155
static int myPlayer
Definition Main.cs:1801
static bool mouseRight
Definition Main.cs:616
static bool mouseLeftRelease
Definition Main.cs:1755
static int screenHeight
Definition Main.cs:1721
static Vector2 MouseScreen
Definition Main.cs:2773
static Item mouseItem
Definition Main.cs:1773
static bool getGoodWorld
Definition Main.cs:341
static bool mouseRightRelease
Definition Main.cs:1757
static float cursorScale
Definition Main.cs:2211
static float GamepadCursorAlpha
Definition Main.cs:2527
static int screenWidth
Definition Main.cs:1719
static bool HoveringOverAnNPC
Definition Main.cs:2447
static bool SmartCursorWanted
Definition Main.cs:2840
static Player[] player
Definition Main.cs:1803
static bool mouseLeft
Definition Main.cs:614
static bool downedBoss3
Definition NPC.cs:349
bool cursorItemIconEnabled
Definition Player.cs:1489
int cursorItemIconID
Definition Player.cs:1493
bool mouseInterface
Definition Player.cs:1137
bool lastMouseInterface
Definition Player.cs:1139
static Rectangle CenteredRectangle(Vector2 center, Vector2 size)
Definition Utils.cs:604
static Color Lerp(Color value1, Color value2, float amount)
Definition Color.cs:491
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91