From 2ffc84ea15a7e390549e3b62346281352dbc92bd Mon Sep 17 00:00:00 2001 From: Malik Rafsanjani <pro.malikakbar2357@gmail.com> Date: Sat, 15 Apr 2023 15:28:50 +0700 Subject: [PATCH] fix: resolve bug on load and weapons --- Assets/Scripts/Boss/ElementalHealth.cs | 2 +- Assets/Scripts/Enemy/EnemyHealth.cs | 9 ++++++--- Assets/Scripts/GameOver/GameOverCanvas.cs | 1 + .../Scripts/Interfaces/IEnemyHealthHandler.cs | 13 +++++++++++++ .../Interfaces/IEnemyHealthHandler.cs.meta | 11 +++++++++++ Assets/Scripts/Managers/EnemyManager.cs | 2 +- Assets/Scripts/Player/PlayerShotGunning.cs | 17 +++++++++++++---- Assets/Scripts/Player/Weapons/PlayerArrow.cs | 11 +++++------ Assets/Scripts/Player/Weapons/PlayerSword.cs | 5 ++++- Assets/Scripts/Quest/Temple/Temple.cs | 5 ++++- Assets/Scripts/SaveLoad/SaveLoadManager.cs | 1 + Assets/Scripts/SaveLoad/SavePlace.cs | 5 ----- 12 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 Assets/Scripts/Interfaces/IEnemyHealthHandler.cs create mode 100644 Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta diff --git a/Assets/Scripts/Boss/ElementalHealth.cs b/Assets/Scripts/Boss/ElementalHealth.cs index a8b995b..9701e42 100644 --- a/Assets/Scripts/Boss/ElementalHealth.cs +++ b/Assets/Scripts/Boss/ElementalHealth.cs @@ -1,6 +1,6 @@ using UnityEngine; -public class ElementalHealth : MonoBehaviour +public class ElementalHealth : MonoBehaviour, IEnemyHealthHandler { public int startingHealth = 500; public int currentHealth; diff --git a/Assets/Scripts/Enemy/EnemyHealth.cs b/Assets/Scripts/Enemy/EnemyHealth.cs index 6901af8..7174196 100644 --- a/Assets/Scripts/Enemy/EnemyHealth.cs +++ b/Assets/Scripts/Enemy/EnemyHealth.cs @@ -1,6 +1,6 @@ using UnityEngine; -public class EnemyHealth : MonoBehaviour +public class EnemyHealth : MonoBehaviour, IEnemyHealthHandler { public int startingHealth = 100; public int currentHealth; @@ -31,8 +31,11 @@ public class EnemyHealth : MonoBehaviour currentHealth = startingHealth; questTemple = FindObjectOfType<Temple>(); pet = GameObject.FindGameObjectWithTag("Pet"); - petHealth = pet.GetComponent<PetHealth>(); - petType = petHealth.GetPetType(); + if (pet != null) + { + petHealth = pet.GetComponent<PetHealth>(); + petType = petHealth.GetPetType(); + } } diff --git a/Assets/Scripts/GameOver/GameOverCanvas.cs b/Assets/Scripts/GameOver/GameOverCanvas.cs index 954256e..f5c6689 100644 --- a/Assets/Scripts/GameOver/GameOverCanvas.cs +++ b/Assets/Scripts/GameOver/GameOverCanvas.cs @@ -30,6 +30,7 @@ public class GameOverCanvas : MonoBehaviour public void OnClickLatestSave() { + GlobalManager.Instance.IsFirstLoad = true; SceneManager.LoadScene("Quest"); IsSet = true; } diff --git a/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs new file mode 100644 index 0000000..8c34719 --- /dev/null +++ b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +public interface IEnemyHealthHandler +{ + public void TakeDamage(int amount, Vector3 hitPoint); + + public Transform transform { get; } +} diff --git a/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta new file mode 100644 index 0000000..1270a9a --- /dev/null +++ b/Assets/Scripts/Interfaces/IEnemyHealthHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e83f67c5f57e60d42bd9a210c6144486 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Managers/EnemyManager.cs b/Assets/Scripts/Managers/EnemyManager.cs index ef789d1..e6d5419 100644 --- a/Assets/Scripts/Managers/EnemyManager.cs +++ b/Assets/Scripts/Managers/EnemyManager.cs @@ -20,7 +20,7 @@ public class EnemyManager : MonoBehaviour void Start() { - + isBoss = GlobalStateManager.Instance.IdxQuest == 3; } diff --git a/Assets/Scripts/Player/PlayerShotGunning.cs b/Assets/Scripts/Player/PlayerShotGunning.cs index bbcaa88..ef02c54 100644 --- a/Assets/Scripts/Player/PlayerShotGunning.cs +++ b/Assets/Scripts/Player/PlayerShotGunning.cs @@ -7,7 +7,7 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler [SerializeField] private float damagePerShot = 30f; [SerializeField] - private float timeBetweenBullets = 0.15f; + private float timeBetweenBullets = 1f; [SerializeField] private float range = 100f; public GameObject prefabEffect; @@ -22,7 +22,7 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler Light gunLight; readonly float effectsDisplayTime = 0.2f; - private readonly float maxDist = 8f; + private readonly float maxDist = 10f; int numBullet = 3; List<GameObject> effects = new List<GameObject>(); @@ -36,6 +36,13 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler } set { + var diff = value - level; + for (int i = 0; i < diff; i++) + { + AddBullet(); + numBullet++; + } + level = value; } } @@ -116,14 +123,16 @@ public class PlayerShotGunning : MonoBehaviour, WeaponHandler if (Physics.Raycast(shootRay, out shootHit, range, shootableMask)) { - EnemyHealth enemyHealth = shootHit.collider.GetComponent<EnemyHealth>(); + IEnemyHealthHandler enemyHealth = shootHit.collider.GetComponent<ElementalHealth>(); + enemyHealth ??= shootHit.collider.GetComponent< EnemyHealth>(); + if (enemyHealth != null) { var dist = Vector3.Distance(shootHit.transform.position, transform.position); if (dist <= maxDist) { Debug.Log("Enemy is On Distance"); - int finalDamage = (int)(damagePerShot / Math.Sqrt(range)); + int finalDamage = (int)(damagePerShot / Math.Sqrt(dist)); enemyHealth.TakeDamage(finalDamage, shootHit.point); } else diff --git a/Assets/Scripts/Player/Weapons/PlayerArrow.cs b/Assets/Scripts/Player/Weapons/PlayerArrow.cs index bf6587d..cc98fc3 100644 --- a/Assets/Scripts/Player/Weapons/PlayerArrow.cs +++ b/Assets/Scripts/Player/Weapons/PlayerArrow.cs @@ -35,18 +35,17 @@ public class PlayerArrow : MonoBehaviour if (didHit) return; didHit = true; - if (other.gameObject.TryGetComponent<EnemyHealth>(out var enemyHealth)) + + IEnemyHealthHandler enemyHealth = other.gameObject.GetComponent<ElementalHealth>(); + enemyHealth ??= other.gameObject.GetComponent<EnemyHealth>(); + + if (enemyHealth != null) { var energy = 0.5 * rb.mass * rb.velocity.magnitude * rb.velocity.magnitude; var damage = energy * damageMultiplier; Debug.Log("damage: "+ damage); enemyHealth.TakeDamage((int)damage, enemyHealth.transform.position); } - - /* rb.velocity = Vector3.zero; - rb.angularVelocity = Vector3.zero; - rb.isKinematic = true; - transform.parent = other.transform;*/ Destroy(gameObject); } } diff --git a/Assets/Scripts/Player/Weapons/PlayerSword.cs b/Assets/Scripts/Player/Weapons/PlayerSword.cs index 3fafc29..76af46b 100644 --- a/Assets/Scripts/Player/Weapons/PlayerSword.cs +++ b/Assets/Scripts/Player/Weapons/PlayerSword.cs @@ -28,7 +28,10 @@ public class PlayerSword : MonoBehaviour, WeaponHandler void OnTriggerEnter(Collider other) { - if (other.gameObject.TryGetComponent<EnemyHealth>(out var enemyHealth)) + IEnemyHealthHandler enemyHealth = other.gameObject.GetComponent<ElementalHealth>(); + enemyHealth ??= other.gameObject.GetComponent<EnemyHealth>(); + + if (enemyHealth != null) { if (this.animator.GetCurrentAnimatorStateInfo(0).IsName("SwordSwing")) { diff --git a/Assets/Scripts/Quest/Temple/Temple.cs b/Assets/Scripts/Quest/Temple/Temple.cs index d0e7060..dd058c7 100644 --- a/Assets/Scripts/Quest/Temple/Temple.cs +++ b/Assets/Scripts/Quest/Temple/Temple.cs @@ -111,7 +111,10 @@ public class Temple : MonoBehaviour GlobalManager.Instance.TotalTime += questTime; ToastManager.Instance.ShowToastQueue(System.TimeSpan.FromSeconds(GlobalManager.Instance.TotalTime).ToString("mm':'ss"), 1); - this.saveDialog.Show(); + if (idxCurrentQuest != 4) + { + this.saveDialog.Show(); + } } private void OnTriggerEnter(Collider other) diff --git a/Assets/Scripts/SaveLoad/SaveLoadManager.cs b/Assets/Scripts/SaveLoad/SaveLoadManager.cs index cad9cac..d189dfe 100644 --- a/Assets/Scripts/SaveLoad/SaveLoadManager.cs +++ b/Assets/Scripts/SaveLoad/SaveLoadManager.cs @@ -76,6 +76,7 @@ public class SaveLoadManager : MonoBehaviour public void LoadState(int Id) { var state = GetSavedStateFromFile(Id); + state.playerStateSave.playerName = GlobalManager.Instance.PlayerName; if (state != null) { Debug.Log("Load State " + Id); diff --git a/Assets/Scripts/SaveLoad/SavePlace.cs b/Assets/Scripts/SaveLoad/SavePlace.cs index 05e35ec..d73dc56 100644 --- a/Assets/Scripts/SaveLoad/SavePlace.cs +++ b/Assets/Scripts/SaveLoad/SavePlace.cs @@ -24,11 +24,6 @@ public class SavePlace : MonoBehaviour } SaveLoadManager.Instance.ShowUI(); } - - if (onArea && Input.GetKeyDown(KeyCode.N)) - { - SaveLoadManager.Instance.LoadState(2); - } } private void OnTriggerEnter(Collider other) -- GitLab