예제 #1
0
        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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        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);
        }
예제 #4
0
 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);
 }
예제 #7
0
 public PathEditor(AABBTree <Entity> paths)
 {
     _paths = paths;
 }