public Editor(World world, GraphicsDevice graphicsDevice) { _world = world; _aabbTree = _world.AABBTree; _entities = _world.Entities; _historyHandler = new HistoryHandler(null); _selectedEntities = new AABBTree <Entity>(); _selection = new RectEdit(); _edit = new RectEdit(); _ui = new IMGUI(); _pathEditor = new PathEditor(_world.Woods); WindowResize(graphicsDevice.Viewport.Width, graphicsDevice.Viewport.Height); }
/// <summary> /// Выполняет сканирование и обработку местности /// </summary> /// <param name="leftBottomPoint">Левая нижняя точка выбранной местности</param> /// <param name="rightTopPoint">Правая верхняя точка выбранной иестности</param> /// <param name="scanAccuracy"></param> /// <param name="callback">Уведомление о завершении операции</param> /// <param name="addToExistingMap">Добавить в уже существующую карту</param> public void ScanArea(Vector2 leftBottomPoint, Vector2 rightTopPoint, float scanAccuracy = MinScanAccuracy * 50f, OnOperationComplete callback = null, bool addToExistingMap = true) { if (!addToExistingMap) { //CellTree.Clear(); CellTree = new AABBTree <Cell>(new InsertStrategyArea <Cell>()); CellsFromGameobject.Clear(); } var scanAreaBounds = new AABB(leftBottomPoint, rightTopPoint); //for debug //scanAreaBounds = new AABB(leftBottomPoint/10f, rightTopPoint/10f); if (scanAccuracy > scanAreaBounds.width) { scanAccuracy = scanAreaBounds.width - MinScanAccuracy; } if (scanAccuracy > scanAreaBounds.height) { scanAccuracy = scanAreaBounds.height - MinScanAccuracy; } ScanArea(scanAreaBounds /*, hitsTree*/, scanAccuracy); //todo: scan in thread TaskFactory.Add( () => { //CellTree.Build(); //CellTree.Balance(); //foreach (var node in CellTree) //{ // //TaskFactory.Add(() => // //{ // addNeighbours(node); // //}); //} if (callback != null) { callback(); } }); Debug.Log(CellTree.Count); //Debug.Log(CellTree.Height); }
private static (double, double, double, double) GetRandomMesure(double diff) { var rotMat = Matrix2DExtension.GetRandomRotationMatrix(); var mesh1 = GetRandomMesh(NumberOfTriangles, rotMat, Vector2d.Zero); var mesh2 = GetRandomMesh(NumberOfTriangles, rotMat, rotMat * Vector2d.AxisX * (1 + diff)); var watch = StartNew(); AABBTree t1 = new AABBTree(mesh1), t2 = new AABBTree(mesh2); watch.Stop(); var AABBBuildTime = watch.ElapsedMilliseconds; var AABBCollisionAction = AABBTree.TestIntersect(t1, t2).Item2; watch = StartNew(); KAABBTree.KAABBTree kt1 = new KAABBTree.KAABBTree(mesh1), kt2 = new KAABBTree.KAABBTree(mesh2); watch.Stop(); var KAABBBuildTime = watch.ElapsedMilliseconds; var KAABBCollisionAction = KAABBTree.KAABBTree.TestIntersect(kt1, kt2).Item2; return(AABBBuildTime, AABBCollisionAction, KAABBBuildTime, KAABBCollisionAction); }
public HierarchicalTree( CollisionEngineParameters collisionEngineParameters) { this.collisionEngineParameters = collisionEngineParameters; this.hierarchicalTree = new AABBTree(1); }
protected override void Clean_internal() { AABBTreeCellTree = null; }
protected override void Init_internal() { AABBTreeCellTree = new AABBTree <Cell>(InsertStrategy, 0f); }
public PathEditor(AABBTree <Entity> paths) { _paths = paths; }