public void BuildWallTo(EMazeDirection dir) { RemoveConnection(dir); neighbours[dir].RemoveConnection(MazeAlgorithm.InvertDirection(dir)); }
public void ConnectionTo(EMazeDirection dir) { AddConnection(dir); neighbours[dir].AddConnection(MazeAlgorithm.InvertDirection(dir)); }
public void AddConnection(EMazeDirection dir) { connections.Add(dir); }
public bool IsConnectedTo(EMazeDirection dir) { return(connections.Contains(dir)); }
public EMazeDirection GenRandomNeighbourDirection(ESelectCondition condition = ESelectCondition.None, List <EMazeDirection> direction_filter = null) { List <EMazeDirection> candidate = new List <EMazeDirection>(); foreach (var key in neighbours.Keys) { //Debug:注意要判断target是不是visited,而不是自己! IMazeCell target = neighbours[key]; switch (condition) { case ESelectCondition.None: candidate.Add(key); break; case ESelectCondition.NoConnected: if (IsConnectedTo(key) == false) { candidate.Add(key); } break; case ESelectCondition.NoVisited: if (target.ConnectionCount == 0) { candidate.Add(key); } break; case ESelectCondition.Connected: if (IsConnectedTo(key) == true) { candidate.Add(key); } break; case ESelectCondition.Visited: if (target.ConnectionCount > 0) { candidate.Add(key); } break; case ESelectCondition.VisitedConnected: if (IsConnectedTo(key) == true && target.ConnectionCount > 0) { candidate.Add(key); } break; } } //追加Filter 使得 随机筛选只能从指定方向中筛选。 if (direction_filter != null && candidate.Count > 0) { for (int i = candidate.Count - 1; i >= 0; i--) { if (direction_filter.Contains(candidate[i]) == false) { candidate.Remove(candidate[i]); } } } //albour-broder算法需要,因此,得,保存这个值 random_select_direction = candidate.Count == 0 ? EMazeDirection.DirectionCount : candidate[Random.Range(0, candidate.Count)]; return(random_select_direction); }