Exemplo n.º 1
0
    private static GameObject SpawnRoom(RoomLoader.Room room, RoomInfo position, Transform parent, bool onServer)
    {
        GameObject spawnedRoom = RoomLoader.SpawnRoom(room, new Vector3(position.Position.x * 495, position.Position.y * 277, 0), onServer);

        spawnedRoom.GetComponent <Room>().Position = position.Position;
        if (NetworkManagerCustom.IsServer && SerializationManager.World != null &&
            SerializationManager.World.Objects[position.Position.x, position.Position.y] != null)
        {
            spawnedRoom.GetComponent <Room>().Initialized = true;
        }
        spawnedRoom.transform.parent = parent;
        List <GameObject> gates = Utils.GetComponentsRecursive <GateObject>(spawnedRoom).ConvertAll(x => x.gameObject);

        gates.ForEach(x =>
                      x.transform.Find("trigger").GetComponent <GateTrigger>().GetEventSystem <GateTrigger.EnterGateEvent>()
                      .SubcribeEvent(y => OnGateEnter(y.Player, y.Sender, false)));

        foreach (GameObject gateObject in gates)
        {
            Vector2Int localPosition = GateInfo.RoomObjectToLocalPosition(gateObject.transform.localPosition);
            if (gateObject.GetComponent <GateObject>().gateType == 0)
            {
                gateObject.GetComponent <GateObject>().Enable =
                    position.Gates.Exists(x => x.LocalPosition == localPosition);
            }
        }

        for (int x = 0; x < position.Size.x; x++)
        {
            for (int y = 0; y < position.Size.y; y++)
            {
                spawnedRooms[x + position.Position.x, y + position.Position.y] = spawnedRoom;
            }
        }
        spawnedRoom.SetActive(false);
        return(spawnedRoom);
    }
Exemplo n.º 2
0
    public static bool IsRoomValid(RoomLoader.Room room, RoomInfo position)
    {
        if (room != null && room.size == position.Size)
        {
            List <RoomObject> gatesObject = room.objects.Where(x => x.prefabName.Contains("Gate")).ToList();
            foreach (RoomObject gateObject in gatesObject)
            {
                Vector2Int localPosition = GateInfo.RoomObjectToLocalPosition(gateObject.coords);
                int        type          = int.Parse(gateObject.data[0]);
                if (type == 1 && !position.Gates.Exists(x => x.LocalPosition == localPosition))
                {
                    return(false);
                }
                if (type == 2 && position.Gates.Exists(x => x.LocalPosition == localPosition))
                {
                    return(false);
                }
            }

            return(true);
        }

        return(false);
    }
Exemplo n.º 3
0
 private void Start()
 {
     if (isServer)
     {
         NetworkManagerCustomGUI gui = GameObject.Find("Manager").GetComponent <NetworkManagerCustomGUI>();
         if (gui.StartArguments[0].Equals("new game"))
         {
             seedToGeneration = int.Parse(ServerEvents.singleton.SeedToGenerate);
             seedToSpawn      = int.Parse(ServerEvents.singleton.SeedToSpawn);
             GenerationInfo generation = GetGeneration(seedToGeneration == 0 ? rnd.Next() : seedToGeneration);
             seedToSpawn = seedToSpawn == 0 ? rnd.Next() : seedToSpawn;
             GenerationManager.SpawnGeneration(RoomLoader.loadedRooms, generation, seedToSpawn, false);
             MessageManager.GetGenServerMessage.SendToServer(new EmptyMessage());
             if (GameSettings.SettingVisualizeTestGeneration.Value)
             {
                 GenerationManager.VisualizeGeneration(generation);
             }
         }
         else if (gui.StartArguments[0].Equals("load game"))
         {
             SerializationManager.LoadWorld(gui.StartArguments[1]);
             GenerationInfo generation = GetGeneration(SerializationManager.World.Info.SeedToGenerate);
             GenerationManager.SpawnGeneration(RoomLoader.loadedRooms, generation, SerializationManager.World.Info.SeedToSpawn, false);
             MessageManager.GetGenServerMessage.SendToServer(new EmptyMessage());
             if (GameSettings.SettingVisualizeTestGeneration.Value)
             {
                 GenerationManager.VisualizeGeneration(generation);
             }
         }
         else if (gui.StartArguments[0].Equals("test mode"))
         {
             GenerationManager.SetCurrentRoom(RoomLoader.SpawnRoom(RoomLoader.loadedRooms.Find(x => x.fileName.Equals(GameSettings.SettingTestRoomName.Value)), Vector3.zero, false));
             GenerationManager.InitializeRoom(GenerationManager.currentRoom);
             GameObject player = Instantiate(LocalPlayer);
             Vector3    toPos  = Vector3.zero;
             Transform  parent = GenerationManager.currentRoom.transform.Find("Objects");
             for (int i = 0; i < parent.childCount; i++)
             {
                 if (parent.GetChild(i).name.Contains("playerPosition"))
                 {
                     toPos = parent.GetChild(i).position;
                 }
             }
             player.transform.position = toPos + new Vector3(18, 25);
             if (ServerEvents.singleton.ServerOnlyProfile != null)
             {
                 player.GetComponent <GameProfile>().Deserialize(ServerEvents.singleton.ServerOnlyProfile);
             }
             NetworkServer.AddPlayerForConnection(NetworkServer.connections[0], player, indexController++);
         }
         else if (gui.StartArguments[0].Equals("room editor"))
         {
             RoomLoader.Room room = RoomLoader.LoadRoom(Application.streamingAssetsPath + "/room.json", Encoding.UTF8);
             GenerationManager.SetCurrentRoom(RoomLoader.SpawnRoom(room, Vector3.zero, false));
             RoomLoader.loadedRooms.Add(room);
             GenerationManager.InitializeRoom(GenerationManager.currentRoom);
             string[] gateInfo = File.ReadAllLines(Application.streamingAssetsPath + "/gate.txt", Encoding.UTF8);
             GameObject.Find("startPosition").transform.position = new Vector3(int.Parse(gateInfo[0]), int.Parse(gateInfo[1]), -1f);
             doStartForce = bool.Parse(gateInfo[2]);
             GameObject player = Instantiate(LocalPlayer);
             player.transform.position = GameObject.Find("startPosition").transform.position;
             NetworkServer.AddPlayerForConnection(NetworkServer.connections[0], player, indexController++);
         }
     }
     else
     {
         MessageManager.GetGenServerMessage.SendToServer(new EmptyMessage());
     }
 }
Exemplo n.º 4
0
    public void CheckReservedRooms()
    {
        for (int i = 0; i < reservedRooms.Count; i++)
        {
            RoomLoader.Room roomObject = RoomLoader.loadedRooms.Find(x => x.fileName.Equals(reservedRooms[i].ReservedRoomName));
            if (roomObject == null)
            {
                Debug.LogWarning("Reserved room names: " + reservedRooms[i].ReservedRoomName + " not found");
                continue;
            }

            List <RoomObject> gateObjects = roomObject.objects.FindAll(x => x.prefabName.Contains("Gate"));
            if (gateObjects.Count % 2 == 1)
            {
                Debug.LogWarning("Gate count in room names: " + reservedRooms[i].ReservedRoomName + " is not even");
                continue;
            }

            reservedRooms[i].GenerateGates(rooms);
            Dictionary <GateInfo, int> gateTypes = new Dictionary <GateInfo, int>();
            foreach (RoomObject gateObject in gateObjects)
            {
                Vector3 coords = gateObject.coords;
                int     side   =
                    coords.y == 0 ? 0 :
                    (coords.y + 23) % 277 == 0 ? 1 :
                    coords.x == 0 ? 2 : 3;
                int        index = side == 0 || side == 1 ? ((int)coords.x - 214) / 495 : ((int)coords.y - 105) / 277;
                Vector2Int gateObjectLocation = new Vector2Int(side, index);
                GateInfo   currentGate        = reservedRooms[i].Gates.Find(x => x.LocalPosition == gateObjectLocation);
                gateTypes.Add(currentGate, int.Parse(gateObject.data[0]));
            }

            List <GateInfo> gates = gateTypes.Keys.ToList();
            List <GateInfo> toRemoveWithStartEnd    = new List <GateInfo>();
            List <GateInfo> toRemoveWithoutStartEnd = new List <GateInfo>();
            foreach (GateInfo gate in gates)
            {
                if (rooms[gate.RoomTo.x, gate.RoomTo.y] == null && gateTypes[gate] == 1)
                {
                    Vector2Int vec    = gate.GetScaledVector(reservedRooms[i].Size);
                    Vector2Int newVec = reservedRooms[i].Position + vec;
                    Rooms[newVec.x, newVec.y] = new RoomInfo(newVec);
                }
                else if (rooms[gate.RoomTo.x, gate.RoomTo.y] != null && gateTypes[gate] == 2)
                {
                    bool toStartOrEnd = IsGateToStartOrEnd(gate);
                    bool reserved     = IsGateToReserved(gate);
                    if (toStartOrEnd)
                    {
                        toRemoveWithStartEnd.Add(gate);
                    }
                    else if (!reserved)
                    {
                        toRemoveWithoutStartEnd.Add(gate);
                    }
                    else
                    {
                        reservedRooms[i].IsReserved       = false;
                        reservedRooms[i].ReservedRoomName = null;
                        reservedRooms.RemoveAt(i);
                        continue;
                    }
                }
            }

            if (toRemoveWithStartEnd.Count == 1)
            {
                reservedRooms[i].IsReserved       = false;
                reservedRooms[i].ReservedRoomName = null;
                reservedRooms.RemoveAt(i);
                continue;
            }
            if (toRemoveWithStartEnd.Count != 0)
            {
                toRemoveWithStartEnd.RemoveAt(0);
            }

            reservedRooms[i].Gates.RemoveAll(x => {
                bool removeWithoutStartEnd = toRemoveWithoutStartEnd.Contains(x);
                if (removeWithoutStartEnd)
                {
                    RemoveFromGateRecursive(x);
                }
                return(removeWithoutStartEnd || toRemoveWithStartEnd.Contains(x));
            });
        }
    }