aboutsummaryrefslogtreecommitdiffstats
path: root/Assets/Scripts
diff options
context:
space:
mode:
authorNeil Kollack <nkollack@gmail.com>2022-04-12 23:05:54 -0500
committerNeil Kollack <nkollack@gmail.com>2022-04-12 23:05:54 -0500
commite1d53128f8d50d01235d7ba8013f485cd47a3e83 (patch)
treed09e2d27748839d6c41d2f3a1b8bb91a79337759 /Assets/Scripts
parenta820d2892f7c44ef4e5ddd76a6973adb38e9bfa4 (diff)
feat: add traps
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/Actors/Actor.cs14
-rw-r--r--Assets/Scripts/Core/Stats.cs6
-rw-r--r--Assets/Scripts/Traps.meta8
-rw-r--r--Assets/Scripts/Traps/NoStayTimedTrap.cs9
-rw-r--r--Assets/Scripts/Traps/NoStayTimedTrap.cs.meta11
-rw-r--r--Assets/Scripts/Traps/TimedTrap.cs58
-rw-r--r--Assets/Scripts/Traps/TimedTrap.cs.meta11
-rw-r--r--Assets/Scripts/Traps/TrapDamage.cs59
-rw-r--r--Assets/Scripts/Traps/TrapDamage.cs.meta11
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: