97 lines
2.0 KiB
C#
97 lines
2.0 KiB
C#
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<GameObject> _doors = new();
|
|
|
|
private readonly SyncHashSet<RoomDoor> _disabledDoors = new();
|
|
|
|
private void Start()
|
|
{
|
|
_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);
|
|
}
|
|
}
|
|
}
|
|
} |