IEnumerator FinishedRoom(RoomNode curNode, RoomInstance curRoomInstance) { yield return(new WaitUntil(() => curRoomInstance.getToDestination != MydirectionData.DirectionEnum.Notready)); var curDir = curRoomInstance.getToDestination; int x = curNode.gridX, y = curNode.gridY; MydirectionData.SetDirection(curDir, ref x, ref y); if (x < rMax * 2 && x >= 0 && y >= 0 && y < cMax * 2 && _roomDataGenerator.rooms[x, y] != null) { lastRoom = curNode; var nextNode = _roomDataGenerator.rooms[x, y]; if (true) { curRoomInstance.isCurrent = false; NextRoom(nextNode); } } else { StartCoroutine(FinishedRoom(currentRoom, curRoomInstance)); } }
protected virtual void OnGoalTrigger(GameObject trigger, GameObject other) { Debug.Log("Goal"); var gridNode = grid.NodeFromWorldPoint(trigger.transform.position); for (int i = 0; i < 4; i++) { if (gridNode == GetToTarget[i]) { roomInstance.getToDestination = MydirectionData.SquareVertToDir((MydirectionData.SquareVertEnum)i); break; } } }
///////////////////////////////// Maze Doors Genearator//////////////////////////////////// public override void SetDoors() { GetToTarget = new MazeCellNode[5]; if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Down) != MydirectionData.DirectionEnum.Notready) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Down)] = cells[0, 0].node; } if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Left) != MydirectionData.DirectionEnum.Notready) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Left)] = cells[0, cMax - 1].node; } if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Right) != MydirectionData.DirectionEnum.Notready) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Right)] = cells[rMax - 1, 0].node; } if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Up) != MydirectionData.DirectionEnum.Notready) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Up)] = cells[rMax - 1, cMax - 1].node; } GetToTarget[(int)MydirectionData.SquareVertEnum.Middle] = cells[(int)rMax / 2, (int)cMax / 2].node; }
///////////////////////////////// Maze Doors Genearator//////////////////////////////////// public override void SetDoors() { GetToTarget = new GridNode[5]; if ((roomInstance.roomDoors & (MydirectionData.DirectionEnum.Left | MydirectionData.DirectionEnum.Down)) != MydirectionData.DirectionEnum.Notready) { for (int i = 0; i < rMax; i++) { if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Down) != MydirectionData.DirectionEnum.Notready) { for (int j = 0; j < cMax; j++) { if (data[i, j] == 0) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Down)] = gridNodes[i, j]; break; } } } if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Left) != MydirectionData.DirectionEnum.Notready) { for (int j = cMax; j > 0; j--) { if (data[i, j - 1] == 0) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Left)] = gridNodes[i, j - 1]; break; } } } } } if ((roomInstance.roomDoors & (MydirectionData.DirectionEnum.Right | MydirectionData.DirectionEnum.Up)) != MydirectionData.DirectionEnum.Notready) { for (int i = rMax; i > 0; i--) { if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Right) != MydirectionData.DirectionEnum.Notready) { for (int j = 0; j < cMax; j++) { if (data[i - 1, j] == 0) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Right)] = gridNodes[i - 1, j]; break; } } } if ((roomInstance.roomDoors & MydirectionData.DirectionEnum.Up) != MydirectionData.DirectionEnum.Notready) { for (int j = cMax; j > 0; j--) { if (data[i - 1, j - 1] == 0) { GetToTarget[(int)MydirectionData.DirToSquareVert(MydirectionData.DirectionEnum.Up)] = gridNodes[i - 1, j - 1]; break; } } } } } for (int i = rMax / 2; i < rMax; i++) { for (int j = cMax / 2; j < cMax; j++) { for (int k = 0; k < 4; k++) { int x = MagicNumbers.FourDirArray[k] + i; int y = MagicNumbers.FourDirArray[k + 1] + j; if (data[x, y] == 0) { GetToTarget[(int)MydirectionData.SquareVertEnum.Middle] = gridNodes[x, y]; return; } } } } }