/// <summary> /// Basiskonstruktor. /// </summary> public Tile() { Rotation = TileRotation.None; TileSheetRectangle = Rectangle.Empty; Shape = new AABBShape(); Body = new Body(); ID = IDManager.Instance.TileID; }
public override void LoadContent(Body body) { // Falls es keinen Text geben sollte, wird nur ein Bild geladen. if(Text == String.Empty) base.LoadContent(body); else { content = new ContentManager(ScreenManager.Instance.Content.ServiceProvider, "Content"); if(Path != String.Empty) Texture = content.Load<Texture2D>(Path); font = content.Load<SpriteFont>(FontName); Vector2 dimension = Vector2.Zero; Vector2 fontPosition = Vector2.Zero; Vector2 texturePosition = Vector2.Zero; // Es wird nur verbunden, wenn es überhaupt ein Bild gibt, mit dem sich der Text verbinden kann. if(Texture != null) { // Hier wird die Dimension des verbundenen Bildes berechnet. switch(MergeSide) { case TextMergeSide.None: dimension = new Vector2(Math.Max(Texture.Width, font.MeasureString(Text).X), Math.Max(Texture.Height, font.MeasureString(Text).Y)); break; case TextMergeSide.Right: case TextMergeSide.Left: dimension = new Vector2(Texture.Width + font.MeasureString(Text).X + MergeOffset.X, Math.Max(Texture.Height, font.MeasureString(Text).Y)); break; case TextMergeSide.Top: case TextMergeSide.Bottom: dimension = new Vector2(Math.Max(Texture.Width, font.MeasureString(Text).X), Texture.Height + font.MeasureString(Text).Y + MergeOffset.Y); break; } // Hier werden die Positionen für das Bild und den Text im verbunden Bild berechnet. switch(MergeSide) { case TextMergeSide.Right: fontPosition.X = Texture.Width + MergeOffset.X; break; case TextMergeSide.Left: texturePosition.X = font.MeasureString(Text).X + MergeOffset.X; break; case TextMergeSide.Top: texturePosition.Y = font.MeasureString(Text).Y + MergeOffset.Y; break; case TextMergeSide.Bottom: texturePosition.Y = Texture.Height + MergeOffset.Y; break; } } else dimension = new Vector2(font.MeasureString(Text).X, font.MeasureString(Text).Y); SourceRectangle = new Rectangle(0, 0, (int)dimension.X, (int)dimension.Y); origin = new Vector2(SourceRectangle.Width / 2, SourceRectangle.Height / 2); RenderTarget2D renderTarget = new RenderTarget2D(ScreenManager.Instance.GraphicsDevice, (int)dimension.X, (int)dimension.Y); // Einsetzen des neuen RenderTargets, damit wird den Text und das Bild verknüpfen können. ScreenManager.Instance.GraphicsDevice.SetRenderTarget(renderTarget); ScreenManager.Instance.GraphicsDevice.Clear(Color.Transparent); ScreenManager.Instance.SpriteBatch.Begin(); // Malen. if(Texture != null) ScreenManager.Instance.SpriteBatch.Draw(Texture, texturePosition, Color.White); ScreenManager.Instance.SpriteBatch.DrawString(font, Text, fontPosition, Color.White); ScreenManager.Instance.SpriteBatch.End(); // Setzen des neu gemalten Bildes auf die Texture. Texture = renderTarget; // Zurücksetzen des Rendertargets. ScreenManager.Instance.GraphicsDevice.SetRenderTarget(null); // Aktivieren des Basiskonstruktors. Dafür wird der Pfad kurzzeitig herausgenommen, weil sonst das Bild ohne Text // geladen werden würde. String path = Path; Path = String.Empty; base.LoadContent(body); Path = path; } }