bool Weapon::hasRangedAttack() const { for(uint n = 0; n < count<AttackMode>(); n++) { AttackMode mode = (AttackMode)n; if(isRanged(mode) && proto().attack_modes & toFlags(mode)) return true; } return false; }
void CAutomatonController::Move() { float currentDistance = distanceSquared(PAutomaton->loc.p, PTarget->loc.p); if (isRanged() && (currentDistance > 225) || (PAutomaton->health.mp < 8 && PAutomaton->health.maxmp > 8)) { PAutomaton->m_Behaviour &= ~BEHAVIOUR_STANDBACK; } CPetController::Move(); }
bool CAutomatonController::Disengage() { PTarget = nullptr; if (isRanged()) { PAutomaton->m_Behaviour |= BEHAVIOUR_STANDBACK; } return CMobController::Disengage(); }
CAutomatonController::CAutomatonController(CAutomatonEntity* PPet) : CPetController(PPet), PAutomaton(PPet) { PPet->setInitialBurden(); setCooldowns(); if (isRanged()) { PAutomaton->m_Behaviour |= BEHAVIOUR_STANDBACK; } }
void AstBasicDType::dump(ostream& str) { this->AstNodeDType::dump(str); str<<" kwd="<<keyword().ascii(); if (isRanged() && !rangep()) str<<" range=["<<left()<<":"<<right()<<"]"; }
float Weapon::range(AttackMode mode) const { return isRanged(mode)? proto().ranged_range : proto().melee_range; }
void AstBasicDType::dump(ostream& str) { this->AstNodeDType::dump(str); str<<" kwd="<<keyword().ascii(); if (isRanged() && !rangep()) str<<" range=["<<msb()<<":"<<lsb()<<"]"; if (implicit()) str<<" [IMPLICIT]"; }