Testing client-server

This commit is contained in:
Nikita Kruglickiy 2024-03-19 17:56:12 +03:00
parent 44986e3f09
commit aeabb5344c
5 changed files with 45 additions and 15 deletions

View File

@ -19,6 +19,7 @@ namespace Characters.Enemy
[HideInInspector] public bool canAttack; [HideInInspector] public bool canAttack;
[SyncVar(hook = nameof(OnStateChanged)), HideInInspector] public EnemyState state = EnemyState.Idle;
[SyncVar, HideInInspector] public float aimRigWeight; [SyncVar, HideInInspector] public float aimRigWeight;
public readonly StateMachine<EnemyState> stateMachine = new StateMachine<EnemyState>(); public readonly StateMachine<EnemyState> stateMachine = new StateMachine<EnemyState>();
@ -92,7 +93,12 @@ namespace Characters.Enemy
{ {
base.TakeDamage(); base.TakeDamage();
stateMachine.SetCurrentState(EnemyState.Stunned); state = EnemyState.Stunned;
}
void OnStateChanged(EnemyState prevState, EnemyState newState)
{
stateMachine.SetCurrentState(newState);
} }
} }
} }

View File

@ -14,11 +14,15 @@ namespace Characters.Enemy.States
public override void Enter() public override void Enter()
{ {
if (!_enemy.isServer) return;
_enemy.SetAimRigWeight(1f); _enemy.SetAimRigWeight(1f);
} }
public override void Update() public override void Update()
{ {
if (!_enemy.isServer) return;
_enemy.agent.destination = _enemy.target.position; _enemy.agent.destination = _enemy.target.position;
float distance = Vector3.Distance(_enemy.target.transform.position, _enemy.transform.position); float distance = Vector3.Distance(_enemy.target.transform.position, _enemy.transform.position);
@ -40,12 +44,14 @@ namespace Characters.Enemy.States
} }
else else
{ {
_enemy.stateMachine.SetCurrentState(EnemyState.Idle); _enemy.state = EnemyState.Idle;
} }
} }
public override void Exit() public override void Exit()
{ {
if (!_enemy.isServer) return;
_enemy.target = null; _enemy.target = null;
_enemy.SetAimRigWeight(0f); _enemy.SetAimRigWeight(0f);

View File

@ -15,22 +15,28 @@ namespace Characters.Enemy.States
public override void Enter() public override void Enter()
{ {
if (!_enemy.isServer) return;
_enemy.SetSpeedMul(0f); _enemy.SetSpeedMul(0f);
_enemy.animator.SetBool(DanceAnimHash, true); _enemy.animator.SetBool(DanceAnimHash, true);
} }
public override void Update() public override void Update()
{ {
if (!_enemy.isServer) return;
var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0); var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0);
if (stateInfo.shortNameHash == DanceAnimHash && stateInfo.normalizedTime >= 1) if (stateInfo.shortNameHash == DanceAnimHash && stateInfo.normalizedTime >= 1)
{ {
_enemy.stateMachine.SetCurrentState(EnemyState.Patrol); _enemy.state = EnemyState.Patrol;
} }
} }
public override void Exit() public override void Exit()
{ {
if (!_enemy.isServer) return;
_enemy.animator.SetBool(DanceAnimHash, false); _enemy.animator.SetBool(DanceAnimHash, false);
_enemy.SetSpeedMul(1f); _enemy.SetSpeedMul(1f);
} }

View File

@ -21,11 +21,14 @@ namespace Characters.Enemy.States
public override void Enter() public override void Enter()
{ {
if (!_enemy.isServer) return;
_enemy.SetAimRigWeight(0f); _enemy.SetAimRigWeight(0f);
} }
public override void Update() public override void Update()
{ {
if (!_enemy.isServer) return;
float sortDistance = float.MaxValue; float sortDistance = float.MaxValue;
foreach (var player in _networkManager.alive) foreach (var player in _networkManager.alive)
@ -41,7 +44,7 @@ namespace Characters.Enemy.States
if (_enemy.target != null) if (_enemy.target != null)
{ {
_enemy.stateMachine.SetCurrentState(EnemyState.Chase); _enemy.state = EnemyState.Chase;
} }
var remainingDistance = _enemy.agent.GetPathRemainingDistance(); var remainingDistance = _enemy.agent.GetPathRemainingDistance();

View File

@ -21,17 +21,24 @@ namespace Characters.Enemy.States
public override void Enter() public override void Enter()
{ {
_enemy.canAttack = false; if (_enemy.isServer)
_enemy.target = null; {
_enemy.canAttack = false;
_enemy.target = null;
_enemy.SetSpeedMul(0f); _enemy.SetSpeedMul(0f);
_enemy.GetComponent<NetworkAnimator>().SetTrigger(DamageAnimHash); _enemy.GetComponent<NetworkAnimator>().SetTrigger(DamageAnimHash);
_enemy.hitVFX.Stop();
_enemy.hitVFX.Play();
_task = new Task(GetStunned()); _task = new Task(GetStunned());
}
else
{
_enemy.hitVFX.Stop();
_enemy.hitVFX.Play();
}
} }
[Server]
public override void ReEnter() public override void ReEnter()
{ {
_task.Stop(); _task.Stop();
@ -40,6 +47,8 @@ namespace Characters.Enemy.States
public override void Exit() public override void Exit()
{ {
if (!_enemy.isServer) return;
_task.Stop(); _task.Stop();
_enemy.SetSpeedMul(1f); _enemy.SetSpeedMul(1f);
@ -50,7 +59,7 @@ namespace Characters.Enemy.States
{ {
yield return new WaitForSeconds(6); yield return new WaitForSeconds(6);
_enemy.stateMachine.SetCurrentState(EnemyState.Patrol); _enemy.state = EnemyState.Patrol;
} }
} }
} }