public void LocateNeighbours() { var db = new BruteForceProximityDatabase<object>(); Dictionary<object, Vector3> positionLookup = new Dictionary<object, Vector3>(); var x0y0z0 = CreateToken(db, new Vector3(0, 0, 0), positionLookup); var x1y0z0 = CreateToken(db, new Vector3(1, 0, 0), positionLookup); var x3y0z0 = CreateToken(db, new Vector3(3, 0, 0), positionLookup); var list = new List<object>(); x0y0z0.FindNeighbors(Vector3.Zero, 2, list); Assert.AreEqual(2, list.Count); Assert.AreEqual(new Vector3(0, 0, 0), positionLookup[list[0]]); Assert.AreEqual(new Vector3(1, 0, 0), positionLookup[list[1]]); //Check tokens handle being disposed twice x1y0z0.Dispose(); x1y0z0.Dispose(); //Check tokens handle being collected after being disposed GC.Collect(); GC.WaitForPendingFinalizers(); list.Clear(); x0y0z0.FindNeighbors(Vector3.Zero, 2, list); Assert.AreEqual(1, list.Count); Assert.AreEqual(new Vector3(0, 0, 0), positionLookup[list[0]]); }
private ITokenForProximityDatabase<object> CreateToken(BruteForceProximityDatabase<object> db, Vector3 position, Dictionary<object, Vector3> lookup) { var obj = new object(); lookup.Add(obj, position); var token = db.AllocateToken(obj); token.UpdateForNewPosition(position); return token; }
public void AllocateToken() { var db = new BruteForceProximityDatabase<object>(); var obj = new object(); var token = db.AllocateToken(obj); Assert.AreEqual(1, db.Count); token.UpdateForNewPosition(Vector3.Zero); }
void NextPD() { // save pointer to old PD ProximityDatabase oldPD = pd; // allocate new PD const int totalPD = 2; switch (cyclePD = (cyclePD + 1) % totalPD) { case 0: { Vector3 center = Vector3.Zero; float div = 20.0f; Vector3 divisions = new Vector3(div, 1.0f, div); float diameter = 80.0f; //XXX need better way to get this Vector3 dimensions = new Vector3(diameter, diameter, diameter); pd = new LocalityQueryProximityDatabase <IVehicle>(center, dimensions, divisions); break; } case 1: { pd = new BruteForceProximityDatabase <IVehicle>(); break; } } // switch each boid to new PD for (int i = 0; i < crowd.Count; i++) { crowd[i].NewPD(pd); } // delete old PD (if any) oldPD = null; }
// for purposes of demonstration, allow cycling through various // types of proximity databases. this routine is called when the // Demo user pushes a function key. public void NextPD() { // save pointer to old PD ProximityDatabase oldPD = pd; // allocate new PD const int totalPD = 2; switch (cyclePD = (cyclePD + 1) % totalPD) { case 0: { Vector3 center = Vector3.Zero; const float div = 10.0f; Vector3 divisions = new Vector3(div, div, div); float diameter = Boid.worldRadius * 1.1f * 2; Vector3 dimensions = new Vector3(diameter, diameter, diameter); pd = new LocalityQueryProximityDatabase <IVehicle>(center, dimensions, divisions); break; } case 1: { pd = new BruteForceProximityDatabase <IVehicle>(); break; } } // switch each boid to new PD for (int i = 0; i < flock.Count; i++) { flock[i].NewPD(pd); } // delete old PD (if any) oldPD = null; }
void NextPD() { // save pointer to old PD ProximityDatabase oldPD = pd; // allocate new PD const int totalPD = 2; switch (cyclePD = (cyclePD + 1) % totalPD) { case 0: { Vector3 center = Vector3.Zero; float div = 20.0f; Vector3 divisions = new Vector3(div, 1.0f, div); float diameter = 80.0f; //XXX need better way to get this Vector3 dimensions = new Vector3(diameter, diameter, diameter); pd = new LocalityQueryProximityDatabase<IVehicle>(center, dimensions, divisions); break; } case 1: { pd = new BruteForceProximityDatabase<IVehicle>(); break; } } // switch each boid to new PD for (int i = 0; i < crowd.Count; i++) crowd[i].NewPD(pd); // delete old PD (if any) oldPD = null; }
public void Construct() { var db = new BruteForceProximityDatabase<object>(); Assert.AreEqual(0, db.Count); }