Esempio n. 1
0
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;
}
Esempio n. 2
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);
}
Esempio n. 3
0
File: pilot.C Progetto: zear/sabre
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);
}
Esempio n. 4
0
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);
}