- Home /
Attack selected Enemy Turn Based Combat
Hey everyone, I have my battlescene and my turn cycle setup. Now in the playerschoice I want to select one of the enemies. I have an Array of the enemies and select my enemy and execute one of my attacking abilities. Each ability has a Script that has the damage amount of the attack in it. Every enemy has a health Script on it. Now I m stuck in how to manage the whole take damage thing on the selected enemy. I first thought I could call a function Inside the enemy health script depending on which attack I did but this seems not so good because every ability would have to be set inside the enemy health script makeing it very unflexible. Any pointers towards how to manage this situation best a very welcome. Thanks.
Answer by Hollow Mockery · Feb 19, 2015 at 03:35 PM
Set up parameters in your damage function.
like this for example:
public float CurrentHealth;
public float DamageThreshold;
public float DamageResistance;
public void takeDamage(float Damage, float AP){
CurrentHealth -= (Damage - Mathf.Max(DamageThreshold - AP,0)) * (1-DamageResistance);
}
so when you want to apply damage you'd have script on your projectile for example that would find the takeDamage function in the Health script on the target.
public float Damage;
public float AP;
/* With a raycast hit for example */
health = hit.transform.gameObject.GetComponent<Health>();
if(health != null){health.takeDamage(Damage, AP);}
I'm using armor penetration and damage resistance, but you could take those out or add in other types of resistance, damage or effects.
Answer by DRRosen3 · Feb 19, 2015 at 02:38 PM
You don't have to have every ability in the enemy script. Put this in the enemy script.
public void AdjustHealth(int amount)
{
health += amount;
}
Now you need some sort of mediator between player and enemies. I've done something similar in a project of mine called a "TurnBasedCombatStateMachine".
A great tutorial series on this can be found here: Make A RPG Series. In it he teaches you how to make a turn-based combat state machine, a damage calculation script, and various other things. However, the two I mentioned are most important because you use the state machine to determine whose turn it is to attack and to calculate the damage. Once the damage is calculated, you'd call the function above. Something such as...
if(player_damage != null)
{
enemy.AdjustHealth(-damage);
}
Your answer
Follow this Question
Related Questions
Can't manage to damage enemies... 1 Answer
Object Not Recieving Damage 3 Answers
Staged bullet damage? 1 Answer
Health below zero but shows negative numbers 1 Answer
checking how many objects with the same tag are on screen 2 Answers