Exemple #1
0
 public void QueryAABB(ref AABB aabb, SpatialDatabaseCallback callback)
 {
     _callback = callback;
     _aabb     = aabb;
     _spatialDatabase.Query(ref aabb, _aabbCallback);
     _callback = null;
 }
Exemple #2
0
 public Space(ISpatialDatabase spatialDatabase)
 {
     _spatialDatabase   = spatialDatabase;
     _aabbCallback      = AABBCallback;
     _circleCallback    = CircleCallback;
     _addToListCallback = AddToList;
 }
Exemple #3
0
        public void QueryCircle(ref FixVec2 position, Fix radius, SpatialDatabaseCallback callback)
        {
            var aabb = new AABB(position, radius);

            _callback       = callback;
            _aabb           = aabb;
            _circlePosition = position;
            _circleRadius   = radius;
            _spatialDatabase.Query(ref aabb, _circleCallback);
            _callback = null;
        }
Exemple #4
0
        public void Query(ref AABB aabb, SpatialDatabaseCallback callback)
        {
            var l = (int)FixMath.Floor(aabb.L / CellSize);
            var b = (int)FixMath.Floor(aabb.B / CellSize);
            var r = (int)FixMath.Floor(aabb.R / CellSize);
            var t = (int)FixMath.Floor(aabb.T / CellSize);

            for (var i = b; i <= t; i++)
            {
                for (var j = l; j <= r; j++)
                {
                    EnumerateBodies(j, i, callback);
                }
            }

            _stamp++;
        }
Exemple #5
0
        private void EnumerateBodies(int x, int y, SpatialDatabaseCallback callback)
        {
            var hash = HashFunction(x, y);

            for (var tmp = _cells[hash]; tmp != null; tmp = tmp.Next)
            {
                // TODO check for same entity
                var shape = tmp.Shape;

                if (shape.Stamp == _stamp)
                {
                    continue;
                }

                callback(tmp.Entity, shape);
                shape.Stamp = _stamp;
            }
        }