Example #1
0
void PatrolPoint::acceptPosition()
{
  FortPtr fort = ptr_cast<Fort>( _city()->getOverlay( _d->basePos ) );
  if( fort.isValid() )
  {
    fort->changePatrolArea();
  }
}
Example #2
0
void RomeSoldier::send2city(FortPtr base, TilePos pos )
{
  setPos( pos );
  _d->basePos = base->pos();
  _back2base();
  attach();
}
Example #3
0
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();
  }
}
Example #5
0
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();
  }
}
Example #6
0
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();
  }
}
Example #7
0
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;
}
Example #8
0
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;
}
Example #9
0
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;
}