huh? RoomDoor (румдур)

This commit is contained in:
Nikita Kruglickiy 2024-03-20 18:57:25 +03:00
parent abe08da6fa
commit 20c6b1dad3
3 changed files with 95 additions and 38 deletions

View File

@ -134,7 +134,6 @@ namespace StarterAssets
{
RotationSpeed = PlayerPrefs.GetFloat("Sensitivity");
_controller = GetComponent<CharacterController>();
this.OnDamage += OnTakeDamage;
_gotEnergyClip = Resources.Load<AudioClip>("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);

View File

@ -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;
}

View File

@ -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<GameObject> _doors = new();
private readonly SyncHashSet<RoomDoor> _disabledDoors = new();
private void Start()
{
int count = Random.Range(0, 4);
for (int i = 0; i < count; i++)
_doors.AddRange(new List<GameObject>
{
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<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);
}
}
}