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(); + } |