/// <summary> /// Führt die Kollisionsbehebung zwischen Entities aus. /// </summary> /// <param name="entity">eine Entity</param> /// <param name="counter">des Objekts, aktuelle Stelle in der Liste</param> private void collisionWithEntities(Entity entity, int counter) { for(int c = 0; c < scene.Entities.Count; c++) { // Prüft sich nicht selbst if(c == counter) continue; Vector2 collisionResolving = scene.Entities[c].Shape.GetCollisionSolvingVector(entity.Shape); if(collisionResolving != Vector2.Zero) { Collision collision = new Collision(entity, scene.Entities[c], collisionResolving); if(!collisions.ContainsKey(collision.ID)) collisions.Add(collision.ID, collision); } } }
/// <summary> /// Führt die Kollisionsbehebung zwischen einer Entity und der Map aus. /// </summary> /// <param name="entity">eine Entity</param> private void collisionWithMap(Entity entity) { foreach(Layer layer in scene.Map.Layers) { if(layer.CollisionLevel != entity.Body.CollisionLevel) continue; foreach(Tile tile in layer.TileMap) { Vector2 collisionResolving = tile.Shape.GetCollisionSolvingVector(entity.Shape); if(collisionResolving != Vector2.Zero) { Collision collision = new Collision(entity, tile, collisionResolving); if(!collisions.ContainsKey(collision.ID)) collisions.Add(collision.ID, collision); } } } }