From aeabb5344cb7f4ecc735a3d7c1a559b834f81b56 Mon Sep 17 00:00:00 2001 From: Nikita Kruglickiy Date: Tue, 19 Mar 2024 17:56:12 +0300 Subject: [PATCH] Testing client-server --- Assets/Scripts/Characters/Enemy/Enemy.cs | 10 +++++-- .../Characters/Enemy/States/ChaseState.cs | 8 +++++- .../Characters/Enemy/States/IdleState.cs | 8 +++++- .../Characters/Enemy/States/PatrolState.cs | 7 +++-- .../Characters/Enemy/States/StunnedState.cs | 27 ++++++++++++------- 5 files changed, 45 insertions(+), 15 deletions(-) diff --git a/Assets/Scripts/Characters/Enemy/Enemy.cs b/Assets/Scripts/Characters/Enemy/Enemy.cs index f2d331d..8ac3d46 100644 --- a/Assets/Scripts/Characters/Enemy/Enemy.cs +++ b/Assets/Scripts/Characters/Enemy/Enemy.cs @@ -18,7 +18,8 @@ namespace Characters.Enemy public float aggressionDistance = 5f; [HideInInspector] public bool canAttack; - + + [SyncVar(hook = nameof(OnStateChanged)), HideInInspector] public EnemyState state = EnemyState.Idle; [SyncVar, HideInInspector] public float aimRigWeight; public readonly StateMachine stateMachine = new StateMachine(); @@ -92,7 +93,12 @@ namespace Characters.Enemy { base.TakeDamage(); - stateMachine.SetCurrentState(EnemyState.Stunned); + state = EnemyState.Stunned; + } + + void OnStateChanged(EnemyState prevState, EnemyState newState) + { + stateMachine.SetCurrentState(newState); } } } \ No newline at end of file diff --git a/Assets/Scripts/Characters/Enemy/States/ChaseState.cs b/Assets/Scripts/Characters/Enemy/States/ChaseState.cs index a79761d..908c79d 100644 --- a/Assets/Scripts/Characters/Enemy/States/ChaseState.cs +++ b/Assets/Scripts/Characters/Enemy/States/ChaseState.cs @@ -14,11 +14,15 @@ namespace Characters.Enemy.States public override void Enter() { + if (!_enemy.isServer) return; + _enemy.SetAimRigWeight(1f); } public override void Update() { + if (!_enemy.isServer) return; + _enemy.agent.destination = _enemy.target.position; float distance = Vector3.Distance(_enemy.target.transform.position, _enemy.transform.position); @@ -40,12 +44,14 @@ namespace Characters.Enemy.States } else { - _enemy.stateMachine.SetCurrentState(EnemyState.Idle); + _enemy.state = EnemyState.Idle; } } public override void Exit() { + if (!_enemy.isServer) return; + _enemy.target = null; _enemy.SetAimRigWeight(0f); diff --git a/Assets/Scripts/Characters/Enemy/States/IdleState.cs b/Assets/Scripts/Characters/Enemy/States/IdleState.cs index bd6447f..020d244 100644 --- a/Assets/Scripts/Characters/Enemy/States/IdleState.cs +++ b/Assets/Scripts/Characters/Enemy/States/IdleState.cs @@ -15,22 +15,28 @@ namespace Characters.Enemy.States public override void Enter() { + if (!_enemy.isServer) return; + _enemy.SetSpeedMul(0f); _enemy.animator.SetBool(DanceAnimHash, true); } public override void Update() { + if (!_enemy.isServer) return; + var stateInfo = _enemy.animator.GetCurrentAnimatorStateInfo(0); if (stateInfo.shortNameHash == DanceAnimHash && stateInfo.normalizedTime >= 1) { - _enemy.stateMachine.SetCurrentState(EnemyState.Patrol); + _enemy.state = EnemyState.Patrol; } } public override void Exit() { + if (!_enemy.isServer) return; + _enemy.animator.SetBool(DanceAnimHash, false); _enemy.SetSpeedMul(1f); } diff --git a/Assets/Scripts/Characters/Enemy/States/PatrolState.cs b/Assets/Scripts/Characters/Enemy/States/PatrolState.cs index 328c088..b9cdb42 100644 --- a/Assets/Scripts/Characters/Enemy/States/PatrolState.cs +++ b/Assets/Scripts/Characters/Enemy/States/PatrolState.cs @@ -21,12 +21,15 @@ namespace Characters.Enemy.States public override void Enter() { + if (!_enemy.isServer) return; + _enemy.SetAimRigWeight(0f); } public override void Update() { - + if (!_enemy.isServer) return; + float sortDistance = float.MaxValue; foreach (var player in _networkManager.alive) { @@ -41,7 +44,7 @@ namespace Characters.Enemy.States if (_enemy.target != null) { - _enemy.stateMachine.SetCurrentState(EnemyState.Chase); + _enemy.state = EnemyState.Chase; } var remainingDistance = _enemy.agent.GetPathRemainingDistance(); diff --git a/Assets/Scripts/Characters/Enemy/States/StunnedState.cs b/Assets/Scripts/Characters/Enemy/States/StunnedState.cs index eb5c451..fb1a653 100644 --- a/Assets/Scripts/Characters/Enemy/States/StunnedState.cs +++ b/Assets/Scripts/Characters/Enemy/States/StunnedState.cs @@ -21,17 +21,24 @@ namespace Characters.Enemy.States public override void Enter() { - _enemy.canAttack = false; - _enemy.target = null; - - _enemy.SetSpeedMul(0f); - _enemy.GetComponent().SetTrigger(DamageAnimHash); - _enemy.hitVFX.Stop(); - _enemy.hitVFX.Play(); + if (_enemy.isServer) + { + _enemy.canAttack = false; + _enemy.target = null; - _task = new Task(GetStunned()); + _enemy.SetSpeedMul(0f); + _enemy.GetComponent().SetTrigger(DamageAnimHash); + + _task = new Task(GetStunned()); + } + else + { + _enemy.hitVFX.Stop(); + _enemy.hitVFX.Play(); + } } + [Server] public override void ReEnter() { _task.Stop(); @@ -40,6 +47,8 @@ namespace Characters.Enemy.States public override void Exit() { + if (!_enemy.isServer) return; + _task.Stop(); _enemy.SetSpeedMul(1f); @@ -50,7 +59,7 @@ namespace Characters.Enemy.States { yield return new WaitForSeconds(6); - _enemy.stateMachine.SetCurrentState(EnemyState.Patrol); + _enemy.state = EnemyState.Patrol; } } } \ No newline at end of file