Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ InternalDraw()

void Microsoft.Xna.Framework.Graphics.SpriteFont.InternalDraw ( ref StringProxy text,
SpriteBatch spriteBatch,
Vector2 textblockPosition,
Color color,
float rotation,
Vector2 origin,
ref Vector2 scale,
SpriteEffects spriteEffects,
float depth )
inlinepackage

Definition at line 202 of file SpriteFont.cs.

203 {
204 Matrix.CreateRotationZ(rotation, out var result);
205 Matrix.CreateTranslation((0f - origin.X) * scale.X, (0f - origin.Y) * scale.Y, 0f, out var result2);
206 Matrix.Multiply(ref result2, ref result, out result);
207 int num = 1;
208 float x = 0f;
209 Vector2 vector = default(Vector2);
210 bool flag = true;
211 if ((spriteEffects & SpriteEffects.FlipHorizontally) == SpriteEffects.FlipHorizontally)
212 {
213 x = InternalMeasure(ref text).X * scale.X;
214 num = -1;
215 }
216 if ((spriteEffects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically)
217 {
218 vector.Y = (InternalMeasure(ref text).Y - (float)lineSpacing) * scale.Y;
219 }
220 else
221 {
222 vector.Y = 0f;
223 }
224 vector.X = x;
225 for (int i = 0; i < text.Length; i++)
226 {
227 char c = text[i];
228 switch (c)
229 {
230 case '\n':
231 flag = true;
232 vector.X = x;
233 if ((spriteEffects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically)
234 {
235 vector.Y -= (float)lineSpacing * scale.Y;
236 }
237 else
238 {
239 vector.Y += (float)lineSpacing * scale.Y;
240 }
241 continue;
242 case '\r':
243 continue;
244 }
247 if (flag)
248 {
249 vector2.X = Math.Max(vector2.X, 0f);
250 }
251 else
252 {
253 vector.X += spacing * scale.X * (float)num;
254 }
255 vector.X += vector2.X * scale.X * (float)num;
256 Rectangle value = glyphData[indexForCharacter];
258 if ((spriteEffects & SpriteEffects.FlipVertically) == SpriteEffects.FlipVertically)
259 {
260 rectangle.Y = lineSpacing - value.Height - rectangle.Y;
261 }
262 if ((spriteEffects & SpriteEffects.FlipHorizontally) == SpriteEffects.FlipHorizontally)
263 {
264 rectangle.X -= rectangle.Width;
265 }
266 Vector2 position = vector;
267 position.X += (float)rectangle.X * scale.X;
268 position.Y += (float)rectangle.Y * scale.Y;
269 Vector2.Transform(ref position, ref result, out position);
270 position += textblockPosition;
271 spriteBatch.Draw(textureValue, position, value, color, rotation, Vector2.Zero, scale, spriteEffects, depth);
272 flag = false;
273 vector.X += (vector2.Y + vector2.Z) * scale.X * (float)num;
274 }
275 }
Vector2 InternalMeasure(ref StringProxy text)
static byte Max(byte val1, byte val2)
Definition Math.cs:738

References Microsoft.Xna.Framework.Matrix.CreateRotationZ(), Microsoft.Xna.Framework.Matrix.CreateTranslation(), Microsoft.Xna.Framework.Graphics.SpriteFont.croppingData, Microsoft.Xna.Framework.Graphics.SpriteBatch.Draw(), Microsoft.Xna.Framework.Graphics.SpriteFont.GetIndexForCharacter(), Microsoft.Xna.Framework.Graphics.SpriteFont.glyphData, Microsoft.Xna.Framework.Graphics.SpriteFont.InternalMeasure(), Microsoft.Xna.Framework.Graphics.SpriteFont.kerning, Microsoft.Xna.Framework.Graphics.SpriteFont.lineSpacing, System.Math.Max(), Microsoft.Xna.Framework.Matrix.Multiply(), Microsoft.Xna.Framework.Graphics.SpriteFont.spacing, System.text, Microsoft.Xna.Framework.Graphics.SpriteFont.textureValue, Microsoft.Xna.Framework.Vector2.Transform(), System.value, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.