public void HighLevelSectorAdjustedRecalculate(MultiLevelSector sector) { WorldArea area = Manager.WorldData.WorldAreas[sector.WorldAreaIndex]; MultiLevelSectorManager.RemoveAllConnectionsWithinSector(sector); ReCalculateDistancesHigherSectorNodes(sector, area); // visual sector.SearchConnections(); }
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(); } } } } } } }
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(); } } } } } }