using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; public class AttackerAndDamageable : Damageable, IAttacker { public int BaseDamage { get; protected set; } = 0; public bool CanAttack => Time.time > AttackCooldown; public void StartAttackPreparation() => AttackReadyAt = Time.time + AttackPreparationTime; public float AttackReadyAt { get; protected set; } public float AttackPreparationTime { get; protected set; } = 0; public float AttackPreparationTimeLeft => Math.Max(0, AttackReadyAt - Time.time); public float AttackPreparationTimeLeftNormalized => Math.Max(0, (AttackReadyAt - Time.time) / AttackReadyAt); public float AttackPreparationTimeElapsed => AttackPreparationTime - AttackPreparationTimeLeft; public float AttackPreparationTimeElapsedNormalized => 1 - AttackPreparationTimeLeftNormalized; public bool AttackIsReady => AttackPreparationTimeLeft == 0; public void StartAttackCooldown() => AttackCooldown = Time.time + AttackCooldownDuration; public float AttackCooldown { get; protected set; } = 0f; public float AttackCooldownLeft => Math.Max(0, AttackCooldown - Time.time); public float AttackCooldownDuration { get; protected set; } = 1f; }