|
From: <mk...@us...> - 2003-07-18 21:01:00
|
Update of /cvsroot/csp/APPLICATIONS/CSPSim/Source
In directory sc8-pr-cvs1:/tmp/cvs-serv24973/Source
Modified Files:
AircraftObject.cpp
Log Message:
Index: AircraftObject.cpp
===================================================================
RCS file: /cvsroot/csp/APPLICATIONS/CSPSim/Source/AircraftObject.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** AircraftObject.cpp 30 Jun 2003 22:27:58 -0000 1.24
--- AircraftObject.cpp 18 Jul 2003 21:00:57 -0000 1.25
***************
*** 27,30 ****
--- 27,32 ----
#include "AircraftObject.h"
#include "AircraftPhysicsModel.h"
+ #include "FlightModel.h"
+ #include "Animation.h"
#include "Collision.h"
#include "Profile.h"
***************
*** 53,56 ****
--- 55,59 ----
m_Rudder = 0.0;
m_Throttle = 0.0;
+ m_Airbrake = 0.0;
m_dThrottleInput = 0.0;
***************
*** 71,74 ****
--- 74,79 ----
m_RudderMin = -1.0;
m_RudderMax = -1.0;
+ m_AirbrakeMax = 1.0;
+ m_AirbrakeRate = 1.0;
m_AileronInput = 0.0;
***************
*** 76,79 ****
--- 81,85 ----
m_RudderInput = 0.0;
m_ThrottleInput = 0.0;
+ m_AirbrakeInput = 0.0;
m_decayAileron = 0;
***************
*** 89,92 ****
--- 95,99 ----
BIND_AXIS("ELEVATOR", setElevator);
BIND_AXIS("RUDDER", setRudder);
+ BIND_AXIS("AIRBRAKE", setAirbrake);
BIND_ACTION("INC_THROTTLE", IncThrottle);
BIND_ACTION("STOP_INC_THROTTLE", noIncThrottle);
***************
*** 101,104 ****
--- 108,115 ----
BIND_ACTION("DEC_ELEVATOR", DecElevator);
BIND_ACTION("STOP_DEC_ELEVATOR", noDecElevator);
+ BIND_ACTION("INC_AIRBRAKE", IncAirbrake);
+ BIND_ACTION("DEC_AIRBRAKE", DecAirbrake);
+ BIND_ACTION("OPEN_AIRBRAKE", OpenAirbrake);
+ BIND_ACTION("CLOSE_AIRBRAKE", CloseAirbrake);
BIND_ACTION("SMOKE_ON", SmokeOn);
BIND_ACTION("SMOKE_OFF", SmokeOff);
***************
*** 130,133 ****
--- 141,146 ----
p.pack(m_RudderMin);
p.pack(m_RudderMax);
+ p.pack(m_AirbrakeMax);
+ p.pack(m_AirbrakeRate);
p.pack(m_AircraftDynamics);
}
***************
*** 142,148 ****
--- 155,174 ----
p.unpack(m_RudderMin);
p.unpack(m_RudderMax);
+ p.unpack(m_AirbrakeMax);
+ p.unpack(m_AirbrakeRate);
p.unpack(m_AircraftDynamics);
}
+ void AircraftObject::convertXML() {
+ m_AileronMin = DegreesToRadians(m_AileronMin);
+ m_AileronMax = DegreesToRadians(m_AileronMax);
+ m_ElevatorMin = DegreesToRadians(m_ElevatorMin);
+ m_ElevatorMax = DegreesToRadians(m_ElevatorMax);
+ m_RudderMin = DegreesToRadians(m_RudderMin);
+ m_RudderMax = DegreesToRadians(m_RudderMax);
+ m_AirbrakeMax = DegreesToRadians(m_AirbrakeMax);
+ m_AirbrakeRate = DegreesToRadians(m_AirbrakeRate);
+ }
+
void AircraftObject::postCreate() {
DynamicObject::postCreate();
***************
*** 153,159 ****
m_AircraftPhysicsModel->setInertia(m_Mass, m_Inertia);
! m_PrimaryAeroDynamics = m_AircraftDynamics->getAeroDynamics();
! m_PrimaryAeroDynamics->setMassInverse(1.0 / m_Mass);
! m_AircraftPhysicsModel->addDynamics(m_PrimaryAeroDynamics.get());
m_EngineDynamics = m_AircraftDynamics->getEngineDynamics();
--- 179,188 ----
m_AircraftPhysicsModel->setInertia(m_Mass, m_Inertia);
! //m_PrimaryAeroDynamics = m_AircraftDynamics->getAeroDynamics();
! //m_PrimaryAeroDynamics->setMassInverse(1.0 / m_Mass);
! //m_AircraftPhysicsModel->addDynamics(m_PrimaryAeroDynamics.get());
! m_FlightDynamics = m_AircraftDynamics->getFlightDynamics();
! m_FlightDynamics->setMassInverse(1.0 / m_Mass);
! m_AircraftPhysicsModel->addDynamics(m_FlightDynamics.get());
m_EngineDynamics = m_AircraftDynamics->getEngineDynamics();
***************
*** 243,254 ****
}
void AircraftObject::doFCS(double dt)
{
CSP_LOG(OBJECT, DEBUG, "AircraftObject::doFCS ...");
// FIXME: very temporary fcs mappings
! m_Rudder = m_RudderInput * m_RudderMax * 0.017;
! m_Aileron = m_AileronInput * m_AileronMax * 0.017;
! m_Elevator = m_ElevatorInput * m_ElevatorMax * 0.017;
m_Throttle = m_ThrottleInput;
CSP_LOG(OBJECT, DEBUG, " ... AircraftObject::doFCS");
}
--- 272,329 ----
}
+
+ void AircraftObject::bindAnimations() {
+ if (!m_SceneModel) return;
+ m_AnimateRudder = m_SceneModel->bindAnimationChannel("Aircraft.Rudder", new AnimationValueChannel);
+ m_AnimateElevator = m_SceneModel->bindAnimationChannel("Aircraft.Elevator", new AnimationValueChannel);
+ m_AnimateAileron = m_SceneModel->bindAnimationChannel("Aircraft.Aileron", new AnimationValueChannel);
+ m_AnimateAirbrake = m_SceneModel->bindAnimationChannel("Aircraft.Airbrake", new AnimationValueChannel);
+ }
+
+ void AircraftObject::initDataRecorder() {
+ DynamicObject::initDataRecorder();
+ m_Recorder.bind(m_DataRecorder.get());
+ m_Recorder.addChannel(CH_AILERON_DEFLECTION, "aileron deflection");
+ m_Recorder.addChannel(CH_ELEVATOR_DEFLECTION, "elevator deflection");
+ m_Recorder.addChannel(CH_RUDDER_DEFLECTION, "rudder deflection");
+ m_FlightDynamics->initDataRecorder(m_DataRecorder.get());
+ }
+
void AircraftObject::doFCS(double dt)
{
CSP_LOG(OBJECT, DEBUG, "AircraftObject::doFCS ...");
+ // FIXME: proper min-max limits
// FIXME: very temporary fcs mappings
! m_Rudder = m_RudderInput * m_RudderMax;
! m_Aileron = m_AileronInput * m_AileronMax;
! m_Elevator = m_ElevatorInput * m_ElevatorMax;
m_Throttle = m_ThrottleInput;
+
+ {
+ float dAirbrake = m_AirbrakeMax * m_AirbrakeInput - m_Airbrake;
+ float dMax = m_AirbrakeRate * dt;
+ if (dAirbrake > 0.0) {
+ dAirbrake = std::min(dMax, dAirbrake);
+ } else {
+ dAirbrake = std::max(-dMax, dAirbrake);
+ }
+ m_Airbrake += dAirbrake;
+ CLIP(m_Airbrake, 0.0, m_AirbrakeMax);
+ }
+
+ // XXX very preliminary animation testing
+ if (m_SceneModel.valid()) {
+ m_AnimateRudder->value() = m_Rudder;
+ m_AnimateAileron->value() = m_Aileron;
+ m_AnimateElevator->value() = m_Elevator;
+ m_AnimateAirbrake->value() = m_Airbrake;
+ }
+
+ if (m_Recorder.isEnabled()) {
+ m_Recorder.record(CH_AILERON_DEFLECTION, m_Aileron);
+ m_Recorder.record(CH_ELEVATOR_DEFLECTION, m_Elevator);
+ m_Recorder.record(CH_RUDDER_DEFLECTION, m_Rudder);
+ }
+
CSP_LOG(OBJECT, DEBUG, " ... AircraftObject::doFCS");
}
***************
*** 269,272 ****
--- 344,352 ----
}
+ void AircraftObject::setAirbrake(double x)
+ {
+ m_AirbrakeInput = x;
+ }
+
void AircraftObject::setElevator(double x)
{
***************
*** 336,339 ****
--- 416,435 ----
}
+ void AircraftObject::OpenAirbrake() {
+ m_AirbrakeInput = 1.0;
+ }
+
+ void AircraftObject::CloseAirbrake() {
+ m_AirbrakeInput = 0.0;
+ }
+
+ void AircraftObject::DecAirbrake() {
+ m_AirbrakeInput = std::max(m_Airbrake - 0.1, 0.0);
+ }
+
+ void AircraftObject::IncAirbrake() {
+ m_AirbrakeInput = std::min(m_Airbrake + 0.1, 1.0);
+ }
+
void AircraftObject::SmokeOn() {
enableSmoke();
***************
*** 408,415 ****
m_Heading = heading;
- /*attitude = simdata::Quaternion::MakeQFromEulerAngles( m_Pitch,
- m_Roll,
- m_Heading);*/
-
// use standard Euler convension (X axis is roll, Y is pitch, Z is yaw).
attitude = simdata::Quaternion::MakeQFromEulerAngles(m_Roll, m_Pitch, -m_Heading);
--- 504,507 ----
***************
*** 496,500 ****
void AircraftObject::doComplexPhysics(double dt) {
- m_PrimaryAeroDynamics->setControlSurfaces(m_Aileron, m_Elevator, m_Rudder);
// FIXME: calibrate joystick positions for csp
m_EngineDynamics->setThrottle(2.0 * m_Throttle);
--- 588,591 ----
***************
*** 508,512 ****
//damage modelling.
! m_PrimaryAeroDynamics->setControlSurfaces(m_Aileron, m_Elevator, m_Rudder);
m_AircraftPhysicsModel->setGroundZ(m_GroundZ);
m_AircraftPhysicsModel->setGroundN(m_GroundN);
--- 599,604 ----
//damage modelling.
! //m_PrimaryAeroDynamics->setControlSurfaces(m_Aileron, m_Elevator, m_Rudder, m_Airbrake);
! m_FlightDynamics->setControlSurfaces(m_Aileron, m_Elevator, m_Rudder, m_Airbrake);
m_AircraftPhysicsModel->setGroundZ(m_GroundZ);
m_AircraftPhysicsModel->setGroundN(m_GroundN);
***************
*** 550,567 ****
void AircraftDynamics::pack(simdata::Packer& p) const {
! simdata::Object::pack(p);
! p.pack(m_PrimaryAeroDynamics);
p.pack(m_EngineDynamics);
! p.pack(m_GearDynamics);
}
void AircraftDynamics::unpack(simdata::UnPacker& p) {
! simdata::Object::unpack(p);
! p.unpack(m_PrimaryAeroDynamics);
p.unpack(m_EngineDynamics);
! p.unpack(m_GearDynamics);
}
--- 642,664 ----
void AircraftDynamics::pack(simdata::Packer& p) const {
! Object::pack(p);
! //p.pack(m_PrimaryAeroDynamics);
! p.pack(m_FlightModel);
p.pack(m_EngineDynamics);
! p.pack(m_GearDynamics);
}
void AircraftDynamics::unpack(simdata::UnPacker& p) {
! Object::unpack(p);
! //p.unpack(m_PrimaryAeroDynamics);
! p.unpack(m_FlightModel);
p.unpack(m_EngineDynamics);
! p.unpack(m_GearDynamics);
}
+ void AircraftDynamics::postCreate() {
+ m_FlightDynamics = m_FlightModel->newFlightDynamics();
+ }
|