本文整理汇总了C++中WorldModel::offsideLineX方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldModel::offsideLineX方法的具体用法?C++ WorldModel::offsideLineX怎么用?C++ WorldModel::offsideLineX使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldModel
的用法示例。
在下文中一共展示了WorldModel::offsideLineX方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pos
/*!
*/
void
CrossGenerator::updateReceivers( const WorldModel & wm )
{
static const double shootable_dist2 = std::pow( 16.0, 2 ); // Magic Number
static const double min_cross_dist2
= std::pow( ServerParam::i().defaultKickableArea() * 2.2, 2 );
static const double max_cross_dist2
= std::pow( inertia_n_step_distance( ServerParam::i().ballSpeedMax(),
9,
ServerParam::i().ballDecay() ),
2 );
const Vector2D goal = ServerParam::i().theirTeamGoalPos();
const bool is_self_passer = ( M_passer->unum() == wm.self().unum() );
for ( AbstractPlayerCont::const_iterator
p = wm.ourPlayers().begin(),
end = wm.ourPlayers().end();
p != end;
++p )
{
if ( *p == M_passer ) continue;
if ( is_self_passer )
{
if ( (*p)->isGhost() ) continue;
if ( (*p)->posCount() >= 4 ) continue;
if ( (*p)->pos().x > wm.offsideLineX() ) continue;
}
else
{
// ignore other players
if ( (*p)->unum() != wm.self().unum() )
{
continue;
}
}
if ( (*p)->pos().dist2( goal ) > shootable_dist2 ) continue;
double d2 = (*p)->pos().dist2( M_first_point );
if ( d2 < min_cross_dist2 ) continue;
if ( max_cross_dist2 < d2 ) continue;
M_receiver_candidates.push_back( *p );
#ifdef DEBUG_UPDATE_OPPONENT
dlog.addText( Logger::CROSS,
"Cross receiver %d pos(%.1f %.1f)",
(*p)->unum(),
(*p)->pos().x, (*p)->pos().y );
#endif
}
}
示例2: s_update_time
/*!
*/
void
Strategy::updatePosition( const WorldModel & wm )
{
static GameTime s_update_time( 0, 0 );
if ( s_update_time == wm.time() )
{
return;
}
s_update_time = wm.time();
Formation::Ptr f = getFormation( wm );
if ( ! f )
{
std::cerr << wm.teamName() << ':' << wm.self().unum() << ": "
<< wm.time()
<< " ***ERROR*** could not get the current formation" << std::endl;
return;
}
int ball_step = 0;
if ( wm.gameMode().type() == GameMode::PlayOn
|| wm.gameMode().type() == GameMode::GoalKick_ )
{
ball_step = std::min( 1000, wm.interceptTable()->teammateReachCycle() );
ball_step = std::min( ball_step, wm.interceptTable()->opponentReachCycle() );
ball_step = std::min( ball_step, wm.interceptTable()->selfReachCycle() );
}
Vector2D ball_pos = wm.ball().inertiaPoint( ball_step );
dlog.addText( Logger::TEAM,
__FILE__": HOME POSITION: ball pos=(%.1f %.1f) step=%d",
ball_pos.x, ball_pos.y,
ball_step );
M_positions.clear();
f->getPositions( ball_pos, M_positions );
if ( ServerParam::i().useOffside() )
{
double max_x = wm.offsideLineX();
if ( ServerParam::i().kickoffOffside()
&& ( wm.gameMode().type() == GameMode::BeforeKickOff
|| wm.gameMode().type() == GameMode::AfterGoal_ ) )
{
max_x = 0.0;
}
else
{
int mate_step = wm.interceptTable()->teammateReachCycle();
if ( mate_step < 50 )
{
Vector2D trap_pos = wm.ball().inertiaPoint( mate_step );
if ( trap_pos.x > max_x ) max_x = trap_pos.x;
}
max_x -= 1.0;
}
for ( int unum = 1; unum <= 11; ++unum )
{
if ( M_positions[unum-1].x > max_x )
{
dlog.addText( Logger::TEAM,
"____ %d offside. home_pos_x %.2f -> %.2f",
unum,
M_positions[unum-1].x, max_x );
M_positions[unum-1].x = max_x;
}
}
}
M_position_types.clear();
for ( int unum = 1; unum <= 11; ++unum )
{
PositionType type = Position_Center;
if ( f->isSideType( unum ) )
{
type = Position_Left;
}
else if ( f->isSymmetryType( unum ) )
{
type = Position_Right;
}
M_position_types.push_back( type );
dlog.addText( Logger::TEAM,
"__ %d home pos (%.2f %.2f) type=%d",
unum,
M_positions[unum-1].x, M_positions[unum-1].y,
type );
dlog.addCircle( Logger::TEAM,
M_positions[unum-1], 0.5,
"#000000" );
}
}
示例3: min
/*!
*/
double
Strategy::get_normal_dash_power( const WorldModel & wm )
{
static bool s_recover_mode = false;
if ( wm.self().staminaModel().capacityIsEmpty() )
{
return std::min( ServerParam::i().maxDashPower(),
wm.self().stamina() + wm.self().playerType().extraStamina() );
}
const int self_min = wm.interceptTable()->selfReachCycle();
const int mate_min = wm.interceptTable()->teammateReachCycle();
const int opp_min = wm.interceptTable()->opponentReachCycle();
// check recover
if ( wm.self().staminaModel().capacityIsEmpty() )
{
s_recover_mode = false;
}
else if ( wm.self().stamina() < ServerParam::i().staminaMax() * 0.5 )
{
s_recover_mode = true;
}
else if ( wm.self().stamina() > ServerParam::i().staminaMax() * 0.7 )
{
s_recover_mode = false;
}
/*--------------------------------------------------------*/
double dash_power = ServerParam::i().maxDashPower();
const double my_inc
= wm.self().playerType().staminaIncMax()
* wm.self().recovery();
if ( wm.ourDefenseLineX() > wm.self().pos().x
&& wm.ball().pos().x < wm.ourDefenseLineX() + 20.0 )
{
dlog.addText( Logger::TEAM,
__FILE__": (get_normal_dash_power) correct DF line. keep max power" );
// keep max power
dash_power = ServerParam::i().maxDashPower();
}
else if ( s_recover_mode )
{
dash_power = my_inc - 25.0; // preffered recover value
if ( dash_power < 0.0 ) dash_power = 0.0;
dlog.addText( Logger::TEAM,
__FILE__": (get_normal_dash_power) recovering" );
}
// exist kickable teammate
else if ( wm.existKickableTeammate()
&& wm.ball().distFromSelf() < 20.0 )
{
dash_power = std::min( my_inc * 1.1,
ServerParam::i().maxDashPower() );
dlog.addText( Logger::TEAM,
__FILE__": (get_normal_dash_power) exist kickable teammate. dash_power=%.1f",
dash_power );
}
// in offside area
else if ( wm.self().pos().x > wm.offsideLineX() )
{
dash_power = ServerParam::i().maxDashPower();
dlog.addText( Logger::TEAM,
__FILE__": in offside area. dash_power=%.1f",
dash_power );
}
else if ( wm.ball().pos().x > 25.0
&& wm.ball().pos().x > wm.self().pos().x + 10.0
&& self_min < opp_min - 6
&& mate_min < opp_min - 6 )
{
dash_power = bound( ServerParam::i().maxDashPower() * 0.1,
my_inc * 0.5,
ServerParam::i().maxDashPower() );
dlog.addText( Logger::TEAM,
__FILE__": (get_normal_dash_power) opponent ball dash_power=%.1f",
dash_power );
}
// normal
else
{
dash_power = std::min( my_inc * 1.7,
ServerParam::i().maxDashPower() );
dlog.addText( Logger::TEAM,
__FILE__": (get_normal_dash_power) normal mode dash_power=%.1f",
dash_power );
}
return dash_power;
}