예제 #1
0
    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();
    }
예제 #2
0
 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));
     }
 }