Example #1
0
void PatrolPoint::acceptPosition()
{
  FortPtr fort = ptr_cast<Fort>( _city()->getOverlay( _d->basePos ) );
  if( fort.isValid() )
  {
    fort->changePatrolArea();
  }
}
Example #2
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 #4
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 #5
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 #6
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;
}