Exemple #1
0
        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));
     }
 }