sREAL sbrFlightModel::GetGroundHeight(const sPoint &s0) { R_3DPoint p0; sPoint2R_3DPoint(s0,p0); return (sREAL) (getGroundLevel(p0) / world_scale); }
void sbrFlightModel::SetPositionAndAttitude(const sPoint &position, const sAttitude &attitude) { sPoint lookAt; R_3DPoint look_at; R_3DPoint look_from; Vector v; sSlewer::SetPositionAndAttitude(position,attitude); sPoint2R_3DPoint(position,look_from); lookAt = position + dirNormal; sPoint2R_3DPoint(lookAt,look_at); FLIGHT_PORT.set_view(look_from,look_at); FLIGHT_PORT.set_roll(CvToSabreAngle(attitude.roll)); sVector2Vector(dirNormal,v); STATE.velocity.direction = v; }
void Pilot::CalcGunLeadPoint(sTargetGeometry &tg) { REAL_TYPE t; sVector temp; sPoint leadPoint; sPoint ourPosition; sPoint gunPoint; sAttitude ourAtt; sAttitude gunPointAtt; sAttitude leadPointAtt; in_range = 0; GetPositionAndAttitude(ourPosition,ourAtt); if (!target) t = 1.0; else { time_to_target = sel_weapon->calc_hvtime(*flight,*target->get_position()); if (tg.range <= gunAttackDistance) { in_range = 1; t = time_to_target; } else t = 1.0; } gun_point = sel_weapon->predict_path(*flight,t); R_3DPoint2sPoint(gun_point,gunPoint); GetAttitude(gunPoint,temp,gunPointAtt); sPoint2R_3DPoint(tg.worldPosition,sel_weapon->target_position); temp = tg.worldVelocity; temp *= t; leadPoint = tg.worldPosition + temp; tg.gunLeadPoint = leadPoint; GetAttitude(leadPoint,temp,leadPointAtt); tg.gunLeadAttitude.pitch = leadPointAtt.pitch - gunPointAtt.pitch; tg.gunLeadAttitude.yaw = leadPointAtt.yaw - gunPointAtt.yaw; tg.gunLeadRangeSq = sDistanceSquared(tg.gunLeadPoint,ourPosition); tg.gunTOF = time_to_target; sPoint2R_3DPoint(tg.worldPosition,track_point); sPoint2R_3DPoint(tg.leadPoint,lead_track_point); sPoint2R_3DPoint(tg.gunLeadPoint,gun_track_point); }
void sbrFlightModel::SetPosition(const sPoint &position) { R_3DPoint look_from; sPoint2R_3DPoint(position,look_from); FLIGHT_PORT.set_look_from(look_from); sSlewer::SetPosition(pos); }