private void HittableObjectOnDamaged(AliveData aliveData, HitData hitData) { _fillImg.gameObject.SetActive(true); var maxHp = (float)aliveData.MaxHp; var currentHp = (float)aliveData.CurrentHp; var hpValue = currentHp / maxHp; _fillImg.fillAmount = hpValue; }
private void Awake() { Assert.IsNotNull(_hittableParams, "_hittableParams != null"); Assert.IsNotNull(_teamController, "_teamController != null"); _currentAliveData = new AliveData( _hittableParams.MaxHp, _hittableParams.MaxHp, false ); }
public void Kill() { if (_currentAliveData.IsDead) { return; } _currentAliveData = new AliveData( _hittableParams.MaxHp, 0, true ); _onDeadUnityEv?.Invoke(); OnDied?.Invoke(); }
public void DealDamage(HitData hitData) { if (_currentAliveData.IsDead) { return; } // check friendly-fire if (hitData.unitSource != null && hitData.unitSource.TeamController != null) { if (hitData.unitSource.TeamController.IsTeammate(_teamController)) { return; } } var lastHp = _currentAliveData.CurrentHp; var damage = hitData.damage * DamageTakingMultipler; var currentHp = lastHp - damage; currentHp = Mathf.Clamp(currentHp, 0, _hittableParams.MaxHp); bool isDead = currentHp <= 0; _currentAliveData = new AliveData( _hittableParams.MaxHp, Mathf.RoundToInt(currentHp), isDead ); LastHitData = hitData; OnDamaged?.Invoke(_currentAliveData, hitData); if (isDead) { _onDeadUnityEv?.Invoke(); OnDied?.Invoke(); } }