Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        private void Awake()
        {
            Assert.IsNotNull(_hittableParams, "_hittableParams != null");
            Assert.IsNotNull(_teamController, "_teamController != null");

            _currentAliveData = new AliveData(
                _hittableParams.MaxHp,
                _hittableParams.MaxHp,
                false
                );
        }
Ejemplo n.º 3
0
        public void Kill()
        {
            if (_currentAliveData.IsDead)
            {
                return;
            }

            _currentAliveData = new AliveData(
                _hittableParams.MaxHp,
                0,
                true
                );

            _onDeadUnityEv?.Invoke();
            OnDied?.Invoke();
        }
Ejemplo n.º 4
0
        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();
            }
        }