diff options
author | Neil Kollack <nkollack@gmail.com> | 2022-04-18 13:22:11 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-18 13:22:11 -0500 |
commit | 41e8678c463b7606dfaf292d67d05244ff044878 (patch) | |
tree | 4bad1628cc223bbd40bd5a593c8bf9576fda0402 /Assets/Scripts/Traps | |
parent | a8e4db0544c6b2ac370693ad32e0e4adc01ef32e (diff) | |
parent | b11db6ce1af50c7f76f17b3797c76275f81801d2 (diff) |
Merge pull request #6 from MontanaJohns/develop
Prototype
Diffstat (limited to 'Assets/Scripts/Traps')
-rw-r--r-- | Assets/Scripts/Traps/NoStayTimedTrap.cs | 9 | ||||
-rw-r--r-- | Assets/Scripts/Traps/NoStayTimedTrap.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TimedTrap.cs | 72 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TimedTrap.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TrapDamage.cs | 58 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TrapDamage.cs.meta | 11 |
6 files changed, 172 insertions, 0 deletions
diff --git a/Assets/Scripts/Traps/NoStayTimedTrap.cs b/Assets/Scripts/Traps/NoStayTimedTrap.cs new file mode 100644 index 0000000..830e75c --- /dev/null +++ b/Assets/Scripts/Traps/NoStayTimedTrap.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +public class NoStayTimedTrap : TimedTrap +{ + private new void OnTriggerStay2D(Collider2D collision) + { + // overriding prevents damage + } +} diff --git a/Assets/Scripts/Traps/NoStayTimedTrap.cs.meta b/Assets/Scripts/Traps/NoStayTimedTrap.cs.meta new file mode 100644 index 0000000..5775a5b --- /dev/null +++ b/Assets/Scripts/Traps/NoStayTimedTrap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6daacdaebb60e17459480514a447c987 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Traps/TimedTrap.cs b/Assets/Scripts/Traps/TimedTrap.cs new file mode 100644 index 0000000..9413b82 --- /dev/null +++ b/Assets/Scripts/Traps/TimedTrap.cs @@ -0,0 +1,72 @@ +using System.Collections; +using UnityEngine; + +public class TimedTrap : TrapDamage +{ + [Header("TimedTrap")] + [SerializeField] protected float activationDelay; + [SerializeField] protected float activeTime; + [SerializeField] protected float offset; + + protected Animator animator; + protected SpriteRenderer sr; + protected bool triggered; + protected bool active; + protected bool isOffset; + + protected void Awake() + { + animator = GetComponent<Animator>(); + sr = GetComponent<SpriteRenderer>(); + } + + private void Start() + { + StartCoroutine(Offset()); + } + + protected void Update() + { + if (!triggered) + { + if(isOffset) + StartCoroutine(Activate()); + } + } + + protected new void OnTriggerEnter2D(Collider2D collision) + { + if (active) + { + base.OnTriggerEnter2D(collision); + } + } + + protected new void OnTriggerStay2D(Collider2D collision) + { + if(active && !stay) + { + StartCoroutine(base.StayDamage(collision)); + } + } + + protected IEnumerator Activate() + { + triggered = true; + + yield return new WaitForSeconds(activationDelay); + active = true; + animator.SetBool("activated", true); + + yield return new WaitForSeconds(activeTime); + triggered = false; + active = false; + animator.SetBool("activated", false); + } + + protected IEnumerator Offset() + { + yield return new WaitForSeconds(offset); + isOffset = true; + } +} diff --git a/Assets/Scripts/Traps/TimedTrap.cs.meta b/Assets/Scripts/Traps/TimedTrap.cs.meta new file mode 100644 index 0000000..70c8522 --- /dev/null +++ b/Assets/Scripts/Traps/TimedTrap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec1e493655f34cc46a2940132bdcd5f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Traps/TrapDamage.cs b/Assets/Scripts/Traps/TrapDamage.cs new file mode 100644 index 0000000..7318368 --- /dev/null +++ b/Assets/Scripts/Traps/TrapDamage.cs @@ -0,0 +1,58 @@ +using MontanaJohns.Actors; +using System.Collections; +using UnityEngine; + +public class TrapDamage : MonoBehaviour +{ + [SerializeField] + protected int damage; + + [Header("TrapDamage")] + [SerializeField] protected float stayDamageDelay; + + protected bool stay; + protected Hashtable justEntered = new Hashtable(); + + protected void OnTriggerEnter2D(Collider2D collision) + { + if (justEntered.Contains(collision.gameObject)) + justEntered[collision.gameObject] = true; + else + justEntered.Add(collision.gameObject, true); + + DealDamage(collision); + } + protected void OnTriggerStay2D(Collider2D collision) + { + if (!stay) + { + StartCoroutine(StayDamage(collision)); + } + } + + protected void OnTriggerExit2D(Collider2D collision) + { + justEntered[collision.gameObject] = false; + } + + protected IEnumerator StayDamage(Collider2D collision) + { + stay = true; + if (justEntered.Contains(collision.gameObject) && justEntered[collision.gameObject].Equals(true)) + justEntered[collision.gameObject] = false; + else if (justEntered.Contains(collision.gameObject)) + DealDamage(collision); + yield return new WaitForSeconds(stayDamageDelay); + stay = false; + } + + protected void DealDamage(Collider2D collision) + { + if (collision.tag == "Player" || collision.tag == "Enemy") + { + collision.GetComponent<Actor>().TakeDamage(damage); + } + } + + +} diff --git a/Assets/Scripts/Traps/TrapDamage.cs.meta b/Assets/Scripts/Traps/TrapDamage.cs.meta new file mode 100644 index 0000000..2810aa8 --- /dev/null +++ b/Assets/Scripts/Traps/TrapDamage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d923bc12ff452b44d991e334cb6c13d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |