本文整理汇总了C++中WorldInterface::getForward方法的典型用法代码示例。如果您正苦于以下问题:C++ WorldInterface::getForward方法的具体用法?C++ WorldInterface::getForward怎么用?C++ WorldInterface::getForward使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WorldInterface
的用法示例。
在下文中一共展示了WorldInterface::getForward方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: chargeAtTarget
Vector3 UnitAiMoonGuard::chargeAtTarget(const WorldInterface& world, const PhysicsObjectId& target, const Vector3& orig_velocity)
{
if (!world.isAlive(target))
{
return orig_velocity;
}
Vector3 unit_pos = getShip().getPosition();
Vector3 target_pos = world.getPosition(target);
Vector3 target_forward = world.getForward(target);
//Vector3 desired_velocity = steeringBehaviour->seek(world, target);
Vector3 desired_velocity = steeringBehaviour->aim(world, target, Bullet::SPEED);
//Vector3 desired_velocity = steeringBehaviour->escort(world, target, -target_forward * 50);
Vector3 v = avoidPlanetoids(world, desired_velocity);
//printf("\tRamming\n");
return v;
}
示例2: calculateEscortPosition
Vector3 SteeringBehaviour :: calculateEscortPosition (const WorldInterface& world,
const PhysicsObjectId& id_target,
const Vector3& offset) const
{
assert(m_steering_behaviour == ESCORT);
assert(id_target != PhysicsObjectId::ID_NOTHING);
if(!world.isAlive(id_target))
return Vector3::ZERO;
Vector3 target_position = world.getPosition(id_target);
Vector3 target_forward = world.getForward (id_target);
Vector3 target_up = world.getUp (id_target);
Vector3 target_right = world.getRight (id_target);
return target_position +
target_forward * offset.x +
target_up * offset.y +
target_right * offset.z;
}
示例3: 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)
//.........这里部分代码省略.........