From a6bb1f9114bb0c6183d5b09e5046f70f47c0613d Mon Sep 17 00:00:00 2001 From: Danil Iarosh Date: Wed, 8 Oct 2025 11:02:42 +0300 Subject: [PATCH] Implement IDamageable interface and Health management for player and enemy controllers --- .../{ => External}/Quantum Mana Studio.meta | 0 .../QMS - Cartoon Skybox Pack FREE.meta | 0 .../QMS - Cartoon Skybox Pack FREE/Info.meta | 0 .../Info/FAQ.pdf | Bin .../Info/FAQ.pdf.meta | 0 .../Info/Readme.pdf | Bin .../Info/Readme.pdf.meta | 0 .../Materials.meta | 0 .../Materials/Sky0002_Day.mat | 0 .../Materials/Sky0002_Day.mat.meta | 0 .../Materials/Sky0003_Night.mat | 0 .../Materials/Sky0003_Night.mat.meta | 0 .../Materials/Sky0005_DaySun.mat | 0 .../Materials/Sky0005_DaySun.mat.meta | 0 .../Materials/Sky0006_NightMoon.mat | 0 .../Materials/Sky0006_NightMoon.mat.meta | 0 .../Materials/Sky0008_Day.mat | 0 .../Materials/Sky0008_Day.mat.meta | 0 .../Materials/Sky0020_NightMoon.mat | 0 .../Materials/Sky0020_NightMoon.mat.meta | 0 .../Scenes.meta | 0 .../Scenes/Demo.unity | 0 .../Scenes/Demo.unity.meta | 0 .../Scripts.meta | 0 .../Scripts/QMSSkyboxFREE.cs | 0 .../Scripts/QMSSkyboxFREE.cs.meta | 0 .../Textures.meta | 0 .../Textures/Sample_Custom_Sun.psd | Bin .../Textures/Sample_Custom_Sun.psd.meta | 0 .../Textures/Sky0003_Night.png | Bin .../Textures/Sky0003_Night.png.meta | 0 .../Textures/Sky0005_DaySun.png | Bin .../Textures/Sky0005_DaySun.png.meta | 0 .../Textures/Sky0006_NightMoon.png | Bin .../Textures/Sky0006_NightMoon.png.meta | 0 .../Textures/Sky0008_Day.png | Bin .../Textures/Sky0008_Day.png.meta | 0 .../Textures/Sky0020_NightMoon.png | Bin .../Textures/Sky0020_NightMoon.png.meta | 0 Assets/Scripts/Abstract/Interfaces.cs | 7 +++ Assets/Scripts/EnemyController.cs | 52 ++++++++++++---- Assets/Scripts/Health.cs | 46 ++++++++++++++ Assets/Scripts/Health.cs.meta | 3 + Assets/Scripts/IDamageable.cs | 3 + Assets/Scripts/IDamageable.cs.meta | 3 + Assets/Scripts/PlayerController.cs | 57 ++++++++++++------ .../Utilities/ReadOnlyInInspectorAttribute.cs | 28 ++++++--- 47 files changed, 160 insertions(+), 39 deletions(-) rename Assets/{ => External}/Quantum Mana Studio.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png.meta (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png (100%) rename Assets/{ => External}/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png.meta (100%) create mode 100644 Assets/Scripts/Health.cs create mode 100644 Assets/Scripts/Health.cs.meta create mode 100644 Assets/Scripts/IDamageable.cs create mode 100644 Assets/Scripts/IDamageable.cs.meta diff --git a/Assets/Quantum Mana Studio.meta b/Assets/External/Quantum Mana Studio.meta similarity index 100% rename from Assets/Quantum Mana Studio.meta rename to Assets/External/Quantum Mana Studio.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/FAQ.pdf.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Info/Readme.pdf.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0002_Day.mat.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0003_Night.mat.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0005_DaySun.mat.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0006_NightMoon.mat.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0008_Day.mat.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Materials/Sky0020_NightMoon.mat.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scenes/Demo.unity.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Scripts/QMSSkyboxFREE.cs.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sample_Custom_Sun.psd.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0003_Night.png.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0005_DaySun.png.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0006_NightMoon.png.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0008_Day.png.meta diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png diff --git a/Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png.meta b/Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png.meta similarity index 100% rename from Assets/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png.meta rename to Assets/External/Quantum Mana Studio/QMS - Cartoon Skybox Pack FREE/Textures/Sky0020_NightMoon.png.meta diff --git a/Assets/Scripts/Abstract/Interfaces.cs b/Assets/Scripts/Abstract/Interfaces.cs index 0633030..bc51112 100644 --- a/Assets/Scripts/Abstract/Interfaces.cs +++ b/Assets/Scripts/Abstract/Interfaces.cs @@ -24,6 +24,13 @@ namespace RR.Common.Interfaces public bool TryPickup(GameObject newOwner, Transform optionaAttachPoint = null); } + + public interface IDamageable + { + void TakeDamage(int amount); + void Heal(int amount); + void Die(); + } } namespace RR.Game2D.Core.Interfaces diff --git a/Assets/Scripts/EnemyController.cs b/Assets/Scripts/EnemyController.cs index 4c43d9f..3845188 100644 --- a/Assets/Scripts/EnemyController.cs +++ b/Assets/Scripts/EnemyController.cs @@ -1,13 +1,15 @@ using UnityEngine; using RR.Game2D.Core; +using RR.Common.Interfaces; namespace RR.Game2D.Behaviour { [RequireComponent(typeof(Rigidbody2D), typeof(Collider2D), typeof(Animator))] - public class EnemyController : MonoBehaviour + public class EnemyController : MonoBehaviour, IDamageable { + [Header("Обзор")] [SerializeField] private float viewDistance = 5f; [SerializeField] private float viewAngle = 60f; @@ -19,12 +21,21 @@ namespace RR.Game2D.Behaviour [Header("Препятствия")] [SerializeField] private LayerMask obstacleMask; + [Header("Здоровье")] + [SerializeField] private int maxHealth = 1; + private Health health; + public int CurrentHealth => health?.CurrentHealth ?? 0; + public int MaxHealth => health?.MaxHealth ?? 0; + private Animator animator; private Rigidbody2D rb; private Collider2D col; - + private GameObject playerObj; + // Аниматор + private static readonly int Speed = Animator.StringToHash("Speed"); + void Start() { rb = GetComponent(); @@ -36,13 +47,22 @@ namespace RR.Game2D.Behaviour { playerObj = GameObject.FindGameObjectWithTag("Player"); } + + health = GetComponent(); + if (health == null) + { + health = gameObject.AddComponent(); + } + health.ResetHealth(); + health.SetOwner(this); + health.SetMaxHealth(maxHealth); } void FixedUpdate() { if (!playerObj) return; - Vector2 playerCenter = (Vector2)playerObj.transform.position; + Vector2 playerCenter = playerObj.transform.position; if (PlayerInSight()) { @@ -60,7 +80,7 @@ namespace RR.Game2D.Behaviour rb.linearVelocity, Vector2.zero, acceleration * Time.fixedDeltaTime); } - animator.SetFloat("Speed", Mathf.Abs(rb.linearVelocity.magnitude)); + animator.SetFloat(Speed, Mathf.Abs(rb.linearVelocity.magnitude)); } void OnCollisionEnter2D(Collision2D collision) @@ -70,20 +90,21 @@ namespace RR.Game2D.Behaviour Rigidbody2D playerRb = collision.collider.GetComponent(); playerObj.TryGetComponent(out PlayerController playerController); if (playerRb == null) return; - Vector2 contactNormal = collision.GetContact(0).normal; - if (contactNormal.y < -0.5f) { playerRb.linearVelocity = new Vector2(playerRb.linearVelocity.x, 35f); - Die(); + TakeDamage(MaxHealth); } else { - playerController.Die(); + playerController.TakeDamage(1); } } - else if (collision.collider.CompareTag("Projectile")) Die(); + else if (collision.collider.CompareTag("Projectile")) + { + TakeDamage(1); + } } private bool PlayerInSight() @@ -116,9 +137,16 @@ namespace RR.Game2D.Behaviour return true; } + public void TakeDamage(int amount) + { + health.TakeDamage(amount); + } + public void Heal(int amount) + { + health.Heal(amount); + } public void Die() { - //animator.Play("Death", 0); // TODO: Анимация смерти, потом смерть Destroy(gameObject); } @@ -131,8 +159,8 @@ namespace RR.Game2D.Behaviour Vector2 forward = transform.localEulerAngles.y >= 180f ? Vector2.right : Vector2.left; float half = viewAngle * 0.5f; - Vector2 edgeA = (Vector2)(Quaternion.Euler(0, 0, +half) * (Vector3)forward); - Vector2 edgeB = (Vector2)(Quaternion.Euler(0, 0, -half) * (Vector3)forward); + Vector2 edgeA = (Quaternion.Euler(0, 0, +half) * forward); + Vector2 edgeB = (Quaternion.Euler(0, 0, -half) * forward); Gizmos.color = Color.yellow; Gizmos.DrawLine(origin, origin + edgeA * viewDistance); diff --git a/Assets/Scripts/Health.cs b/Assets/Scripts/Health.cs new file mode 100644 index 0000000..1f096b4 --- /dev/null +++ b/Assets/Scripts/Health.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using RR.Common.Interfaces; + +namespace RR.Game2D.Behaviour +{ + [System.Serializable] + public class Health : MonoBehaviour + { + [SerializeField] private int maxHealth = 3; + [SerializeField] private int currentHealth; + private IDamageable owner; + + public int MaxHealth => maxHealth; + public int CurrentHealth => currentHealth; + + public void SetOwner(IDamageable owner) + { + this.owner = owner; + } + + public void SetMaxHealth(int value) + { + maxHealth = value; + currentHealth = maxHealth; + } + + public void TakeDamage(int amount) + { + currentHealth -= amount; + if (currentHealth <= 0) + { + owner?.Die(); + } + } + + public void Heal(int amount) + { + currentHealth = Mathf.Min(currentHealth + amount, maxHealth); + } + + public void ResetHealth() + { + currentHealth = maxHealth; + } + } +} diff --git a/Assets/Scripts/Health.cs.meta b/Assets/Scripts/Health.cs.meta new file mode 100644 index 0000000..f52b385 --- /dev/null +++ b/Assets/Scripts/Health.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1a9fe08f70754d1fa12c13ac4cd190e3 +timeCreated: 1759909224 \ No newline at end of file diff --git a/Assets/Scripts/IDamageable.cs b/Assets/Scripts/IDamageable.cs new file mode 100644 index 0000000..5ee03c3 --- /dev/null +++ b/Assets/Scripts/IDamageable.cs @@ -0,0 +1,3 @@ +namespace RR.Game2D.Core +{ +} \ No newline at end of file diff --git a/Assets/Scripts/IDamageable.cs.meta b/Assets/Scripts/IDamageable.cs.meta new file mode 100644 index 0000000..a356607 --- /dev/null +++ b/Assets/Scripts/IDamageable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ebc3129eb7104067b88015c32e09cdf8 +timeCreated: 1759909224 \ No newline at end of file diff --git a/Assets/Scripts/PlayerController.cs b/Assets/Scripts/PlayerController.cs index 8f330c0..63889b0 100644 --- a/Assets/Scripts/PlayerController.cs +++ b/Assets/Scripts/PlayerController.cs @@ -1,14 +1,15 @@ -using RR.Game2D.Core; -using UnityEngine; +using UnityEngine; using UnityEngine.InputSystem; +using RR.Common.Interfaces; +using RR.Game2D.Core; namespace RR.Game2D.Behaviour { [DisallowMultipleComponent] [RequireComponent(typeof(Rigidbody2D), - typeof(Collider2D), - typeof(Animator))] - public class PlayerController : MonoBehaviour + typeof(Collider2D), + typeof(Animator))] + public class PlayerController : MonoBehaviour, IDamageable { [Header("Управление")] @@ -32,9 +33,15 @@ namespace RR.Game2D.Behaviour [Header("Аниматор [Опционально]")] [SerializeField] private Animator animator; // оставить в инспекторе на всякий случай + [Header("Здоровье")] + [SerializeField] private int maxHealth = 3; + private Health health; + public int CurrentHealth => health?.CurrentHealth ?? 0; + public int MaxHealth => health?.MaxHealth ?? 0; + private Rigidbody2D rb; //private Collider2D col; - + private float inputX; private bool jumpPressed, jumpReleased, jumpHold; @@ -73,9 +80,17 @@ namespace RR.Game2D.Behaviour animator = GetComponent(); if (animator == null) animator = GetComponentInChildren(true); - if (animator == null) Debug.LogError($"[{name}] Animator не найден!"); + + health = GetComponent(); + if (health == null) + { + health = gameObject.AddComponent(); + } + health.ResetHealth(); + health.SetOwner(this); + health.SetMaxHealth(maxHealth); } void Update() @@ -145,9 +160,26 @@ namespace RR.Game2D.Behaviour { GameManager.Instance.NextLevel(); } + + if (collision.CompareTag("Enemy")) + { + TakeDamage(1); + } } - //private void OnDestroy() => Debug.Log("Player destroyed"); + public void TakeDamage(int amount) + { + health.TakeDamage(amount); + } + public void Heal(int amount) + { + health.Heal(amount); + } + + public void Die() + { + GameManager.Instance.ResetLevel(); + } /// /// Метод для проверки соприкосновения с землей @@ -164,14 +196,5 @@ namespace RR.Game2D.Behaviour return isGrounded; } - - /// - /// Метод смерти персонажа. - /// Базовое поведение - сброс уровня в GameManager - /// - public void Die() - { - GameManager.Instance.ResetLevel(); - } } } \ No newline at end of file diff --git a/Assets/Scripts/Utilities/ReadOnlyInInspectorAttribute.cs b/Assets/Scripts/Utilities/ReadOnlyInInspectorAttribute.cs index 264aebf..967ebec 100644 --- a/Assets/Scripts/Utilities/ReadOnlyInInspectorAttribute.cs +++ b/Assets/Scripts/Utilities/ReadOnlyInInspectorAttribute.cs @@ -1,16 +1,24 @@ using UnityEngine; -public class ReadOnlyInInspectorAttribute : MonoBehaviour -{ - // Start is called once before the first execution of Update after the MonoBehaviour is created - void Start() - { - - } +#if UNITY_EDITOR - // Update is called once per frame - void Update() +using UnityEditor; + +#endif + +public class ReadOnlyInInspectorAttribute : PropertyAttribute {} + +#if UNITY_EDITOR + +[CustomPropertyDrawer(typeof(ReadOnlyInInspectorAttribute))] +public class ReadOnlyDrawer : PropertyDrawer +{ + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + => EditorGUI.GetPropertyHeight(property, label, true); + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { - + GUI.enabled = false; EditorGUI.PropertyField(position, property, label, true); GUI.enabled = true; } } + +#endif \ No newline at end of file