/// <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; }
/// <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); }
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; }
/// <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); }
/// <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)); }