void PatrolPoint::acceptPosition() { FortPtr fort = ptr_cast<Fort>( _city()->getOverlay( _d->basePos ) ); if( fort.isValid() ) { fort->changePatrolArea(); } }
void FortCurseByMars::timeStep(ConstructionPtr parent, unsigned int time) { if( game::Date::isWeekChanged() ) { FortPtr base = parent.as<Fort>(); if( !base.isValid() ) { Logger::warning( "FortCurseByMars::run base is null "); _isDeleted = true; return; } SoldierList sldrs = base->soldiers(); foreach( it, sldrs ) { (*it)->updateMorale( -100 ); } }
void RomeSoldier::load(const VariantMap& stream) { Soldier::load( stream ); VARIANT_LOAD_ANY_D( _d, strikeForce, stream ); VARIANT_LOAD_ANY_D( _d, resistance, stream ); VARIANT_LOAD_ANY_D( _d, patrolPosition, stream ); VARIANT_LOAD_ANY_D( _d, basePos, stream ); FortPtr fort = ptr_cast<Fort>( _city()->getOverlay( _d->basePos ) ); if( fort.isValid() ) { fort->addWalker( this ); } else { die(); } }
void RomeSoldier::_back2base() { FortPtr b = base(); if( b.isValid() ) { Pathway way = PathwayHelper::create( pos(), b->freeSlot( this ), PathwayHelper::allTerrain ); if( way.isValid() ) { setPathway( way ); _setSubAction( go2position ); go(); return; } } else { die(); } }
void RomeSoldier::load(const VariantMap& stream) { Soldier::load( stream ); VARIANT_LOAD_ANY_D( _d, strikeForce, stream ); VARIANT_LOAD_ANY_D( _d, resistance, stream ); VARIANT_LOAD_ANY_D( _d, patrolPosition, stream ); VARIANT_LOAD_ANY_D( _d, basePos, stream ); FortPtr fort = _city()->getOverlay( _d->basePos ).as<Fort>(); if( fort.isValid() ) { fort->addWalker( this ); } else { Logger::warning( "!!! WARNING: RomeSoldier cant find base for himself at [%d,%d]", _d->basePos.i(), _d->basePos.j() ); die(); } }
WalkerList RomeSoldier::_findEnemiesInRange( unsigned int range ) { WalkerList walkers; TilesArea area( _city()->tilemap(), range, pos() ); FortPtr fort = base(); bool attackAnimals = fort.isValid() ? fort->isAttackAnimals() : false; for( auto tile : area ) { WalkerList tileWalkers = _city()->walkers( tile->pos() ); for( auto w : tileWalkers ) { bool isAgressive = w->agressive() > 0; bool myAttackAnimal = (attackAnimals && w.is<Animal>()); if( isAgressive || myAttackAnimal ) walkers << w; } } return walkers; }