sbrFlightModel::sbrFlightModel(Flight *flit) { sPoint position; sAttitude attitude; this->flight = flit; R_3DPoint2sPoint(LOOK_FROM,position); Port2sAttitude(FLIGHT_PORT,attitude); sSlewer::SetPositionAndAttitude(position,attitude); turnRate = 0.0; }
void sbrFlightModel::Rotate(const sAttitude &rotateMatrix) { sPoint position; sAttitude attitude; FLIGHT_PORT.rotate(CvToSabreAngle(rotateMatrix.pitch), CvToSabreAngle(rotateMatrix.roll), CvToSabreAngle(rotateMatrix.yaw)); R_3DPoint2sPoint(LOOK_FROM,position); Port2sAttitude(FLIGHT_PORT,attitude); sSlewer::SetPositionAndAttitude(position,attitude); }
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::Update(double /* ignored */) { sPoint position; sAttitude attitude; flight->l_time = time_frame; if (flight->l_time <= 0.0) flight->l_time = C(0.1); flight->applyForces(flight->l_time); flight->applyRotations(flight->l_time); flight->calcState(flight->l_time); DoControlCallback(); flight->calcForces(flight->l_time); flight->calcRotations(flight->l_time); /* call Flight::Update() */ /* convert position and attitude */ R_3DPoint2sPoint(LOOK_FROM,position); Port2sAttitude(FLIGHT_PORT,attitude); turnRate = (attitude.yaw - att.yaw) / time_frame; sSlewer::SetPositionAndAttitude(position,attitude); }