/// <summary>
        /// Konstruktor für eine Entity und ein Tile.
        /// </summary>
        /// <param name="entity">eine Entity</param>
        /// <param name="tile">ein Tile</param>
        /// <param name="resolving">Kollisionsausflösungsvektor</param>
        public Collision(Entity entity, Tile tile, Vector2 resolving)
        {
            FirstShape = entity.Shape;
            FirstBody = entity.Body;
            firstPosition = entity.Body.Position;
            SecondShape = tile.Shape;
            SecondBody = tile.Body;
            secondPosition = tile.Body.Position;
            Penetration = resolving.Length();
            ResolvingNormal = resolving;

            ID = entity.IDString + "-" + tile.IDString;
        }
示例#2
0
 /// <summary>
 /// Lädt die Standarddaten in das Shape. Mit Tile als Grundlage.
 /// </summary>
 /// <param name="tile"></param>
 public virtual void LoadContent(Tile tile)
 {
     tile.OnPositionChange += delegate
     { position = tile.Body.Position; };
     position = tile.Body.Position;
     Type = ShapeTypeExtension.GetShapeType(this);
 }
示例#3
0
        public void LoadContent()
        {
            TileSheet.LoadContent();
            TileOrigin = new Vector2(TileDimensions.X / 2, TileDimensions.Y * Scale / 2);
            TileScaledOrigin = new Vector2(TileDimensions.X * Scale / 2, TileDimensions.Y * Scale / 2);

            Vector2 position = -Vector2.One;
            int maxX = 0;
            // Gehe durch den gesamten String durch, welcher das Layer darstellt
            foreach (string row in TileMapString.Rows)
            {
                position.Y++;

                // Gehe durch die einzelne Zeile
                string[] split = row.Split(']');
                foreach (string s in split)
                {
                    if (s != String.Empty)
                    {
                        position.X++;
                        // Nur abarbeiten, wenn es kein leere Tile ist
                        if (!s.Contains("x"))
                        {
                            Tile newTile = new Tile();

                            // Auslesen, welches Tile es aus dem Tilesheet ist
                            String str = s.Replace("[", "");
                            int valueX = int.Parse(str.Substring(0, str.IndexOf(':')));
                            int valueY = int.Parse(str.Substring(str.IndexOf(':') + 1));

                            // Auslesen ob das Tile eine Rotation besitzt
                            Tile.TileRotation rotation;
                            if (TileMapString.Rotation90Tiles.Contains("[" + position.X.ToString() + ":" + position.Y.ToString() + "]"))
                                rotation = Tile.TileRotation.Clockwise90;
                            else if (TileMapString.Rotation180Tiles.Contains("[" + position.X.ToString() + ":" + position.Y.ToString() + "]"))
                                rotation = Tile.TileRotation.Clockwise180;
                            else if (TileMapString.Rotation270Tiles.Contains("[" + position.X.ToString() + ":" + position.Y.ToString() + "]"))
                                rotation = Tile.TileRotation.Clockwise270;
                            else
                                rotation = 0.0f;

                            newTile.LoadContent(this, new Vector2(valueX, valueY), position, rotation);
                            TileMap.Add(newTile);
                        }
                    }
                }
                maxX = maxX < position.X ? (int)position.X : maxX;
                position.X = -1;
            }
            Size = new Vector2(maxX, TileMap.Count) * TileDimensions;
        }
示例#4
0
 /// <summary>
 /// Lädt die Standarddaten in das Shape. Mit Tile als Grundlage.
 /// </summary>
 /// <param name="tile"></param>
 /// <param name="width">die Breite</param>
 /// <param name="height">die Höhe</param>
 /// <param name="scale">die Skalierung</param>
 /// <param name="rotation">die Rotation</param>
 public void LoadConent(Tile tile, float width, float height, float scale, float rotation)
 {
     Rotation = rotation;
     base.LoadContent(tile, width, height, scale);
 }
 /// <summary>
 /// Lädt die Standarddaten in das Shape. Mit Tile als Grundlage.
 /// </summary>
 /// <param name="tile"></param>
 /// <param name="width">die Breite</param>
 /// <param name="height">die Höhe</param>
 /// <param name="scale">die Skalierung</param>
 public void LoadContent(Tile tile, float width, float height, float scale)
 {
     Size = new Vector2(width, height);
     this.scale = scale;
     base.LoadContent(tile);
 }
 /// <summary>
 /// Lädt die Standarddaten in das Shape. Mit Tile als Grundlage.
 /// </summary>
 /// <param name="tile"></param>
 /// <param name="radius">der Radius</param>
 /// <param name="scale">die Skalierung</param>
 public void LoadContent(Tile tile, float radius, float scale)
 {
     Radius = radius;
     this.scale = scale;
     base.LoadContent(tile);
 }
 public void Draw(SpriteBatch spriteBatch, Vector2 origin, Vector2 scaledOrigin, float scale, Tile tile)
 {
     spriteBatch.Draw(Texture, tile.Body.Position + Offset, tile.TileSheetRectangle, Color * Alpha,
                      tile.Rotation.GetRotationValue(), origin, scale, SpriteEffects.None, 0.0f);
 }
示例#8
0
 /// <summary>
 /// Fügt ein Objekt dem Quadtree hinzu. Falls die Kapazität dadurch erschöpft wird, wird der Quadtree geteilt und die Objekte ihren
 /// zugehörigen Zweigen hinzugefügt.
 /// </summary>
 /// <param name="tile">das Object als Tile</param>
 public void Insert(Tile tile)
 {
     Insert(new Tuple<Body, Shape>(tile.Body, tile.Shape));
 }