Пример #1
0
 /// <summary>
 /// Basiskonstruktor.
 /// </summary>
 public Tile()
 {
     Rotation = TileRotation.None;
     TileSheetRectangle = Rectangle.Empty;
     Shape = new AABBShape();
     Body = new Body();
     ID = IDManager.Instance.TileID;
 }
Пример #2
0
        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;
            }
        }