64 lines
1.9 KiB
C#
64 lines
1.9 KiB
C#
using BumpCombat.Core;
|
|
using UnityEngine;
|
|
|
|
namespace BumpCombat.Enemies
|
|
{
|
|
[DisallowMultipleComponent]
|
|
public sealed class EnemyModel : CharacterModel
|
|
{
|
|
private EnemyDefinition definition;
|
|
private float maxHealthMultiplier = 1f;
|
|
private float moveSpeedMultiplier = 1f;
|
|
private float attackDamageMultiplier = 1f;
|
|
|
|
public EnemyDefinition Definition => definition;
|
|
public override float MaxHealth => definition == null
|
|
? 0f
|
|
: Evaluate(
|
|
CharacterStat.MaxHealth,
|
|
definition.MaxHealth * maxHealthMultiplier);
|
|
public override float MoveSpeed => definition == null
|
|
? 0f
|
|
: Evaluate(
|
|
CharacterStat.MoveSpeed,
|
|
definition.MoveSpeed * moveSpeedMultiplier);
|
|
public float AttackDamage => definition == null
|
|
? 0f
|
|
: CalculateAttackDamage(
|
|
definition.AttackDamage * attackDamageMultiplier);
|
|
|
|
public void ConfigureDefinition(EnemyDefinition enemyDefinition)
|
|
{
|
|
definition = enemyDefinition;
|
|
}
|
|
|
|
public void ConfigureEventMultipliers(
|
|
float healthMultiplier,
|
|
float speedMultiplier,
|
|
float damageMultiplier)
|
|
{
|
|
maxHealthMultiplier = Mathf.Max(1f, healthMultiplier);
|
|
moveSpeedMultiplier = Mathf.Max(0f, speedMultiplier);
|
|
attackDamageMultiplier = Mathf.Max(0f, damageMultiplier);
|
|
}
|
|
|
|
public float CalculatePatternDamage(
|
|
float patternMultiplier,
|
|
bool applyEventTuning)
|
|
{
|
|
if (definition == null)
|
|
{
|
|
return 0f;
|
|
}
|
|
|
|
float damage = definition.AttackDamage * patternMultiplier;
|
|
if (applyEventTuning)
|
|
{
|
|
damage *= attackDamageMultiplier;
|
|
}
|
|
|
|
return CalculateAttackDamage(damage);
|
|
}
|
|
}
|
|
}
|