Exemplo n.º 1
0
 public void GetCollision(Character player)
 {
     CollisionColliders.Clear();
     var collisionLayers = Map.TileLayers.Where(layer => layer.Properties.ContainsKey("Collision") && layer.Properties.ContainsValue("true")).ToList();
     foreach (var layer in collisionLayers) {
         foreach (var tile in layer.Tiles) {
             if (tile.Id != 0) {
                 collisionHitbox = new Rectangle((tile.X * tileWidth), (tile.Y * tileHeight), tileWidth, tileHeight);
                 CollisionColliders.Add(collisionHitbox);
             }
         }
     }
     var boxLayer = Map.TileLayers.Where(layer => layer.Properties.ContainsKey("Box") && layer.Properties.ContainsValue("true")).ToList();
     foreach (var tile in boxLayer.SelectMany(layer => layer.Tiles.Where(x => x.Id != 0))) {
         collisionHitbox = new Rectangle((tile.X * tileWidth), (tile.Y * tileHeight), tileWidth, tileHeight);
         CollisionColliders.Add(collisionHitbox);
     }
     if (CollisionColliders.Count != 0) {
         foreach (var collision in CollisionColliders) {
             if (player.Hitbox.Intersects(collision)) {
                 var moduloX = player.Position.X % 32;
                 var moduloY = player.Position.Y % 32;
                 var vector = new Vector2(collision.X, collision.Y);
                 //If right of it
                 if (vector.X >= player.Position.X) {
                     if (player.RightCollide(collision)) {
                         if (moduloX >= 16) moduloX -= 32;
                         player.Position.X -= moduloX;
                     }
                 }
                 //if left of it
                 if (vector.X <= player.Position.X) {
                     if (player.LeftCollide(collision)) {
                         if (moduloX >= 16) moduloX -= 32;
                         player.Position.X -= moduloX;
                     }
                 }
                 //if above it
                 if (player.UpperCollide(collision))
                     if (vector.Y >= player.Position.Y - 32) {
                         if (moduloY >= 16) moduloY -= 32;
                         player.Position.Y -= moduloY;
                     }
                 //}
                 //if below it
                 if (player.LowerCollide(collision))
                     if (vector.Y <= player.Position.Y + 32) {
                         if (moduloY >= 16) moduloY -= 32;
                         player.Position.Y -= moduloY;
                     }
             }
         }
     }
 }