private void CacheNeighbors() { _neighbors = new List <Region>(); foreach (int connection in _connections) { foreach (Region region in RegionConnectionManager.GetRegions(connection)) { if (region != this && !_neighbors.Contains(region)) { _neighbors.Add(region); } } } }
private void RecalculateConnections() { RegionConnectionManager.Remove(this); _connections = new HashSet <Connection>(); blackList = new HashSet <Vector2>(); foreach (Vector2 position in _ownedPositions) { for (int i = 0; i < _directions.Count; i++) { if (!_ownedPositions.Contains(position + _directions[i]) && IsValid(position + _directions[i])) { CreateConnection(position, _directions[i]); } } } RegionConnectionManager.Add(this); }
public static void SetDirty(Vector2 position) { position = position.ToCellPosition(); if (_dirtyCells.Contains(position) || !_regionPositions.ContainsKey(position)) { return; } Region region = _regionPositions[position]; RegionConnectionManager.Remove(region); _regions.Remove(region); foreach (Vector2 ownedPos in region.OwnedPositions) { _regionPositions.Remove(ownedPos); _dirtyCells.Add(ownedPos); } }
private static void ExecuteFullRegeneration() { foreach (Region region in _regions) { RegionConnectionManager.Remove(region); } _dirtyCells = new List <Vector2>(); _regionPositions = new Dictionary <Vector2, Region>(); _regions = new HashSet <Region>(); for (int x = 0; x < MapData.MAPSIZE; x++) { for (int y = 0; y < MapData.MAPSIZE; y++) { Vector2 pos = new Vector2(x, y); if (!Contains(pos) && IsValid(pos)) { Create(pos); } } } }
public static void Draw() { if (DebugData.RegionsDrawAllBounds) { foreach (Region region in _regions) { EG_Debug.DrawRect(region.Bounds, Color.white); } } if (DebugData.RegionsDrawSelected) { Vector2 mousePosInWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (Contains(mousePosInWorld)) { Region region = GetRegion(mousePosInWorld); EG_Debug.DrawText("----------SELECTED REGION----------\n" + region); foreach (int connection in region.Connections) { EG_Debug.DrawText(connection + ": " + RegionConnectionManager.GetRegions(connection).Count()); } foreach (Vector2 pos in region.OwnedPositions) { EG_Debug.DrawSquare(new Rect(pos, Vector2.one), DEBUG_SELECTED_REGION_COLOR); } if (DebugData.RegionsDrawEntities) { foreach (Entity entity in region.Entities) { EG_Debug.DrawRect(entity.Rect, DEBUG_REGION_ENTITY_COLOR); } } if (DebugData.RegionsDrawNeighbors) { foreach (Region neighbor in region.Neighbors) { foreach (Vector2 pos in neighbor.OwnedPositions) { EG_Debug.DrawSquare(new Rect(pos, Vector2.one), DEBUG_NEIGHBOR_REGION_COLOR); } } } if (DebugData.RegionsDrawEdges) { foreach (Region.Connection connection in region.Connections) { Vector2 pos = connection.Position; Vector2 size = new Vector2((connection.Normal.x == 0) ? 1 : connection.Normal.x * connection.Length, (connection.Normal.y == 0) ? 1 : connection.Normal.y * connection.Length); Rect rect = new Rect(pos, size); EG_Debug.DrawSquare(rect, DEBUG_REGION_EDGE_COLOR); EG_Debug.DrawRect(rect, Color.black); } } } } }