trouble-in-terror-town/Assets/Scripts/Player/NetworkCharacter/NetworkCharacterStateChanger.cs
Mikolaj 2bbacbea09 did some more work on networking and removed EOS in favor of LRM
did some more work on networking and removed EOS in favor of Light Reflective Mirror
2022-05-31 15:04:31 +02:00

125 lines
4.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TTTSC.Player.Character.Controller;
using TTTSC.Player.Character;
using Mirror;
namespace TTTSC.Player.NetworkCharacter
{
public class NetworkCharacterStateChanger : NetworkBehaviour
{
private NetworkIdentity _parentNetworkIdentity;
private NetworkIdentity _networkIdentity;
private NetworkPlayerGhostReffrenceHub _playerGhostReffrenceHub;
private PlayerInputReceiver _playerInputReceiver;
private NetworkCharacterStateMachine _networkCharacterStateMachine;
private TTTSC_NetworkManager _networkManager;
private bool _walkIsPerforming, _crouchIsHeld, _sprintIsPerforming;
private void Start()
{
// Get the player network manager, if unable to find network manager then print error to console
try
{
_networkManager = FindObjectOfType<TTTSC_NetworkManager>();
}
catch (System.Exception e)
{
Debug.LogError($"Error, can't find network manager: {e}");
}
// Get the player ghost reffrence hub, if unable to find ghost reffrence hub then print error to console
try
{
_playerGhostReffrenceHub = GetComponentInParent<NetworkPlayerGhostReffrenceHub>();
}
catch (System.Exception e)
{
Debug.LogError($"Error, can't find player ghost reffrence hub: {e}");
}
// Get the player input receiver, if unable to find input receiver then print error to console
try
{
_playerInputReceiver = _playerGhostReffrenceHub.playerInputReceiver;
}
catch (System.Exception e)
{
Debug.LogError($"Error, can't find player input receiver: {e}");
}
// try to get the network character state machine, if unable to find network character state machine print error to console
try
{
_networkCharacterStateMachine = GetComponent<NetworkCharacterStateMachine>();
}
catch (System.Exception e)
{
Debug.LogError($"Error, can't find network character state machine: {e}");
}
_playerInputReceiver.MoveInputEvent += Walk;
_playerInputReceiver.CrouchInputEvent += Crouch;
_playerInputReceiver.SprintInputEvent += Sprint;
}
private void Walk(Vector2 direction, bool performing)
{
_walkIsPerforming = performing;
}
private void Crouch(bool performing)
{
_crouchIsHeld = performing;
}
private void Sprint(bool held)
{
_sprintIsPerforming = held;
}
private void Update()
{
if (hasAuthority)
{
if (_crouchIsHeld && !_sprintIsPerforming)
{
Debug.Log("he is attempting to crouch");
CmdCrouch();
}
if (_walkIsPerforming && !_crouchIsHeld && !_sprintIsPerforming)
_networkCharacterStateMachine.movementState = NetworkCharacterStateMachine.MovementStates.Walking;
if (_sprintIsPerforming && !_crouchIsHeld && _walkIsPerforming)
_networkCharacterStateMachine.movementState = NetworkCharacterStateMachine.MovementStates.Sprinting;
if (!_walkIsPerforming && !_crouchIsHeld && !_sprintIsPerforming)
{
_networkCharacterStateMachine.movementState = NetworkCharacterStateMachine.MovementStates.Idle;
}
}
}
[Command]
void CmdCrouch()
{
Debug.Log("CrouchCmd");
RpcCrouch();
}
[ClientRpc]
void RpcCrouch()
{
Debug.Log("CrouchRpc");
_networkCharacterStateMachine.movementState = NetworkCharacterStateMachine.MovementStates.Crouching;
}
}
}