void PatrolPoint::acceptPosition() { FortPtr fort = ptr_cast<Fort>( _city()->getOverlay( _d->basePos ) ); if( fort.isValid() ) { fort->changePatrolArea(); } }
void RomeSoldier::send2city(FortPtr base, TilePos pos ) { setPos( pos ); _d->basePos = base->pos(); _back2base(); attach(); }
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(); } }
PatrolPointPtr PatrolPoint::create( PlayerCityPtr city, FortPtr base, std::string prefix, int startPos, int stepNumber, TilePos position) { PatrolPoint* pp = new PatrolPoint( city ); pp->_d->basePos = base->pos(); pp->updateMorale( base->legionMorale() ); pp->_d->emblem = base->legionEmblem(); pp->_d->emblem.setOffset( animOffset + embemOffset + Point( -15, 30 ) ); Animation anim; anim.load( prefix, startPos, stepNumber ); anim.setOffset( anim.offset() + animOffset + extOffset ); pp->_d->animation = anim; pp->setPos( position ); PatrolPointPtr ptr( pp ); ptr->drop(); pp->attach(); return ptr; }
ConstructionExtensionPtr FortCurseByMars::assignTo(FortPtr fort, unsigned int monthsCurse) { FortCurseByMars* curse = new FortCurseByMars(); DateTime gdate = game::Date::current(); gdate.appendMonth( monthsCurse ); curse->_finishDate = gdate; ConstructionExtensionPtr ret( curse ); ret->drop(); fort->addExtension( ret ); return ret; }
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; }