public void Step() { if (candidates.Count == 0) { Finished = true; return; } var candidateIndex = GetNextIndex(); var candidate = candidates[candidateIndex]; visited[candidate.x, candidate.y] = true; OnVisit?.Invoke(candidate); foreach (var delta in deltas) { var pos = candidate + delta; if (pos.x < 0 || pos.x >= size.x) { continue; } if (pos.y < 0 || pos.y >= size.y) { continue; } if (visited[pos.x, pos.y]) { continue; } neighbours.Add(pos); } if (neighbours.Count == 0) { candidates.RemoveAt(candidateIndex); OnDeadEnd?.Invoke(candidate); } else { var neighbour = neighbours[Random.Range(0, neighbours.Count)]; candidates.Add(neighbour); Maze.Carve(candidate, neighbour); OnCarvePassage?.Invoke(candidate, neighbour); } neighbours.Clear(); }
static int SetRoleDeadEndCallBack(IntPtr L) { try { ToLua.CheckArgsCount(L, 2); CBattleRole obj = (CBattleRole)ToLua.CheckObject <CBattleRole>(L, 1); OnDeadEnd arg0 = (OnDeadEnd)ToLua.CheckDelegate <OnDeadEnd>(L, 2); obj.SetRoleDeadEndCallBack(arg0); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }