Animatable& Animatable::operator=(const Animatable& other) { RemoveAllStates(); for (auto state : other.mStates) { AnimationState* newState = mnew AnimationState(*state); AddState(newState); } return *this; }
void Game_Enemy::ChangeHp(int hp) { SetHp(GetHp() + hp); if (this->hp == 0) { // Death SetGauge(0); SetDefending(false); SetCharged(false); RemoveAllStates(); AddState(1); } else { // Back to life RemoveState(1); } }
void Game_Battler::AddState(int state_id) { const RPG::State* state = ReaderUtil::GetElement(Data::states, state_id); if (!state) { Output::Warning("AddState: Can't add state with invalid ID %d", state_id); return; } if (IsDead()) { return; } if (state_id == 1) { SetGauge(0); RemoveAllStates(); SetCharged(false); SetHp(0); SetAtkModifier(0); SetDefModifier(0); SetSpiModifier(0); SetAgiModifier(0); SetIsDefending(false); SetCharged(false); attribute_shift.clear(); attribute_shift.resize(Data::attributes.size()); } std::vector<int16_t>& states = GetStates(); if (state_id - 1 >= static_cast<int>(states.size())) { states.resize(state_id); } states[state_id - 1] = 1; // Clear states that are more than 10 priority points below the // significant state const RPG::State* sig_state = GetSignificantState(); for (size_t i = 0; i < states.size(); ++i) { if (Data::states[i].priority <= sig_state->priority - 10) { states[i] = 0; } } if (IsDefending() && GetSignificantRestriction() != RPG::State::Restriction_normal) { SetIsDefending(false); } }
Animatable::~Animatable() { RemoveAllStates(); }