/// <summary> /// The entity's health can only be changed by other scripts through this method, which ensures the correct aftereffects /// will be applied. /// </summary> /// <param name="value"> The value to be added to/subtracted from the entity's health </param> /// <param name="hitVector"> The direction in which the damage was inflicted in </param> /// <param name="damageType"> The damage type or attack type </param> /// <returns> Whether or not it was successful (false when player is invulnerable) </returns> public bool Damage(int value, Vector2 hitVector, DamageType damageType) { if (isInvulnerable) { return(false); } switch (damageType) { case DamageType.EnemyAttack: OnKnockback?.Invoke(hitVector); goto case DamageType.NormalDamage; case DamageType.LevelHazard: goto case DamageType.NormalDamage; case DamageType.NormalDamage: Hp -= value; break; case DamageType.Heal: if (Hp == maxHP) { return(false); } Hp += value; break; default: break; } return(true); }
protected virtual bool TryApplyForce(Vector3 force, int power) { if (power >= _knockbackThreshold) { OnKnockback?.Invoke(force, power); return(true); } else if (power >= _stunThreshold) { OnStun?.Invoke(force, power); return(true); } return(false); }
public void Knockback(float baseKnockback) { OnKnockback.SafeInvoke(); }