From c2de8b4c36cb202465a7c7e5b7bf4a1a5336c62c Mon Sep 17 00:00:00 2001 From: Salomo309 <109785084+Salomo309@users.noreply.github.com> Date: Fri, 10 May 2024 14:14:55 +0700 Subject: [PATCH] feat: pet --- Assets/Scripts/Pet.meta | 8 +++ Assets/Scripts/Pet/PetAttacker.cs | 71 +++++++++++++++++++++++++ Assets/Scripts/Pet/PetAttacker.cs.meta | 11 ++++ Assets/Scripts/Pet/PetHealer.cs | 24 +++++++++ Assets/Scripts/Pet/PetHealer.cs.meta | 11 ++++ Assets/Scripts/Pet/PetHeatlh.cs | 45 ++++++++++++++++ Assets/Scripts/Pet/PetHeatlh.cs.meta | 11 ++++ Assets/Scripts/Pet/PetIncreaser.cs | 26 +++++++++ Assets/Scripts/Pet/PetIncreaser.cs.meta | 11 ++++ Assets/Scripts/Pet/PetMovement.cs | 33 ++++++++++++ Assets/Scripts/Pet/PetMovement.cs.meta | 11 ++++ 11 files changed, 262 insertions(+) create mode 100644 Assets/Scripts/Pet.meta create mode 100644 Assets/Scripts/Pet/PetAttacker.cs create mode 100644 Assets/Scripts/Pet/PetAttacker.cs.meta create mode 100644 Assets/Scripts/Pet/PetHealer.cs create mode 100644 Assets/Scripts/Pet/PetHealer.cs.meta create mode 100644 Assets/Scripts/Pet/PetHeatlh.cs create mode 100644 Assets/Scripts/Pet/PetHeatlh.cs.meta create mode 100644 Assets/Scripts/Pet/PetIncreaser.cs create mode 100644 Assets/Scripts/Pet/PetIncreaser.cs.meta create mode 100644 Assets/Scripts/Pet/PetMovement.cs create mode 100644 Assets/Scripts/Pet/PetMovement.cs.meta diff --git a/Assets/Scripts/Pet.meta b/Assets/Scripts/Pet.meta new file mode 100644 index 0000000..906d9df --- /dev/null +++ b/Assets/Scripts/Pet.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44c5a4345914ba142a9042e0a9f612d3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pet/PetAttacker.cs b/Assets/Scripts/Pet/PetAttacker.cs new file mode 100644 index 0000000..1f8a107 --- /dev/null +++ b/Assets/Scripts/Pet/PetAttacker.cs @@ -0,0 +1,71 @@ +using UnityEngine; + +public class PetAttacker : MonoBehaviour +{ + public int damageAmount = 20; + public string targetTag = "Enemy"; + public ParticleSystem hitParticles; + + private void Update() + { + FindNearestEnemy(); + } + + private void FindNearestEnemy() + { + GameObject[] enemies = GameObject.FindGameObjectsWithTag(targetTag); + float closestDistanceSqr = Mathf.Infinity; + GameObject nearestEnemy = null; + + foreach (GameObject enemy in enemies) + { + float distanceToEnemy = (enemy.transform.position - transform.position).sqrMagnitude; + if (distanceToEnemy < closestDistanceSqr) + { + closestDistanceSqr = distanceToEnemy; + nearestEnemy = enemy; + } + } + + if (nearestEnemy != null) + { + AttackEnemy(nearestEnemy); + } + } + + private void AttackEnemy(GameObject enemy) + { + if (enemy.CompareTag("Raja")) + { + RajaHealth rajaHealth = enemy.GetComponent<RajaHealth>(); + if (rajaHealth != null) + { + rajaHealth.TakeDamage(damageAmount, hitParticles.transform.position); + } + } + else if (enemy.CompareTag("Jenderal")) + { + JenderalHealth jenderalHealth = enemy.GetComponent<JenderalHealth>(); + if (jenderalHealth != null) + { + jenderalHealth.TakeDamage(damageAmount, hitParticles.transform.position); + } + } + else if (enemy.CompareTag("KepalaKeroco")) + { + KepalaKerocoHealth kepalaKerocoHealth = enemy.GetComponent<KepalaKerocoHealth>(); + if (kepalaKerocoHealth != null) + { + kepalaKerocoHealth.TakeDamage(damageAmount, hitParticles.transform.position); + } + } + else if (enemy.CompareTag("Keroco")) + { + KerocoHealth kerocoHealth = enemy.GetComponent<KerocoHealth>(); + if (kerocoHealth != null) + { + kerocoHealth.TakeDamage(damageAmount, hitParticles.transform.position); + } + } + } +} diff --git a/Assets/Scripts/Pet/PetAttacker.cs.meta b/Assets/Scripts/Pet/PetAttacker.cs.meta new file mode 100644 index 0000000..59b52fa --- /dev/null +++ b/Assets/Scripts/Pet/PetAttacker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76ae8ec4b344d5d4c81eb81460792e9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pet/PetHealer.cs b/Assets/Scripts/Pet/PetHealer.cs new file mode 100644 index 0000000..0200288 --- /dev/null +++ b/Assets/Scripts/Pet/PetHealer.cs @@ -0,0 +1,24 @@ +using Nightmare; +using UnityEngine; + +public class PetHealer : MonoBehaviour +{ + public int healAmount = 10; + public float healInterval = 2f; + + private PlayerHealth playerHealth; + + private void Awake() + { + playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>(); + InvokeRepeating(nameof(HealPlayer), healInterval, healInterval); + } + + private void HealPlayer() + { + if (playerHealth != null) + { + playerHealth.currentHealth += healAmount; + } + } +} diff --git a/Assets/Scripts/Pet/PetHealer.cs.meta b/Assets/Scripts/Pet/PetHealer.cs.meta new file mode 100644 index 0000000..23402b2 --- /dev/null +++ b/Assets/Scripts/Pet/PetHealer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 335afb094ee9bb943978eb1f537bf903 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pet/PetHeatlh.cs b/Assets/Scripts/Pet/PetHeatlh.cs new file mode 100644 index 0000000..edfd7ff --- /dev/null +++ b/Assets/Scripts/Pet/PetHeatlh.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PetHeatlh : MonoBehaviour +{ + public int startingHealth = 100; + public int currentHealth; + + public bool isDead; + public bool damaged; + + void Awake() + { + currentHealth = startingHealth; + } + + void Update() + { + + } + + public void TakeDamage(int amount) + { + currentHealth -= amount; + + if (currentHealth <= 0) + { + currentHealth = 0; + isDead = true; + + Destroy(gameObject); + } + else + { + damaged = true; + } + } + + public void CheatPetFullHP() + public void CheatPetFullHP() + { + currentHealth = 100; + } +} diff --git a/Assets/Scripts/Pet/PetHeatlh.cs.meta b/Assets/Scripts/Pet/PetHeatlh.cs.meta new file mode 100644 index 0000000..0abccec --- /dev/null +++ b/Assets/Scripts/Pet/PetHeatlh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e13c7ffbce9ab78478de6505a5d1927d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pet/PetIncreaser.cs b/Assets/Scripts/Pet/PetIncreaser.cs new file mode 100644 index 0000000..883d0f7 --- /dev/null +++ b/Assets/Scripts/Pet/PetIncreaser.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +public class PetIncreaser : MonoBehaviour +{ + public float attackIncreasePercentage = 20f; + + private void OnTriggerEnter(Collider other) + { + if (other.CompareTag("Jenderal")) + { + JenderalAttack jenderalShooting = other.GetComponent<JenderalAttack>(); + if (jenderalShooting != null) + { + jenderalShooting.IncreaseAttack(attackIncreasePercentage); + } + } + else if (other.CompareTag("Raja")) + { + RajaAttack rajaShooting = other.GetComponent<RajaAttack>(); + if (rajaShooting != null) + { + rajaShooting.IncreaseAttack(attackIncreasePercentage); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Pet/PetIncreaser.cs.meta b/Assets/Scripts/Pet/PetIncreaser.cs.meta new file mode 100644 index 0000000..38a4254 --- /dev/null +++ b/Assets/Scripts/Pet/PetIncreaser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a6ad8056f417284fbfc3a518b889690 +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 0000000..70fdead --- /dev/null +++ b/Assets/Scripts/Pet/PetMovement.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +public class PetMovement : MonoBehaviour +{ + public float followDistance = 4f; + public string playerTag = "Player"; + + private Transform player; + + void Awake() + { + player = GameObject.FindGameObjectWithTag(playerTag).transform; + + if (player == null) + { + Debug.LogError("Player not found! Make sure the player is tagged correctly."); + } + } + + void Update() + { + if (player != null) + { + Vector3 directionToPlayer = player.position - transform.position; + + //float distanceToPlayer = directionToPlayer.magnitude; + + Vector3 targetPosition = player.position - directionToPlayer.normalized * followDistance; + + transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime); + } + } +} diff --git a/Assets/Scripts/Pet/PetMovement.cs.meta b/Assets/Scripts/Pet/PetMovement.cs.meta new file mode 100644 index 0000000..39f8074 --- /dev/null +++ b/Assets/Scripts/Pet/PetMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8e40418ab897f743a587a87b683168d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: -- GitLab