diff --git a/Assets/Scripts/Characters/PersonController/PersonController.cs b/Assets/Scripts/Characters/PersonController/PersonController.cs index dfc0b77..b6e47d3 100644 --- a/Assets/Scripts/Characters/PersonController/PersonController.cs +++ b/Assets/Scripts/Characters/PersonController/PersonController.cs @@ -134,7 +134,6 @@ namespace StarterAssets { RotationSpeed = PlayerPrefs.GetFloat("Sensitivity"); _controller = GetComponent(); - this.OnDamage += OnTakeDamage; _gotEnergyClip = Resources.Load("Audio/CharacterSounds/GetEnergy"); @@ -376,8 +375,7 @@ namespace StarterAssets _parent = transf; } - // server - void OnTakeDamage(Pawn self) + public override void TakeDamage() { _animator.SetTrigger("damage"); InstantStaminaReduction(shootDepletion * 0.7f); diff --git a/Assets/Scripts/Level/BuildModules/ProceduralPrefabs.cs b/Assets/Scripts/Level/BuildModules/ProceduralPrefabs.cs index 05feda8..442f51d 100644 --- a/Assets/Scripts/Level/BuildModules/ProceduralPrefabs.cs +++ b/Assets/Scripts/Level/BuildModules/ProceduralPrefabs.cs @@ -153,6 +153,7 @@ namespace Level.BuildModules Room selectedRoom = _spawnedRooms[p.x + selectedDirection.x, p.y + selectedDirection.y]; DisableDoors(room, selectedRoom, selectedDirection); + room.Finish(); return true; } @@ -175,16 +176,16 @@ namespace Level.BuildModules switch (rand) { case 1 : - room.DoorU.SetActive(false); - selectedRoom.DoorD.SetActive(false); + room.DisableDoor(RoomDoor.U); + selectedRoom.DisableDoor(RoomDoor.D); break; case 2 : - room.DoorU2.SetActive(false); - selectedRoom.DoorD2.SetActive(false); + room.DisableDoor(RoomDoor.U2); + selectedRoom.DisableDoor(RoomDoor.D2); break; case 3 : - room.DoorU3.SetActive(false); - selectedRoom.DoorD3.SetActive(false); + room.DisableDoor(RoomDoor.U3); + selectedRoom.DisableDoor(RoomDoor.D3); break; } @@ -194,16 +195,16 @@ namespace Level.BuildModules switch (rand) { case 1 : - room.DoorD.SetActive(false); - selectedRoom.DoorU.SetActive(false); + room.DisableDoor(RoomDoor.D); + selectedRoom.DisableDoor(RoomDoor.U); break; case 2 : - room.DoorD2.SetActive(false); - selectedRoom.DoorU2.SetActive(false); + room.DisableDoor(RoomDoor.D2); + selectedRoom.DisableDoor(RoomDoor.U2); break; case 3 : - room.DoorD3.SetActive(false); - selectedRoom.DoorU3.SetActive(false); + room.DisableDoor(RoomDoor.D3); + selectedRoom.DisableDoor(RoomDoor.U3); break; } @@ -213,16 +214,16 @@ namespace Level.BuildModules switch (rand) { case 1 : - room.DoorR.SetActive(false); - selectedRoom.DoorL.SetActive(false); + room.DisableDoor(RoomDoor.R); + selectedRoom.DisableDoor(RoomDoor.L); break; case 2 : - room.DoorR2.SetActive(false); - selectedRoom.DoorL2.SetActive(false); + room.DisableDoor(RoomDoor.R2); + selectedRoom.DisableDoor(RoomDoor.L2); break; case 3 : - room.DoorR3.SetActive(false); - selectedRoom.DoorL3.SetActive(false); + room.DisableDoor(RoomDoor.R3); + selectedRoom.DisableDoor(RoomDoor.L3); break; } } @@ -231,16 +232,16 @@ namespace Level.BuildModules switch (rand) { case 1 : - room.DoorL.SetActive(false); - selectedRoom.DoorR.SetActive(false); + room.DisableDoor(RoomDoor.L); + selectedRoom.DisableDoor(RoomDoor.R); break; case 2 : - room.DoorL2.SetActive(false); - selectedRoom.DoorR2.SetActive(false); + room.DisableDoor(RoomDoor.L2); + selectedRoom.DisableDoor(RoomDoor.R2); break; case 3 : - room.DoorL3.SetActive(false); - selectedRoom.DoorR3.SetActive(false); + room.DisableDoor(RoomDoor.L3); + selectedRoom.DisableDoor(RoomDoor.R3); break; } diff --git a/Assets/Scripts/Level/BuildModules/Room.cs b/Assets/Scripts/Level/BuildModules/Room.cs index 96681b4..a5a57e5 100644 --- a/Assets/Scripts/Level/BuildModules/Room.cs +++ b/Assets/Scripts/Level/BuildModules/Room.cs @@ -1,8 +1,28 @@ +using System; +using System.Collections.Generic; +using Mirror; using UnityEngine; namespace Level.BuildModules { - public class Room : MonoBehaviour + + 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; @@ -20,19 +40,57 @@ namespace Level.BuildModules public GameObject DoorR3; public int roomSize = 6; - public void RotateRandomly() + private List _doors = new(); + + private readonly SyncHashSet _disabledDoors = new(); + + private void Start() { - int count = Random.Range(0, 4); - - for (int i = 0; i < count; i++) + _doors.AddRange(new List { - transform.Rotate(0, 90, 0); + DoorU, DoorD, DoorL, DoorR, + DoorU2, DoorD2, DoorL2, DoorR2, + DoorU3, DoorD3, DoorL3, DoorR3 + }); + + + } - GameObject tmp = DoorL; - DoorL = DoorD; - DoorD = DoorR; - DoorR = DoorU; - DoorU = tmp; + 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); } } }