private void queryBroadphaseAABB(CollisionQuery query, List <Collision> collisions) { if (query.flag.CheckFlags(Physics.QUERY_WORLD)) { var screenAABB = query.aabb; var wx0 = Math.Floor(screenAABB.X0 / tileSize); var wx1 = Math.Ceiling(screenAABB.X1 / tileSize); var wy0 = Math.Floor(screenAABB.Y0 / tileSize); var wy1 = Math.Ceiling(screenAABB.Y1 / tileSize); var minX = (int)Math.Max(0, wx0); var maxX = (int)Math.Min(_width.Number, wx1); var minY = (int)Math.Max(0, wy0); var maxY = (int)Math.Min(_height.Number, wy1); var hs = tileSize * Game.WORLD_SCALE * Vector2.One; //var aabb = AxisAlignedBox.FromRect(Vector2.Zero, hs); var mtv = MinimumTranslationVector.Zero; for (var y = minY; y < maxY; y++) { for (var x = minX; x < maxX; x++) { if (tiles[x, y].tileType != MapTileType.Room) { var aabb = AxisAlignedBox.FromDimensions(new Vector2(x, y) * tileSize * Game.WORLD_SCALE + hs / 2, hs); if (query.aabb.Intersects(aabb)) { collisions.Add(new Collision(Physics.QUERY_WORLD, gameObject, aabb)); } } } } } }
private void queryBroadphaseAABB(CollisionQuery query, List <Collision> hits) { if (query.flag.CheckFlags(flags) && !aabb.IsNull && !query.aabb.IsNull && query.aabb.Intersects(aabb) && query.gameObject != gameObject) { hits.Add(new Collision(flags, notifyObject ?? gameObject, aabb)); } }