diff --git a/Assets/Scripts/Hazard System.meta b/Assets/Scripts/Hazard System.meta new file mode 100644 index 0000000..a24ce5b --- /dev/null +++ b/Assets/Scripts/Hazard System.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 059c0cd98d750ea4f9daa90a91a3d369 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Hazard System/DayPeriod.cs b/Assets/Scripts/Hazard System/DayPeriod.cs new file mode 100644 index 0000000..4d49c7f --- /dev/null +++ b/Assets/Scripts/Hazard System/DayPeriod.cs @@ -0,0 +1,6 @@ +public enum DayPeriod +{ + Always, + Morning, + Night +} diff --git a/Assets/Scripts/Hazard System/DayPeriod.cs.meta b/Assets/Scripts/Hazard System/DayPeriod.cs.meta new file mode 100644 index 0000000..6f3c625 --- /dev/null +++ b/Assets/Scripts/Hazard System/DayPeriod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d71147165e7c4440aae5222cc27f3ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Hazard System/EnvironmentType.cs b/Assets/Scripts/Hazard System/EnvironmentType.cs new file mode 100644 index 0000000..1235ae4 --- /dev/null +++ b/Assets/Scripts/Hazard System/EnvironmentType.cs @@ -0,0 +1,7 @@ +public enum EnvironmentType +{ + Beach, + City, + Forest, + Desert +} diff --git a/Assets/Scripts/Hazard System/EnvironmentType.cs.meta b/Assets/Scripts/Hazard System/EnvironmentType.cs.meta new file mode 100644 index 0000000..8c7d42a --- /dev/null +++ b/Assets/Scripts/Hazard System/EnvironmentType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b38316b7fc55c8342bfbd0039cdd3e3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Hazard System/Hazard.cs b/Assets/Scripts/Hazard System/Hazard.cs new file mode 100644 index 0000000..ca0ac46 --- /dev/null +++ b/Assets/Scripts/Hazard System/Hazard.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using UnityEngine.Events; + +public abstract class Hazard : MonoBehaviour +{ + #region serializable variables + [SerializeField] private float expiryTime; + [SerializeField] private DayPeriod availablePeriod; + [SerializeField] private EnvironmentType[] availableEnvironments; + + #endregion + + #region private variables + private float timeStarted; + + #endregion + + #region events + public UnityAction BeforeInvoke; + public UnityAction AfterInvoke; + public UnityAction OnApplyEffects; + public UnityAction OnEndEffects; + + #endregion + + #region private methods + private bool CheckExpired() + { + return Time.time > (expiryTime + timeStarted); + } + + protected virtual void ApplyEffects() + { + OnApplyEffects(); + } + + protected virtual void EndEffects() + { + OnEndEffects(); + } + + #endregion + + #region public API + public bool CheckAvailable() + { + return !CheckExpired(); // && currentPeriod == availablePeriod && availableEnvironments.Any(environment == currentEnvironment) + } + + public void Invoke() + { + BeforeInvoke(); + timeStarted = Time.time; + ApplyEffects(); + AfterInvoke(); + } + + #endregion + +} diff --git a/Assets/Scripts/Hazard System/Hazard.cs.meta b/Assets/Scripts/Hazard System/Hazard.cs.meta new file mode 100644 index 0000000..11192c8 --- /dev/null +++ b/Assets/Scripts/Hazard System/Hazard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 014eef84a74693245ac5a49d3d4f35a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Hazard System/HazardManager.cs b/Assets/Scripts/Hazard System/HazardManager.cs new file mode 100644 index 0000000..ecf5151 --- /dev/null +++ b/Assets/Scripts/Hazard System/HazardManager.cs @@ -0,0 +1,33 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Events; + +public class HazardManager : MonoBehaviour +{ + #region serializable variables + [SerializeField] private Hazard[] hazards; + + #endregion + + #region events + public UnityAction BeforeHazardInvoke; + public UnityAction AfterHazardInvoke; + + #endregion + + #region public API + public IEnumerable GetAvaialableHazards() + { + return hazards.Where(hazard => hazard.CheckAvailable()); + } + + public void InvokeHazard(Hazard hazard) + { + BeforeHazardInvoke(hazard); + hazard.Invoke(); + AfterHazardInvoke(hazard); + } + + #endregion +} diff --git a/Assets/Scripts/Hazard System/HazardManager.cs.meta b/Assets/Scripts/Hazard System/HazardManager.cs.meta new file mode 100644 index 0000000..df397de --- /dev/null +++ b/Assets/Scripts/Hazard System/HazardManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 221e7c66c1fa95343920eeafdca81894 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: