diff options
author | Neil Kollack <nkollack@gmail.com> | 2022-04-12 23:05:54 -0500 |
---|---|---|
committer | Neil Kollack <nkollack@gmail.com> | 2022-04-12 23:05:54 -0500 |
commit | e1d53128f8d50d01235d7ba8013f485cd47a3e83 (patch) | |
tree | d09e2d27748839d6c41d2f3a1b8bb91a79337759 /Assets/Scripts | |
parent | a820d2892f7c44ef4e5ddd76a6973adb38e9bfa4 (diff) |
feat: add traps
Diffstat (limited to 'Assets/Scripts')
-rw-r--r-- | Assets/Scripts/Actors/Actor.cs | 14 | ||||
-rw-r--r-- | Assets/Scripts/Core/Stats.cs | 6 | ||||
-rw-r--r-- | Assets/Scripts/Traps.meta | 8 | ||||
-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 | 58 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TimedTrap.cs.meta | 11 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TrapDamage.cs | 59 | ||||
-rw-r--r-- | Assets/Scripts/Traps/TrapDamage.cs.meta | 11 |
9 files changed, 177 insertions, 10 deletions
diff --git a/Assets/Scripts/Actors/Actor.cs b/Assets/Scripts/Actors/Actor.cs index 52a67d3..1c52214 100644 --- a/Assets/Scripts/Actors/Actor.cs +++ b/Assets/Scripts/Actors/Actor.cs @@ -29,6 +29,7 @@ namespace MontanaJohns.Actors Collection<Item> items; bool isFalling; + public int health; protected int jumpCount; protected Vector2 acceleration; @@ -49,6 +50,7 @@ namespace MontanaJohns.Actors items = new(); stats = baseStats; + health = stats.maxHealth; jumpCount = stats.maxJumps; } @@ -77,7 +79,6 @@ namespace MontanaJohns.Actors { if (jumpCount++ <= stats.maxJumps) { - Debug.Log($"Jumping! Force: {stats.jumpForce}"); _rigidBody.AddForce(Vector2.up * stats.jumpForce); _animator.SetTrigger("jump"); _animator.SetBool("airborn", true); @@ -87,22 +88,23 @@ namespace MontanaJohns.Actors public virtual void Use() { - Debug.Log("Using!"); if (activeItem != null) activeItem.Use(); } public virtual void AddItem(Item item) { - Debug.Log($"Adding item: {item}!"); items.Add(item); stats = baseStats + items.Select(i => i.stats).Sum(); } - IEnumerator Falling() + public virtual void TakeDamage(int damage) { - Debug.Log("Falling!"); + health -= damage; + } + IEnumerator Falling() + { _animator.SetBool("airborn", true); while (_rigidBody.velocity.y > 0 || !Physics2D.OverlapCircle(groundCheckPoint.position, 0.2f, groundLayer)) @@ -113,8 +115,6 @@ namespace MontanaJohns.Actors jumpCount = 0; _animator.SetBool("airborn", false); - Debug.Log("Fell!"); - yield break; } } diff --git a/Assets/Scripts/Core/Stats.cs b/Assets/Scripts/Core/Stats.cs index 29afbe3..6916005 100644 --- a/Assets/Scripts/Core/Stats.cs +++ b/Assets/Scripts/Core/Stats.cs @@ -20,7 +20,7 @@ namespace MontanaJohns.Core [System.Serializable] public struct Stats { - [SerializeField] public int lives; + [SerializeField] public int maxHealth; [SerializeField] public float speedMultiplier; [SerializeField] public int maxJumps; [SerializeField] public float jumpForce; @@ -29,7 +29,7 @@ namespace MontanaJohns.Core { return new Stats { - lives = x.lives + y.lives, + maxHealth = x.maxHealth + y.maxHealth, speedMultiplier = x.speedMultiplier + y.speedMultiplier, maxJumps = x.maxJumps + y.maxJumps, jumpForce = x.jumpForce + y.jumpForce @@ -40,7 +40,7 @@ namespace MontanaJohns.Core { return new Stats { - lives = 3, + maxHealth = 3, speedMultiplier = 1, maxJumps = 1, jumpForce = 500f, diff --git a/Assets/Scripts/Traps.meta b/Assets/Scripts/Traps.meta new file mode 100644 index 0000000..ef735a0 --- /dev/null +++ b/Assets/Scripts/Traps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00b84501a00d42d438fbba6ac7b009b5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: 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..1cae196 --- /dev/null +++ b/Assets/Scripts/Traps/TimedTrap.cs @@ -0,0 +1,58 @@ +using System.Collections; +using UnityEngine; + +public class TimedTrap : TrapDamage +{ + [Header("TimedTrap")] + [SerializeField] protected float activationDelay; + [SerializeField] protected float activeTime; + + protected Animator animator; + protected SpriteRenderer sr; + protected bool triggered; + protected bool active; + + protected void Awake() + { + animator = GetComponent<Animator>(); + sr = GetComponent<SpriteRenderer>(); + } + + protected void Update() + { + if (!triggered) + { + 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); + } +} 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..a61df7b --- /dev/null +++ b/Assets/Scripts/Traps/TrapDamage.cs @@ -0,0 +1,59 @@ +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); + Debug.Log("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: |