using System.Collections.Generic;
using System.Diagnostics;
using QuadTrees.QTreePoint;
using System.Diagnostics;
public static void Main(string[] args)
Stopwatch stopWatch = new Stopwatch();
QuadTreePoint<Character> qtree = new QuadTreePoint<Character>(new Rectangle((int)(25000.0f * 128.0f), (int)(15000.0f * 128.0f), (int)(2000.0f * 128.0f), (int)(2000.0f * 128.0f)));
TimeSpan ts = stopWatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
Console.WriteLine("RunTime " + elapsedTime);
Queue<Character> charac = new Queue<Character>();
for(int j = 0; j < 100000; j++)
Character test = new Character($"Dallasdevin{j}", GetRandomNumberInRangeX(), GetRandomNumberInRangeZ());
foreach (Character c in charac)
elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
Console.WriteLine("RunTime " + elapsedTime);
Character stuff = new Character("TargetAcquired", (int)(25700.0f * 128.0f), (int)(15700.0f * 128.0f));
Console.WriteLine($"Name: {stuff.myName} X: {stuff.x} Z: {stuff.z}");
var list = new List<Character>();
qtree.GetObjects(stuff.createRectangle(), list);
elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
Console.WriteLine("RunTime " + elapsedTime);
Console.WriteLine($"Players near {stuff.myName}: {list.Count()}");
Console.Write($"Characters near point:");
foreach(Character c in list)
Console.Write($" {c.myName}");
Console.WriteLine(" present in list.");
qtree.TreeStats(out int i, out int l);
Console.WriteLine($"Internal Nodes: {i} Leaf Nodes: {l}");
var list1 = qtree.GetAllObjects();
Console.WriteLine($"Characters present in quadtree: {list1.Count()}");
static public void Reset(Character[] MyList)
for(int i = 0; i < MyList.Count(); i++)
public class Character : IPointQuadStorable
public Character(string name, int X, int Z)
public Rectangle createRectangle()
Console.WriteLine($"Rectangle parameters: Top Left X: {(int)(x - (25 * 128))} Top Left Z: {(int)(z - (25 * 128))} Width: {50 * 128}");
return new Rectangle((int)(x - (200 * 128)), (int)(z - (200 * 128)), 400 * 128, 400 * 128);
public static int GetRandomNumberInRangeZ()
return new Random().Next((15000 * 128), (17000 * 128));
public static int GetRandomNumberInRangeX()
return new Random().Next((25000 * 128), (27000 * 128));