diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity index 75c54e051778fad087ffd7cbdc7fd6bf72ccbd78..2a82535939b75c31c82d0a6a1f718d1abd961865 100644 --- a/Assets/Scenes/Main.unity +++ b/Assets/Scenes/Main.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.026700953, g: 0.29866886, b: 0.49627915, a: 1} + m_IndirectSpecularColor: {r: 0.026566118, g: 0.29867774, b: 0.49624193, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -7192,7 +7192,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1479356872} - - component: {fileID: 1479356871} + - component: {fileID: 1479356874} - component: {fileID: 1479356870} - component: {fileID: 1479356873} m_Layer: 5 @@ -7218,27 +7218,6 @@ MonoBehaviour: - {fileID: 8300000, guid: e16c85036de7075408c4637a0ea763ae, type: 3} - {fileID: 8300000, guid: 4fff99673a41e24439d527ad0bd6b569, type: 3} fadeDuration: 1 ---- !u!65 &1479356871 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1479356869} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 1 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 200, y: 50, z: 200} - m_Center: {x: 0, y: 0, z: 0} --- !u!224 &1479356872 RectTransform: m_ObjectHideFlags: 0 @@ -7354,6 +7333,27 @@ AudioSource: m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 +--- !u!135 &1479356874 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1479356869} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 125 + m_Center: {x: 0, y: 0, z: 0} --- !u!4 &1482324798 stripped Transform: m_CorrespondingSourceObject: {fileID: 850649989193942044, guid: ae358aa425fe140409d8a560f4492730, type: 3} diff --git a/Assets/Scripts/Enemy/EnemyMovement.cs b/Assets/Scripts/Enemy/EnemyMovement.cs index 26b1df5a7aca8d8a3ca9cea8221f5c8d64bd4e1c..120a30ac119ddd9a7dd1f5cd54a8e0137f06ac3c 100644 --- a/Assets/Scripts/Enemy/EnemyMovement.cs +++ b/Assets/Scripts/Enemy/EnemyMovement.cs @@ -15,11 +15,13 @@ public class EnemyMovement : MonoBehaviour private float lastAttackTime; private Transform player; + private Transform saveZone; private NavMeshAgent agent; private AudioSource audioSource; void Awake() { + saveZone = GameObject.FindGameObjectWithTag("SaveZone")?.transform; player = GameObject.FindGameObjectWithTag("Player")?.transform; agent = GetComponent<NavMeshAgent>(); agent.updateRotation = false; @@ -29,28 +31,35 @@ public class EnemyMovement : MonoBehaviour void FixedUpdate() { - if ((GetComponent<EnemyHealth>().currentHealth <= 0) || (player == null)) + if (!IsInsideVillage()) { - enemyAnimator.SetBool("isAttacking", false); - enemyAnimator.SetBool("isChasing", false); - enemyAnimator.SetBool("isPatrolling", false); - agent.ResetPath(); - } - else if (IsUsingShotgun() && IsTooCloseToPlayer()) - { - RunAway(); - } - else if (IsAttacking() && !IsRunningAway()) - { - Attack(); - } - else if (IsChasing()) - { - Chase(); + if ((GetComponent<EnemyHealth>().currentHealth <= 0) || (player == null)) + { + enemyAnimator.SetBool("isAttacking", false); + enemyAnimator.SetBool("isChasing", false); + enemyAnimator.SetBool("isPatrolling", false); + agent.ResetPath(); + } + else if (IsUsingShotgun() && IsTooCloseToPlayer()) + { + RunAway(); + } + else if (IsAttacking() && !IsRunningAway()) + { + Attack(); + } + else if (IsChasing()) + { + Chase(); + } + else + { + Patrol(); + } } else { - Patrol(); + GetAwayFromVillage(); } } @@ -60,13 +69,6 @@ public class EnemyMovement : MonoBehaviour return Vector3.Distance(transform.position, player.position) <= attackRadius; } - bool IsChasing() - { - if (player == null) return false; - float distanceToPlayer = Vector3.Distance(transform.position, player.position); - return distanceToPlayer <= visionRadius && distanceToPlayer > attackRadius; - } - void Attack() { // Set animation bools @@ -89,6 +91,13 @@ public class EnemyMovement : MonoBehaviour } } + bool IsChasing() + { + if (player == null) return false; + float distanceToPlayer = Vector3.Distance(transform.position, player.position); + return distanceToPlayer <= visionRadius && distanceToPlayer > attackRadius; + } + void Chase() { // Set animation bools @@ -146,6 +155,27 @@ public class EnemyMovement : MonoBehaviour return Vector3.Distance(transform.position, player.position) <= attackRadius * 0.5f; } + bool IsInsideVillage() + { + if (saveZone == null) return false; + return Vector3.Distance(transform.position, saveZone.position) <= 125; + } + + void GetAwayFromVillage() + { + Vector3 runDirection = transform.position - saveZone.position; + runDirection.y = 0; + runDirection.Normalize(); + Vector3 runDestination = transform.position + runDirection * patrolRadius; + if (NavMesh.SamplePosition(runDestination, out NavMeshHit hit, patrolRadius, 1)) + { + agent.SetDestination(hit.position); + enemyAnimator.SetBool("isAttacking", false); + enemyAnimator.SetBool("isChasing", false); + enemyAnimator.SetBool("isPatrolling", true); + } + } + public bool IsRunningAway() { return (enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName("Female Sword Walk") || enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName("Male_Sword_Walk") || enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName("Female Sword Sprint") || enemyAnimator.GetCurrentAnimatorStateInfo(0).IsName("Male Sword Sprint"));