Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CombatText.cs
Go to the documentation of this file.
3
4namespace Terraria;
5
6public class CombatText
7{
8 public static readonly Color DamagedFriendly = new Color(255, 80, 90, 255);
9
10 public static readonly Color DamagedFriendlyCrit = new Color(255, 100, 30, 255);
11
12 public static readonly Color DamagedHostile = new Color(255, 160, 80, 255);
13
14 public static readonly Color DamagedHostileCrit = new Color(255, 100, 30, 255);
15
16 public static readonly Color OthersDamagedHostile = DamagedHostile * 0.4f;
17
18 public static readonly Color OthersDamagedHostileCrit = DamagedHostileCrit * 0.4f;
19
20 public static readonly Color HealLife = new Color(100, 255, 100, 255);
21
22 public static readonly Color HealMana = new Color(100, 100, 255, 255);
23
24 public static readonly Color LifeRegen = new Color(255, 60, 70, 255);
25
26 public static readonly Color LifeRegenNegative = new Color(255, 140, 40, 255);
27
29
31
32 public float alpha;
33
34 public int alphaDir = 1;
35
36 public string text = "";
37
38 public float scale = 1f;
39
40 public float rotation;
41
42 public Color color;
43
44 public bool active;
45
46 public int lifeTime;
47
48 public bool crit;
49
50 public bool dot;
51
52 public static float TargetScale => 1f;
53
54 public static int NewText(Rectangle location, Color color, int amount, bool dramatic = false, bool dot = false)
55 {
56 return NewText(location, color, amount.ToString(), dramatic, dot);
57 }
58
59 public static int NewText(Rectangle location, Color color, string text, bool dramatic = false, bool dot = false)
60 {
61 if (Main.netMode == 2)
62 {
63 return 100;
64 }
65 for (int i = 0; i < 100; i++)
66 {
67 if (Main.combatText[i].active)
68 {
69 continue;
70 }
71 int num = 0;
72 if (dramatic)
73 {
74 num = 1;
75 }
76 Vector2 vector = FontAssets.CombatText[num].Value.MeasureString(text);
77 Main.combatText[i].alpha = 1f;
78 Main.combatText[i].alphaDir = -1;
79 Main.combatText[i].active = true;
80 Main.combatText[i].scale = 0f;
81 Main.combatText[i].rotation = 0f;
82 Main.combatText[i].position.X = (float)location.X + (float)location.Width * 0.5f - vector.X * 0.5f;
83 Main.combatText[i].position.Y = (float)location.Y + (float)location.Height * 0.25f - vector.Y * 0.5f;
84 Main.combatText[i].position.X += Main.rand.Next(-(int)((double)location.Width * 0.5), (int)((double)location.Width * 0.5) + 1);
85 Main.combatText[i].position.Y += Main.rand.Next(-(int)((double)location.Height * 0.5), (int)((double)location.Height * 0.5) + 1);
86 Main.combatText[i].color = color;
87 Main.combatText[i].text = text;
88 Main.combatText[i].velocity.Y = -7f;
89 if (Main.player[Main.myPlayer].gravDir == -1f)
90 {
91 Main.combatText[i].velocity.Y *= -1f;
92 Main.combatText[i].position.Y = (float)location.Y + (float)location.Height * 0.75f + vector.Y * 0.5f;
93 }
94 Main.combatText[i].lifeTime = 60;
95 Main.combatText[i].crit = dramatic;
96 Main.combatText[i].dot = dot;
97 if (dramatic)
98 {
99 Main.combatText[i].text = text;
100 Main.combatText[i].lifeTime *= 2;
101 Main.combatText[i].velocity.Y *= 2f;
102 Main.combatText[i].velocity.X = (float)Main.rand.Next(-25, 26) * 0.05f;
103 Main.combatText[i].rotation = (float)(Main.combatText[i].lifeTime / 2) * 0.002f;
104 if (Main.combatText[i].velocity.X < 0f)
105 {
106 Main.combatText[i].rotation *= -1f;
107 }
108 }
109 if (dot)
110 {
111 Main.combatText[i].velocity.Y = -4f;
112 Main.combatText[i].lifeTime = 40;
113 }
114 return i;
115 }
116 return 100;
117 }
118
119 public static void clearAll()
120 {
121 for (int i = 0; i < 100; i++)
122 {
123 Main.combatText[i].active = false;
124 }
125 }
126
127 public void Update()
128 {
129 if (!active)
130 {
131 return;
132 }
133 float targetScale = TargetScale;
134 alpha += (float)alphaDir * 0.05f;
135 if ((double)alpha <= 0.6)
136 {
137 alphaDir = 1;
138 }
139 if (alpha >= 1f)
140 {
141 alpha = 1f;
142 alphaDir = -1;
143 }
144 if (dot)
145 {
146 velocity.Y += 0.15f;
147 }
148 else
149 {
150 velocity.Y *= 0.92f;
151 if (crit)
152 {
153 velocity.Y *= 0.92f;
154 }
155 }
156 velocity.X *= 0.93f;
158 lifeTime--;
159 if (lifeTime <= 0)
160 {
161 scale -= 0.1f * targetScale;
162 if ((double)scale < 0.1)
163 {
164 active = false;
165 }
166 lifeTime = 0;
167 if (crit)
168 {
169 alphaDir = -1;
170 scale += 0.07f * targetScale;
171 }
172 return;
173 }
174 if (crit)
175 {
176 if (velocity.X < 0f)
177 {
178 rotation += 0.001f;
179 }
180 else
181 {
182 rotation -= 0.001f;
183 }
184 }
185 if (dot)
186 {
187 scale += 0.5f * targetScale;
188 if ((double)scale > 0.8 * (double)targetScale)
189 {
190 scale = 0.8f * targetScale;
191 }
192 return;
193 }
194 if (scale < targetScale)
195 {
196 scale += 0.1f * targetScale;
197 }
198 if (scale > targetScale)
199 {
200 scale = targetScale;
201 }
202 }
203
204 public static void UpdateCombatText()
205 {
206 for (int i = 0; i < 100; i++)
207 {
208 if (Main.combatText[i].active)
209 {
210 Main.combatText[i].Update();
211 }
212 }
213 }
214}
static readonly Color OthersDamagedHostileCrit
Definition CombatText.cs:18
static readonly Color DamagedFriendly
Definition CombatText.cs:8
static readonly Color HealMana
Definition CombatText.cs:22
static void UpdateCombatText()
static readonly Color LifeRegen
Definition CombatText.cs:24
static readonly Color DamagedHostileCrit
Definition CombatText.cs:14
static void clearAll()
static readonly Color LifeRegenNegative
Definition CombatText.cs:26
static readonly Color DamagedFriendlyCrit
Definition CombatText.cs:10
static readonly Color OthersDamagedHostile
Definition CombatText.cs:16
static int NewText(Rectangle location, Color color, string text, bool dramatic=false, bool dot=false)
Definition CombatText.cs:59
static int NewText(Rectangle location, Color color, int amount, bool dramatic=false, bool dot=false)
Definition CombatText.cs:54
static float TargetScale
Definition CombatText.cs:52
static readonly Color HealLife
Definition CombatText.cs:20
static readonly Color DamagedHostile
Definition CombatText.cs:12
static Asset< DynamicSpriteFont >[] CombatText
Definition FontAssets.cs:14
static int myPlayer
Definition Main.cs:1801
static int netMode
Definition Main.cs:2095
static UnifiedRandom rand
Definition Main.cs:1387
static CombatText[] combatText
Definition Main.cs:1695
static Player[] player
Definition Main.cs:1803