Forum begins after the advertisement:
Part 4 – How to stop healing if not enough mana to complete?
Home › Forums › Video Game Tutorial Series › Creating a Metroidvania in Unity › Part 4 – How to stop healing if not enough mana to complete?
- This topic has 3 replies, 2 voices, and was last updated 11 months, 2 weeks ago by Terence.
-
AuthorPosts
-
February 11, 2024 at 11:23 pm #13311::
Right now the code that is provided allows for you to start the healing animation/mechanic as long as you have more than 0 mana. This doesn’t check to see if you have enough mana to complete the action (ie. I have a 1 second timer for healing, the Mana Drain Speed is .33 and I have .32 mana. If I activate the healing it will use up all .32 mana but not heal because it never checked to see if I had enough mana to begin with)
I’ve messed around and tried some different things but can’t get it figured out. Is this addressed in a later video and if not do you have any suggestions?
February 12, 2024 at 3:03 am #13312::Think I figured it out but it’s not pretty. I’m sure there are much easier ways of doing this but this is what I came up with.
void Heal() { if(Input.GetButton("Healing") && (Mana * 10000) >= ((manaDrainSpeed * 100) * (100 - ((healTimer) * 100))) && Health < maxHealth && !pState.jumping && !pState.dashing){ healTimer += Time.deltaTime; pState.healing = true; anim.SetBool("Healing", true); if (healTimer >= timeToHeal) { Health++; healTimer = 0; } Mana -= Time.deltaTime * manaDrainSpeed; } else { pState.healing = false; anim.SetBool("Healing", false); healTimer = 0; } }
I used large numbers to convert the fairly small floats to whole numbers and keep the accuracy pretty on point. I’m only about 5 days into learning C# so please let me know if there is an easier way to do this.
February 12, 2024 at 1:07 pm #13316::Hi Daikuna, this behaviour is intended.
Even if you have enough mana to fulfill the mana drain speed, it will still not heal. The healing only occurs if you heal for a duration greater than
timeToHeal
. Otherwise, trying to heal will just drain your mana without healing you (like in Hollow Knight).If you want to prevent the user from healing if he does not have enough mana to heal any health, you will have to check your current mana against the
timeToHeal * manaDrainSpeed
value, like so:void Heal() { bool sufficientMana = Mana < manaDrainSpeed * timeToHeal; if (Input.GetButton("Healing") && Health < maxHealth && Mana > 0 && !pState.jumping && !pState.dashing && sufficientMana) { pState.healing = true; anim.SetBool("Healing", true); //healing healTimer += Time.deltaTime; if (healTimer >= timeToHeal) { Health++; healTimer = 0; } //drain mana Mana -= Time.deltaTime * manaDrainSpeed; } else { pState.healing = false; anim.SetBool("Healing", false); healTimer = 0; } }
Hope this helps!
-
AuthorPosts
- You must be logged in to reply to this topic.
Advertisement below: