diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity index f8026848f2c5aab719796ba7284b3aff34e44ea9..7cd18be87cd5413da41a768e966dd94eef8c3f02 100644 --- a/Assets/Scenes/Level01.unity +++ b/Assets/Scenes/Level01.unity @@ -8873,6 +8873,71 @@ Transform: m_Children: [] m_Father: {fileID: 183304858} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &939754510 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 100002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_Name + value: ZomBunny + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalPosition.x + value: 2.8748345 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000047683716 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalPosition.z + value: 4.49745 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 19800002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: InitialModule.startSizeY.minMaxState + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 19800002, guid: e5171f72421770240bd7c3989fe351e3, type: 3} + propertyPath: InitialModule.startSizeZ.minMaxState + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e5171f72421770240bd7c3989fe351e3, type: 3} --- !u!1 &943920582 GameObject: m_ObjectHideFlags: 0 @@ -17231,6 +17296,63 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -14, y: -4} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &1926172071 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 6842458599697738422, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_Name + value: Gecko + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalPosition.x + value: 3.8081632 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalPosition.y + value: -0.00000047683716 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalPosition.z + value: 1.1404972 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7979196013395532419, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cefda5744f2acb54d8f08973a10bee1e, type: 3} --- !u!1 &1941167242 GameObject: m_ObjectHideFlags: 0 @@ -17284,6 +17406,63 @@ BoxCollider: serializedVersion: 3 m_Size: {x: 1.7261565, y: 1.1397734, z: 3.1002936} m_Center: {x: 0.80036193, y: -0.44283915, z: -0.49197662} +--- !u!1001 &1951416162 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalPosition.x + value: -1.0720851 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalPosition.y + value: -0.0000009536743 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalPosition.z + value: 2.551804 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4992758198669102562, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6182162820492919152, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} + propertyPath: m_Name + value: Colobus + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 84b7c8441f160174fa5c6f94cf397f0a, type: 3} --- !u!1 &1965662091 GameObject: m_ObjectHideFlags: 0 @@ -19348,6 +19527,7 @@ SceneRoots: - {fileID: 7644976519348994449} - {fileID: 7887238849551432852} - {fileID: 6581340035796196415} + - {fileID: 2033424417} - {fileID: 183304858} - {fileID: 1621979631} - {fileID: 1871034396} @@ -19357,4 +19537,6 @@ SceneRoots: - {fileID: 307935225} - {fileID: 840882477} - {fileID: 1043811713} - - {fileID: 2033424417} + - {fileID: 939754510} + - {fileID: 1951416162} + - {fileID: 1926172071} diff --git a/Assets/Scripts/Pet/PetAttackMovement.cs b/Assets/Scripts/Pet/PetAttackMovement.cs new file mode 100644 index 0000000000000000000000000000000000000000..8c962f7d77f9d02aabd941604cb87bd39e13106e --- /dev/null +++ b/Assets/Scripts/Pet/PetAttackMovement.cs @@ -0,0 +1,220 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.AI; +using UnityEngine.Events; +using System; +using System.Collections.Generic; + +namespace Nightmare +{ + public class PetAttackMovement : PausibleObject + { + public float visionRange = 10f; + public float hearingRange = 20f; + public float wanderDistance = 10f; + public Vector2 idleTimeRange; + [Range(0f, 1f)] + public float psychicLevels = 0.2f; + + private List<GameObject> enemies = new List<GameObject>(); + float currentVision; + Transform player; + Animator anim; + PlayerHealth playerHealth; + PetHealth petHealth; + NavMeshAgent nav; + public float timer = 0f; + + void Awake() + { + player = GameObject.FindGameObjectWithTag("Player").transform; + playerHealth = player.GetComponent<PlayerHealth>(); + petHealth = GetComponent<PetHealth>(); + nav = GetComponent<NavMeshAgent>(); + + StartPausible(); + } + + void OnEnable() + { + nav.enabled = true; + ClearPath(); + ScaleVision(1f); + IsPsychic(); + timer = 0f; + } + + void ClearPath() + { + if (nav.hasPath) + nav.ResetPath(); + } + + void Update() + { + if (!isPaused) + { + // If both the enemy and the player have health left... + if (petHealth.CurrentHealth() > 0 && playerHealth.currentHealth > 0) + { + LookForPlayer(); + WanderOrIdle(); + } + else + { + nav.enabled = false; + } + } + } + + void OnDestroy() + { + nav.enabled = false; + StopPausible(); + } + + public override void OnPause() + { + if (nav.hasPath) + nav.isStopped = true; + } + + public override void OnUnPause() + { + if (nav.hasPath) + nav.isStopped = false; + } + + private void LookForPlayer() + { + // Add enemies with different tags to the list + enemies.Clear(); // Clear the list before adding enemies + enemies.AddRange(GameObject.FindGameObjectsWithTag("ZomBunny")); + enemies.AddRange(GameObject.FindGameObjectsWithTag("ZomBear")); + enemies.AddRange(GameObject.FindGameObjectsWithTag("Hellephant")); + enemies.AddRange(GameObject.FindGameObjectsWithTag("ZomBoss")); + + Transform closestEnemy = null; + float closestDistance = Mathf.Infinity; + + foreach (GameObject enemy in enemies) + { + float distanceToEnemy = Vector3.Distance(transform.position, enemy.transform.position); + + if (distanceToEnemy < closestDistance && distanceToEnemy <= currentVision) + { + closestEnemy = enemy.transform; + closestDistance = distanceToEnemy; + } + } + + if (closestEnemy != null) + { + GoToPosition(closestEnemy.position); + } + else + { + float distanceToPlayer = Vector3.Distance(transform.position, player.position); + + // Define the stopping distance + float stoppingDistance = 3f; // Adjust this value as needed + + // If the distance to the player is less than or equal to the stopping distance, clear the path + if (distanceToPlayer <= stoppingDistance) + { + anim.SetBool("IsNearPlayer", true); // IsNearPlayer parameter is false + ClearPath(); + } + // Otherwise, continue moving towards the player + else + { + anim.SetBool("IsNearPlayer", false); // IsNearPlayer parameter is true + GoToPosition(player.position); + } + } + } + + private void HearPoint(Vector3 position) + { + TestSense(position, hearingRange); + } + + private void TestSense(Vector3 position, float senseRange) + { + if (Vector3.Distance(this.transform.position, position) <= senseRange) + { + GoToPosition(position); + } + } + + public void GoToPlayer() + { + GoToPosition(player.position); + } + + private void GoToPosition(Vector3 position) + { + timer = -1f; + if (!petHealth.IsDead()) + { + SetDestination(position); + } + } + + private void SetDestination(Vector3 position) + { + if (nav.isOnNavMesh) + { + nav.SetDestination(position); + } + } + + private void WanderOrIdle() + { + if (!nav.hasPath) + { + if (timer <= 0f) + { + SetDestination(GetRandomPoint(wanderDistance, 5)); + if (nav.pathStatus == NavMeshPathStatus.PathInvalid) + { + ClearPath(); + } + timer = UnityEngine.Random.Range(idleTimeRange.x, idleTimeRange.y); + } + else + { + timer -= Time.deltaTime; + } + } + } + + private void IsPsychic() + { + GoToPlayer(); + } + + private Vector3 GetRandomPoint(float distance, int layermask) + { + Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position; ; + + NavMeshHit navHit; + NavMesh.SamplePosition(randomPoint, out navHit, distance, layermask); + + return navHit.position; + } + + public void ScaleVision(float scale) + { + currentVision = visionRange * scale; + } + + private int GetCurrentNavArea() + { + NavMeshHit navHit; + nav.SamplePathPosition(-1, 0.0f, out navHit); + + return navHit.mask; + } + } +} diff --git a/Assets/Scripts/Pet/PetAttackMovement.cs.meta b/Assets/Scripts/Pet/PetAttackMovement.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e1cb7495c0bedf15849ec684ead5446a0d3888fd --- /dev/null +++ b/Assets/Scripts/Pet/PetAttackMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9abe5aa58720aad4096c73ca8d58d6b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pet/PetMovement.cs b/Assets/Scripts/Pet/PetMovement.cs new file mode 100644 index 0000000000000000000000000000000000000000..830bd61a0086d81a7d5c9bb90b4d2b2e97749061 --- /dev/null +++ b/Assets/Scripts/Pet/PetMovement.cs @@ -0,0 +1,191 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.AI; +using UnityEngine.Events; +using System; + +namespace Nightmare +{ + public class PetMovement : PausibleObject + { + public float visionRange = 10f; + public float hearingRange = 20f; + public float wanderDistance = 10f; + public Vector2 idleTimeRange; + [Range(0f, 1f)] + public float psychicLevels = 0.2f; + + float currentVision; + Transform player; + Animator anim; + PlayerHealth playerHealth; + PetHealth petHealth; + NavMeshAgent nav; + public float timer = 0f; + + void Awake() + { + anim = GetComponent<Animator>(); + player = GameObject.FindGameObjectWithTag("Player").transform; + playerHealth = player.GetComponent<PlayerHealth>(); + petHealth = GetComponent<PetHealth>(); + nav = GetComponent<NavMeshAgent>(); + + StartPausible(); + } + + void OnEnable() + { + nav.enabled = true; + ClearPath(); + ScaleVision(1f); + IsPsychic(); + timer = 0f; + } + + void ClearPath() + { + if (nav.hasPath) + nav.ResetPath(); + } + + void Update() + { + if (!isPaused) + { + // If both the enemy and the player have health left... + if (petHealth.CurrentHealth() > 0 && playerHealth.currentHealth > 0) + { + LookForPlayer(); + WanderOrIdle(); + } + else + { + nav.enabled = false; + } + } + } + + void OnDestroy() + { + nav.enabled = false; + StopPausible(); + } + + public override void OnPause() + { + if (nav.hasPath) + nav.isStopped = true; + } + + public override void OnUnPause() + { + if (nav.hasPath) + nav.isStopped = false; + } + + private void LookForPlayer() + { + float distanceToPlayer = Vector3.Distance(transform.position, player.position); + + // Define the stopping distance + float stoppingDistance = 3f; // Adjust this value as needed + + // If the distance to the player is less than or equal to the stopping distance, clear the path + if (distanceToPlayer <= stoppingDistance) + { + anim.SetBool("IsNearPlayer", true); // IsNearPlayer parameter is false + ClearPath(); + } + // Otherwise, continue moving towards the player + else + { + anim.SetBool("IsNearPlayer", false); // IsNearPlayer parameter is true + GoToPosition(player.position); + } + } + + private void HearPoint(Vector3 position) + { + TestSense(position, hearingRange); + } + + private void TestSense(Vector3 position, float senseRange) + { + if (Vector3.Distance(this.transform.position, position) <= senseRange) + { + GoToPosition(position); + } + } + + public void GoToPlayer() + { + GoToPosition(player.position); + } + + private void GoToPosition(Vector3 position) + { + timer = -1f; + if (!petHealth.IsDead()) + { + SetDestination(position); + } + } + + private void SetDestination(Vector3 position) + { + if (nav.isOnNavMesh) + { + nav.SetDestination(position); + } + } + + private void WanderOrIdle() + { + if (!nav.hasPath) + { + if (timer <= 0f) + { + SetDestination(GetRandomPoint(wanderDistance, 5)); + if (nav.pathStatus == NavMeshPathStatus.PathInvalid) + { + ClearPath(); + } + timer = UnityEngine.Random.Range(idleTimeRange.x, idleTimeRange.y); + } + else + { + timer -= Time.deltaTime; + } + } + } + + private void IsPsychic() + { + GoToPlayer(); + } + + private Vector3 GetRandomPoint(float distance, int layermask) + { + Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position; ; + + NavMeshHit navHit; + NavMesh.SamplePosition(randomPoint, out navHit, distance, layermask); + + return navHit.position; + } + + public void ScaleVision(float scale) + { + currentVision = visionRange * scale; + } + + private int GetCurrentNavArea() + { + NavMeshHit navHit; + nav.SamplePathPosition(-1, 0.0f, out navHit); + + return navHit.mask; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Pet/PetMovement.cs.meta b/Assets/Scripts/Pet/PetMovement.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..551f0c7bd56795f71b85de3fe5bf88575e519ac4 --- /dev/null +++ b/Assets/Scripts/Pet/PetMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12d6f44aa51f99b4bb2f251f9f07e7db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: