Пример #1
0
        public void HighLevelSectorAdjustedRecalculate(MultiLevelSector sector)
        {
            WorldArea area = Manager.WorldData.WorldAreas[sector.WorldAreaIndex];

            MultiLevelSectorManager.RemoveAllConnectionsWithinSector(sector);
            ReCalculateDistancesHigherSectorNodes(sector, area);

            // visual
            sector.SearchConnections();
        }
Пример #2
0
        private void RemoveWorldAreaNodes(IntVector3 key)
        {
            WorldArea           area          = WorldData.WorldAreas[key.X];
            List <AbstractNode> abstractNodes = new List <AbstractNode>(area.SectorGrid[0][key.Z].WorldAreaNodes.Keys);

            foreach (var abstractNode in abstractNodes)
            {
                if (area.SectorGrid[0][key.Z].WorldAreaNodes[abstractNode] == key.Y)
                {
                    List <AbstractNode> abstractNodes2 = null;
                    WorldArea           otherArea      = WorldData.WorldAreas[key.Y];
                    MultiLevelSector    otherSector    =
                        otherArea.SectorGrid[0][abstractNode.NodeConnectionToOtherSector.TileConnection.SectorIndex];

                    // remove in other connected sector first
                    WorldData.MultiLevelSectorManager.RemoveAbstractNode(0, abstractNode.NodeConnectionToOtherSector);
                    otherSector.WorldAreaNodes.Remove(abstractNode.NodeConnectionToOtherSector);

                    // visual
                    otherSector.SearchConnections();

                    if (WorldData.Pathfinder.maxLevelAmount > 1)
                    {
                        abstractNodes2 = new List <AbstractNode>(WorldData.MultiLevelSectorManager
                                                                 .GetHigherSectorFromLower(1, otherSector, otherArea).WorldAreaNodes.Keys);
                        foreach (var t in abstractNodes2)
                        {
                            var worldAreaNode = t;
                            if (worldAreaNode.NodeConnectionToOtherSector.WorldAreaIndex == area.Index &&
                                worldAreaNode.TileConnection.SectorIndex == abstractNode.NodeConnectionToOtherSector
                                .TileConnection
                                .SectorIndex)     // if this node connects with other, and in the right lower sector
                            {
                                WorldData.MultiLevelSectorManager.RemoveAbstractNode(1, worldAreaNode);
                                otherArea.SectorGrid[1][worldAreaNode.Sector].WorldAreaNodes.Remove(worldAreaNode);

                                // visual
                                otherArea.SectorGrid[1][worldAreaNode.Sector].SearchConnections();
                            }
                        }
                    }

                    WorldData.MultiLevelSectorManager.RemoveAbstractNode(0, abstractNode);
                    area.SectorGrid[0][key.Z].WorldAreaNodes.Remove(abstractNode);

                    // visual
                    area.SectorGrid[0][key.Z].SearchConnections();

                    if (WorldData.Pathfinder.maxLevelAmount > 1)
                    {
                        if (abstractNodes2 != null)
                        {
                            abstractNodes2.Clear();
                            abstractNodes2.AddRange(WorldData.MultiLevelSectorManager
                                                    .GetHigherSectorFromLower(1, area.SectorGrid[0][key.Z], area).WorldAreaNodes.Keys);

                            foreach (var worldAreaNode in abstractNodes2)
                            {
                                if (worldAreaNode.NodeConnectionToOtherSector.WorldAreaIndex == key.Y &&
                                    worldAreaNode.TileConnection.SectorIndex == key.Z
                                    ) // if this node connects with other, and in the right lower sector
                                {
                                    WorldData.MultiLevelSectorManager.RemoveAbstractNode(1, worldAreaNode);

                                    Debug.Log("area.sectorGrid  " + area.SectorGrid.Length + "   " +
                                              worldAreaNode.Sector);
                                    area.SectorGrid[1][worldAreaNode.Sector].WorldAreaNodes.Remove(worldAreaNode);

                                    // visual
                                    area.SectorGrid[1][worldAreaNode.Sector].SearchConnections();
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #3
0
        private void RemoveWorldAreaNodes(IntVector3 key)
        {
            WorldArea           area          = worldData.worldAreas[key.x];
            List <AbstractNode> abstractNodes = new List <AbstractNode>(area.sectorGrid[0][key.z].worldAreaNodes.Keys);
            AbstractNode        abstractNode;

            for (int i = 0; i < abstractNodes.Count; i++)
            {
                abstractNode = abstractNodes[i];
                if (area.sectorGrid[0][key.z].worldAreaNodes[abstractNode] == key.y)
                {
                    List <AbstractNode> abstractNodes2 = null;
                    WorldArea           otherArea      = worldData.worldAreas[key.y];
                    MultiLevelSector    otherSector    = otherArea.sectorGrid[0][abstractNode.nodeConnectionToOtherSector.tileConnection.sectorIndex];

                    // remove in other connected sector first
                    worldData.multiLevelSectorManager.RemoveAbstractNode(0, abstractNode.nodeConnectionToOtherSector);
                    otherSector.worldAreaNodes.Remove(abstractNode.nodeConnectionToOtherSector);

                    // visual
                    otherSector.SearchConnections();

                    if (worldData.pathfinder.maxLevelAmount > 1)
                    {
                        abstractNodes2 = new List <AbstractNode>(worldData.multiLevelSectorManager.GetHigherSectorFromLower(1, otherSector, otherArea).worldAreaNodes.Keys);
                        AbstractNode worldAreaNode;
                        for (int j = 0; j < abstractNodes2.Count; j++)
                        {
                            worldAreaNode = abstractNodes2[j];
                            if (worldAreaNode.nodeConnectionToOtherSector.worldAreaIndex == area.index && worldAreaNode.tileConnection.sectorIndex == abstractNode.nodeConnectionToOtherSector.tileConnection.sectorIndex) // if this node connects with other, and in the right lower sector
                            {
                                worldData.multiLevelSectorManager.RemoveAbstractNode(1, worldAreaNode);
                                otherArea.sectorGrid[1][worldAreaNode.sector].worldAreaNodes.Remove(worldAreaNode);

                                // visual
                                otherArea.sectorGrid[1][worldAreaNode.sector].SearchConnections();
                            }
                        }
                    }


                    worldData.multiLevelSectorManager.RemoveAbstractNode(0, abstractNode);
                    area.sectorGrid[0][key.z].worldAreaNodes.Remove(abstractNode);

                    // visual
                    area.sectorGrid[0][key.z].SearchConnections();

                    if (worldData.pathfinder.maxLevelAmount > 1)
                    {
                        abstractNodes2.Clear();
                        abstractNodes2.AddRange(worldData.multiLevelSectorManager.GetHigherSectorFromLower(1, area.sectorGrid[0][key.z], area).worldAreaNodes.Keys);

                        AbstractNode worldAreaNode;
                        for (int j = 0; j < abstractNodes2.Count; j++)
                        {
                            worldAreaNode = abstractNodes2[j];
                            if (worldAreaNode.nodeConnectionToOtherSector.worldAreaIndex == key.y && worldAreaNode.tileConnection.sectorIndex == key.z) // if this node connects with other, and in the right lower sector
                            {
                                worldData.multiLevelSectorManager.RemoveAbstractNode(1, worldAreaNode);

                                Debug.Log("area.sectorGrid  " + area.sectorGrid.Length + "   " + worldAreaNode.sector);
                                area.sectorGrid[1][worldAreaNode.sector].worldAreaNodes.Remove(worldAreaNode);

                                // visual
                                area.sectorGrid[1][worldAreaNode.sector].SearchConnections();
                            }
                        }
                    }
                }
            }
        }