27 lines
1.3 KiB
C#
27 lines
1.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using UnityEngine;
|
|
|
|
[SerializeField]
|
|
public class AttackerAndDamageable : Damageable, IAttacker {
|
|
[SerializeField] public int BaseDamage { get; protected set; } = 0;
|
|
|
|
public void StartAttackPreparation() => AttackReadyAt = Time.time + AttackPreparationTime;
|
|
public bool AttackIsReady => AttackPreparationTimeLeft == 0;
|
|
public float AttackReadyAt { get; protected set; }
|
|
[SerializeField] 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) / AttackPreparationTime);
|
|
public float AttackPreparationTimeElapsed => AttackPreparationTime - AttackPreparationTimeLeft;
|
|
public float AttackPreparationTimeElapsedNormalized => 1 - AttackPreparationTimeLeftNormalized;
|
|
|
|
public void StartAttackCooldown() => AttackCooldown = Time.time + AttackCooldownDuration;
|
|
public bool CanAttack => Time.time > AttackCooldown;
|
|
public float AttackCooldown { get; protected set; }
|
|
public float AttackCooldownLeft => Math.Max(0, AttackCooldown - Time.time);
|
|
[SerializeField] public float AttackCooldownDuration { get; protected set; } = 1f;
|
|
}
|