using System; using System.Collections.Generic; using Mirror; using UnityEngine; namespace Level.BuildModules { public enum RoomDoor : byte { U, D, L, R, U2, D2, L2, R2, U3, D3, L3, R3 } public class Room : NetworkBehaviour { public GameObject DoorU; public GameObject DoorD; public GameObject DoorL; public GameObject DoorR; public GameObject DoorU2; public GameObject DoorD2; public GameObject DoorL2; public GameObject DoorR2; public GameObject DoorU3; public GameObject DoorD3; public GameObject DoorL3; public GameObject DoorR3; public int roomSize = 6; private List _doors = new(); private readonly SyncHashSet _disabledDoors = new(); private void Start() { _doors.AddRange(new List { DoorU, DoorD, DoorL, DoorR, DoorU2, DoorD2, DoorL2, DoorR2, DoorU3, DoorD3, DoorL3, DoorR3 }); } public override void OnStartClient() { _disabledDoors.Callback += OnDisabledDoorsChanged; UpdateDoors(); } void OnDisabledDoorsChanged(SyncHashSet.Operation op, RoomDoor door) { UpdateDoors(); } [Server] public void Finish() { RpcUpdateDoors(); } [Server] public void DisableDoor(RoomDoor door) { _disabledDoors.Add(door); } [ClientRpc] void RpcUpdateDoors() { UpdateDoors(); } [Client] void UpdateDoors() { foreach (var door in _disabledDoors) { _doors[(int)door].SetActive(false); } } } }