Beispiel #1
0
        protected void QueryState()
        {
            _hitPointsFillFactor = (float)(_hitPoints) / (float)(_maxHitPoints);

            CompareLastHitPoints();

            if (!_alive)
            {
                _actorState   = ActorState.DEAD;
                _healthState  = HealthBarState.EMPTY;
                _takingDamage = false;

                return;
            }

            if (_takingDamage)
            {
                _actorState  = ActorState.IN_COMBAT;
                _healthState = HealthBarState.COMBAT;

                bool timerComplete = _combatExitTimer.IsComplete();
                int  iterations    = _combatExitTimer.Iterations();

                if (timerComplete && (iterations > 0))
                {
                    _takingDamage = false;
                }

                if (!_combatExitTimer.IsRunning())
                {
                    _combatExitTimer.Start();
                }
            }

            else
            {
                if (_hitPoints < _maxHitPoints)
                {
                    if (_combatExitTimer.IsComplete())
                    {
                        _actorState  = ActorState.NORMAL;
                        _healthState = HealthBarState.REGEN;

                        if (!_hitPointsTimer.IsRunning())
                        {
                            _hitPointsTimer.Start();
                        }
                    }
                }

                if (_hitPoints == _maxHitPoints)
                {
                    _healthState = HealthBarState.FULL;
                }
            }
        }