本文整理汇总了C++中WorldInterface::getRadius方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldInterface::getRadius方法的具体用法?C++ WorldInterface::getRadius怎么用?C++ WorldInterface::getRadius使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldInterface
的用法示例。
在下文中一共展示了WorldInterface::getRadius方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run
void UnitAiMoonGuard :: run (const WorldInterface& world)
{
assert(world.isAlive(getShipId()));
scan(world);
Vector3 v = getShip().getVelocity();
if (nearestEnemyShip != PhysicsObjectId::ID_NOTHING)
{
v = chargeAtTarget(world, nearestEnemyShip, v);
shootAtShip(world, nearestEnemyShip);
}
else
{
Vector3 moon_pos = world.getPosition(moon);
double moon_radius = world.getRadius(moon);
v = steeringBehaviour->patrolSphere(world,
moon_pos,
moon_radius,
PLANETOID_AVOID_DISTANCE);
//printf("Patrolling...\n");
}
v = avoidShips(world, v);
v = avoidRingParticles(world, v);
getShipAi().setDesiredVelocity(v);
}
示例2: patrolMoon
void UnitAiMoonGuard::patrolMoon(const WorldInterface& world, const PhysicsObjectId& moonID)
{
Vector3 planetoid_center = world.getPosition(moonID);
double planetoid_radius = world.getRadius(moonID);
Vector3 desired_velocity = m_steering_behaviour.patrolSphere(world, planetoid_center,
planetoid_radius + PLANETOID_CLEARANCE,
planetoid_radius + Const::SHELL_THICKNESS);
Vector3 avoid_velocity = avoidPlanets(world, desired_velocity);
avoid_velocity = avoidParticles(world, avoid_velocity);
avoid_velocity = avoidShips(world, avoid_velocity);
getShipAi().setDesiredVelocity(avoid_velocity);
}
示例3: avoidPlanets
Vector3 UnitAiMoonGuard::avoidPlanets(const WorldInterface& world, const Vector3& originalVelocity)
{
PhysicsObjectId planetoid_id = world.getNearestPlanetoidId(getShip().getPosition());
Vector3 planetoid_center = world.getPosition(planetoid_id);
double planetoid_radius = world.getRadius(planetoid_id);
return m_steering_behaviour.avoid(world,
originalVelocity,
planetoid_center,
planetoid_radius,
PLANETOID_CLEARANCE,
PLANETOID_AVOID_DISTANCE);
}
示例4: avoidPlanetoids
Vector3 UnitAiMoonGuard::avoidPlanetoids(const WorldInterface &world, const Vector3& orig_velocity)
{
Vector3 planetoid_pos = world.getPosition(nearestPlanetoid);
double planetoid_radius = world.getRadius(nearestPlanetoid);
Vector3 v = steeringBehaviour->avoid(world,
orig_velocity,
planetoid_pos,
planetoid_radius,
PLANETOID_CLEARANCE,
PLANETOID_AVOID_DISTANCE);
//printf("Avoiding Planetoid\n");
return v;
}
示例5: avoidShips
Vector3 UnitAiMoonGuard::avoidShips(const WorldInterface &world, const Vector3& orig_velocity)
{
if (nearestShip == PhysicsObjectId::ID_NOTHING ||
!world.isAlive(nearestShip) ||
nearestShip == nearestEnemyShip)
{
return orig_velocity;
}
Vector3 target_pos = world.getPosition(nearestShip);
double target_radius = world.getRadius(nearestShip);
Vector3 v = steeringBehaviour->avoid(world,
orig_velocity,
target_pos,
target_radius,
SHIP_CLEARANCE,
SHIP_AVOID_DISTANCE);
//printf("\tAvoiding Ships\n");
return v;
}
示例6: avoid
// avoid only when going to collide
Vector3 SteeringBehaviour :: avoid (const WorldInterface& world,
const Vector3& original_velocity,
const Vector3& sphere_center,
double sphere_radius,
double clearance,
double avoid_distance) const
{
assert(sphere_radius >= 0.0);
assert(clearance > 0.0);
assert(clearance <= avoid_distance);
if(!world.isAlive(m_id_agent) ||
original_velocity.isZero())
{
assert(invariant());
return Vector3::ZERO;
}
Vector3 agent_position = world.getPosition(m_id_agent);
double agent_radius = world.getRadius(m_id_agent);
double desired_speed = world.getShipSpeedMax(m_id_agent);
Vector3 relative_position = sphere_center - agent_position;
double radius_sum = sphere_radius + agent_radius;
if(relative_position.isNormGreaterThan(radius_sum + avoid_distance))
{
if(DEBUGGING_AVOID)
cout << "Avoid: Outside avoid distance" << endl;
assert(invariant());
return original_velocity.getTruncated(desired_speed); // too far away to worry about
}
Vector3 agent_forward = world.getForward(m_id_agent);
if(relative_position.dotProduct(agent_forward) < 0.0)
{
// past center of object; no cylinder
if(DEBUGGING_AVOID)
cout << "Avoid: Departing from object" << endl;
if(relative_position.isNormLessThan(radius_sum + clearance))
{
// we are too close, so flee and slow down
double distance_fraction = (relative_position.getNorm() - radius_sum) / clearance;
if(DEBUGGING_AVOID)
cout << "\tInside panic distance: fraction = " << distance_fraction << endl;
if(distance_fraction < 0.0)
distance_fraction = 0.0;
Vector3 interpolated = original_velocity.getNormalized() * distance_fraction +
-relative_position.getNormalized() * (1.0 - distance_fraction);
if(distance_fraction > AVOID_SPEED_FACTOR_MIN)
desired_speed *= distance_fraction;
else
desired_speed *= AVOID_SPEED_FACTOR_MIN;
if(original_velocity.isNormLessThan(desired_speed))
desired_speed = original_velocity.getNorm();
assert(invariant());
return interpolated.getCopyWithNorm(desired_speed);
}
else
{
if(DEBUGGING_AVOID)
cout << "\tPast object" << endl;
assert(invariant());
return original_velocity.getTruncated(desired_speed); // far enough past object
}
}
else
{
// have not reached center of object; check against cylinder
if(DEBUGGING_AVOID)
cout << "Avoid: Approaching object" << endl;
double distance_from_cylinder_center = relative_position.getAntiProjection(agent_forward).getNorm();
double clearance_fraction = (distance_from_cylinder_center - radius_sum) / clearance;
if(DEBUGGING_AVOID)
{
cout << "\tTo sphere: " << relative_position << endl;
cout << "\tDistance_from_cylinder_center: " << distance_from_cylinder_center << endl;
cout << "\tRadius_sum: " << radius_sum << endl;
cout << "\tClearance: " << clearance << endl;
cout << "\tFraction: " << clearance_fraction << endl;
}
if(clearance_fraction < 0.0)
{
clearance_fraction = 0.0;
if(DEBUGGING_AVOID)
cout << "\tLined up at sphere" << endl;
}
if(clearance_fraction > 1.0)
{
if(DEBUGGING_AVOID)
//.........这里部分代码省略.........