2024-03-20 19:17:20 +03:00

94 lines
2.0 KiB
C#

using System.Collections.Generic;
using Mirror;
using UnityEngine;
namespace Level.BuildModules
{
public enum RoomDoor : byte
{
U = 0,
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<GameObject> _doors = new();
private readonly SyncHashSet<RoomDoor> _disabledDoors = new();
private void Awake()
{
_doors.AddRange(new List<GameObject>
{
DoorU, DoorD, DoorL, DoorR,
DoorU2, DoorD2, DoorL2, DoorR2,
DoorU3, DoorD3, DoorL3, DoorR3
});
}
public override void OnStartClient()
{
_disabledDoors.Callback += OnDisabledDoorsChanged;
UpdateDoors();
}
void OnDisabledDoorsChanged(SyncHashSet<RoomDoor>.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);
}
}
}
}