// Set SRB class specs void Atlantis_SRB::clbkSetClassCaps (FILEHANDLE cfg) { extern PARTICLESTREAMSPEC srb_contrail, srb_exhaust; PARTICLESTREAMSPEC srb_bolt = { 0, 8.0, 20, 0.0, 0.1, 0.3, 16, 3.0, PARTICLESTREAMSPEC::EMISSIVE, PARTICLESTREAMSPEC::LVL_LIN, 0, 1, PARTICLESTREAMSPEC::ATM_FLAT, 1, 1 }; SetEnableFocus (false); // SRB cannot receive input focus // *********************** physical parameters ********************************* SetSize (23.0); SetEmptyMass (SRB_EMPTY_MASS); SetCW (0.1, 0.3, 1.4, 1.4); SetCrossSections (_V(162.1,162.1,26.6)); SetRotDrag (_V(0.7,0.7,0.1)); SetPMI (_V(154.3,154.3,1.83)); //SetGravityGradientDamping (10.0); SetTouchdownPoints (tdvtx, ntdvtx); SetLiftCoeffFunc (0); // ************************* docking port ************************************** CreateDock (_V(1.95,0,5),_V(1,0,0),_V(0,0,1)); // ET attachment // ************************* propellant specs ********************************** ph_main = CreatePropellantResource (SRB_MAX_PROPELLANT_MASS); // *********************** thruster definitions ******************************** // main engine th_main = CreateThruster (_V(0,0,-21), THRUSTGIMBAL_LAUNCH, SRB_THRUST_MAX, ph_main, SRB_ISP0, SRB_ISP1); SURFHANDLE tex = oapiRegisterExhaustTexture ("Exhaust2"); srb_exhaust.tex = oapiRegisterParticleTexture ("Contrail2"); AddExhaust (th_main, 16.0, 2.0, tex); AddExhaustStream (th_main, _V(0,0,-30), &srb_contrail); AddExhaustStream (th_main, _V(0,0,-25), &srb_exhaust); // separation bolts th_bolt = CreateThruster (_V(0,0,3.0), _V(-1,0,0), 3e6, ph_main, 1e7); // for simplicity, the separation bolts directly use SRB propellant. We give // them an insanely high ISP to avoid significant propellant drainage AddExhaust (th_bolt, 0.7, 0.1, _V(2.1,0,-8), _V(-1,0,0)); AddExhaust (th_bolt, 0.7, 0.1, _V(2.1,0,11), _V(-1,0,0)); AddExhaustStream (th_bolt, _V(2.1,0,0), &srb_bolt); // ************************ visual parameters ********************************** AddMesh (hSRBMesh); bMainEngine = false; bSeparationEngine = false; bGimbalCmd = false; srbpos = SRB_UNDEFINED; }
void Sat5Abort2::init() { SetSize (15); SetCOG_elev (15.225); SetEmptyMass (233000); SetMaxFuelMass (471000); SetFuelMass(444760); //SetISP (ISP_SECOND_VAC); SetISP (4780); //slThrust = CalcSeaLevelThrust(THRUST_SECOND_VAC,ISP_SECOND_VAC,ISP_SECOND_SL, 106000); //vacThrust = THRUST_SECOND_VAC; //vessel->SetMaxThrust (ENGINE_MAIN, slThrust); SetMaxThrust (ENGINE_MAIN, 6008625); SetMaxThrust (ENGINE_RETRO, 0); SetMaxThrust (ENGINE_HOVER, 0); SetMaxThrust (ENGINE_ATTITUDE, 5e4); SetEngineLevel(ENGINE_MAIN, 0.0); SetPMI (_V(374,374,80)); SetCrossSections (_V(524,524,97)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,1.2)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); //vessel->ShiftCentreOfMass (_V(0,0,12.25)); VECTOR3 mesh_dir=_V(0,0,-17.2-STG1O); AddMesh (hsat5stg2, &mesh_dir); mesh_dir=_V(0,0,2.-STG1O); AddMesh (hsat5stg3, &mesh_dir); mesh_dir=_V(-1.48,-1.48,14.55-STG1O); AddMesh (hsat5stg31, &mesh_dir); mesh_dir=_V(1.48,-1.48,14.55-STG1O); AddMesh (hsat5stg32, &mesh_dir); mesh_dir=_V(1.48,1.48,14.55-STG1O); AddMesh (hsat5stg33, &mesh_dir); mesh_dir=_V(-1.48,1.48,14.55-STG1O); AddMesh (hsat5stg34, &mesh_dir); mesh_dir=_V(0,SMVO,19.1-STG1O); AddMesh (hSM, &mesh_dir); VECTOR3 m_exhaust_ref = {0,0,-1}; VECTOR3 m_exhaust_pos1= {0,0,-28.25-STG1O}; VECTOR3 m_exhaust_pos2= {2,2,-28.25-STG1O}; VECTOR3 m_exhaust_pos3= {-2,2,-28.25-STG1O}; VECTOR3 m_exhaust_pos4 = {2,-2.0,-28.25-STG1O}; VECTOR3 m_exhaust_pos5 = {-2,-2,-28.25-STG1O}; AddExhaustRef (EXHAUST_MAIN, m_exhaust_pos1, 25.0, 1.5, &m_exhaust_ref); AddExhaustRef (EXHAUST_MAIN, m_exhaust_pos2, 25.0, 1.5, &m_exhaust_ref); AddExhaustRef (EXHAUST_MAIN, m_exhaust_pos3, 25.0, 1.5, &m_exhaust_ref); AddExhaustRef (EXHAUST_MAIN, m_exhaust_pos4, 25.0, 1.5, &m_exhaust_ref); AddExhaustRef (EXHAUST_MAIN, m_exhaust_pos5, 25.0, 1.5, &m_exhaust_ref); status = 3; SetCameraOffset (_V(-1,1.0,32.4-STG1O)); }
// -------------------------------------------------------------- // Set the capabilities of the vessel class // -------------------------------------------------------------- void SolarSail::clbkSetClassCaps (FILEHANDLE cfg) { // physical specs SetSize (SAIL_RADIUS*2.0); SetEmptyMass (100.0); SetCW (0.3, 0.3, 0.6, 0.9); SetWingAspect (0.7); SetWingEffectiveness (2.5); SetCrossSections (_V(10.5,15.0,5.8)); SetRotDrag (_V(0.6,0.6,0.35)); if (GetFlightModel() >= 1) { SetPitchMomentScale (1e-4); SetYawMomentScale (1e-4); } SetPMI (_V(3e3,3e3,6e3)); SetTrimScale (0.05); SetCameraOffset (_V(0,0.8,0)); SetLiftCoeffFunc (LiftCoeff); SetDockParams (_V(0,1.3,-1), _V(0,1,0), _V(0,0,-1)); SetTouchdownPoints (_V(0,-1.5,2), _V(-1,-1.5,-1.5), _V(1,-1.5,-1.5)); // visual specs AddMesh (hMeshTpl); }
bool KeyerConfigure::configureKeyers() { TiXmlBase::SetCondenseWhiteSpace( false ); TiXmlDocument keyerdoc; keyerdoc.LoadFile( ".\\Configuration\\keyerConfig.xml" ); TiXmlElement *root = keyerdoc.RootElement(); if ( !root ) { //err = "No XML root element (does file exist?)"; return false; } if ( !checkElementName( root, "KeyerConfig" ) ) { //err = "Invalid XML root element"; return false; } for ( TiXmlElement * e = root->FirstChildElement(); e; e = e->NextSiblingElement() ) { if ( checkElementName( e, "Trace" ) ) { SetTrace( e ); } else if ( checkElementName( e, "Tune" ) ) { SetTune( e ); } else if ( checkElementName( e, "Ports" ) ) { SetPorts( e ); } else if ( checkElementName( e, "Keyers" ) ) { SetKeyers( e ); } else if ( checkElementName( e, "Enable" ) ) { SetEnable( e ); } else if ( checkElementName( e, "CW" ) ) { SetCW( e ); } else if ( checkElementName( e, "MorseCode" ) ) { SetMorseCode( e ); } else if ( checkElementName( e, "CWMessages" ) ) { SetCWMessages( e ); } else { // trace("Unknown"); } } return true; }
void LEM::SetLmAscentHoverStage() { ClearThrusterDefinitions(); agc.SetVesselStats(APS_ISP, APS_THRUST, true); ShiftCentreOfMass(_V(0.0,3.0,0.0)); SetSize (5); SetCOG_elev (5); SetEmptyMass (1920.0); SetPMI(_V(2.8, 2.29, 2.37)); SetCrossSections (_V(21,23,17)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,0.7)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); double tdph = -5.8; SetTouchdownPoints (_V(0, tdph, 5), _V(-5, tdph, -5), _V(5, tdph, -5)); VSSetTouchdownPoints(GetHandle(), _V(0, tdph, 5), _V(-5, tdph, -5), _V(5, tdph, -5)); VECTOR3 mesh_dir=_V(-0.191,-0.02,+0.383); UINT meshidx = AddMesh (hLMAscent, &mesh_dir); SetMeshVisibilityMode (meshidx, MESHVIS_VCEXTERNAL); if (!ph_Asc) ph_Asc = CreatePropellantResource(AscentFuelMassKg); // 2nd stage Propellant SetDefaultPropellantResource (ph_Asc); // Display 2nd stage propellant level in generic HUD // orbiter main thrusters th_hover[0] = CreateThruster (_V( 0.0, -2.5, 0.0), _V( 0,1,0), APS_THRUST, ph_Asc, APS_ISP); th_hover[1] = CreateThruster (_V( 0.01, -2.0, 0.0), _V( 0,1,0), 0, ph_Asc, 0); // this is a "virtual engine",no thrust and no fuel // needed for visual gimbaling for corrected engine flames DelThrusterGroup(THGROUP_HOVER,true); thg_hover = CreateThrusterGroup (th_hover, 2, THGROUP_HOVER); AddExhaust (th_hover[1], 6.0, 0.8, exhaustTex); SetCameraOffset (_V(-1,1.0,0.0)); status = 2; stage = 2; SetEngineLevel(ENGINE_HOVER,0); AddRCS_LMH2(-1.86); bModeHover=true; if(ph_Dsc){ DelPropellantResource(ph_Dsc); ph_Dsc = 0; } VECTOR3 dockpos = {0.0 ,0.58, 0.0}; VECTOR3 dockdir = {0,1,0}; VECTOR3 dockrot = { -0.8660254, 0, 0.5 }; SetDockParams(dockpos, dockdir, dockrot); hattDROGUE = CreateAttachment(true, dockpos, dockdir, dockrot, "PADROGUE"); InitNavRadios (4); LDGswitch=false; AFEED1switch=true; AFEED2switch=true; AFEED3switch=true; AFEED4switch=true; // Descent stage detached. agc.SetInputChannelBit(030, DescendStageAttached, false); CheckRCS(); }
void LEM::SetLmVesselHoverStage() { ClearThrusterDefinitions(); agc.SetVesselStats(DPS_ISP, DPS_THRUST, true); SetEmptyMass(AscentFuelMassKg + 4374.0); SetSize (7); SetPMI (_V(3.26,2.22,3.26)); SetCrossSections (_V(24.53,21.92,24.40)); // SetPMI (_V(2.8,2.29,2.37)); // SetCrossSections (_V(21,23,17)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,0.7)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); SetTouchdownPoints (_V(0, -3.86, 5), _V(-5, -3.86, -5), _V(5, -3.86, -5)); VSSetTouchdownPoints(GetHandle(), _V(0, -3.86, 5), _V(-5, -3.86, -5), _V(5, -3.86, -5)); VECTOR3 mesh_dir=_V(-0.003,-0.03,0.004); UINT meshidx; if (Landed) { meshidx = AddMesh (hLMLanded, &mesh_dir); }else{ UINT probeidx; meshidx = AddMesh (hLMLanded, &mesh_dir); probeidx = AddMesh (hLemProbes, &mesh_dir); SetMeshVisibilityMode (probeidx, MESHVIS_VCEXTERNAL); } SetMeshVisibilityMode (meshidx, MESHVIS_VCEXTERNAL); if (!ph_Dsc){ ph_Dsc = CreatePropellantResource(DescentFuelMassKg); //2nd stage Propellant } SetDefaultPropellantResource (ph_Dsc); // display 2nd stage propellant level in generic HUD if (!ph_RCSA){ ph_RCSA = CreatePropellantResource(133.084001); } if (!ph_RCSB){ ph_RCSB = CreatePropellantResource(133.084001); } // orbiter main thrusters th_hover[0] = CreateThruster (_V(0.0 , -2.0, 0.0), _V(0,1,0), 46706.3, ph_Dsc, 3107); th_hover[1] = CreateThruster (_V(0.013, -2.8, -0.034), _V(0,1,0), 0, ph_Dsc, 0); //this is a "virtual engine",no thrust and no fuel //needed for visual gimbaling for corrected engine flames DelThrusterGroup(THGROUP_HOVER,true); thg_hover = CreateThrusterGroup(th_hover, 2, THGROUP_HOVER); AddExhaust (th_hover[1], 10.0, 1.5, exhaustTex); SetCameraOffset (_V(-1,1.0,0.0)); status = 1; stage = 1; SetEngineLevel(ENGINE_HOVER,0); AddRCS_LMH(-1.85); bModeHover=true; VECTOR3 dockpos = {0.0 ,2.6, 0.0}; VECTOR3 dockdir = {0,1,0}; VECTOR3 dockrot = { -0.8660254, 0, 0.5 }; SetDockParams(dockpos, dockdir, dockrot); hattDROGUE = CreateAttachment(true, dockpos, dockdir, dockrot, "PADROGUE"); InitNavRadios (4); LDGswitch=true; ATT2switch=true; ATT3switch=true; ATT1switch=true; AFEED1switch=false; AFEED2switch=false; AFEED3switch=false; AFEED4switch=false; // Descent stage attached. agc.SetInputChannelBit(030, DescendStageAttached, true); CheckRCS(); }
void LEM::SetLmVesselDockStage() { double fuelmass; int mnumber; ClearThrusterDefinitions(); agc.SetVesselStats(DPS_ISP, DPS_THRUST, true); // // Changed to reflect mission-specific empty and fuel mass // // From "Apollo by the Numbers" // mnumber=agc.GetApolloNo(); if(mnumber < 15) { SetEmptyMass(6565); fuelmass=8375.; } else { SetEmptyMass(7334); fuelmass=8891.; } SetSize (6); // SetPMI (_V(2.8,2.29,2.37)); SetPMI(_V(2.5428, 2.2871, 2.7566)); // SetCrossSections (_V(21,23,17)); //SetPMI(_V(3.26, 2.22, 3.26)); SetCrossSections (_V(24.53,21.92,24.40)); SetCW (0.1, 0.3, 1.4, 1.4); SetRotDrag (_V(0.7,0.7,0.7)); SetPitchMomentScale (0); SetBankMomentScale (0); SetLiftCoeffFunc (0); ClearMeshes(); ClearExhaustRefs(); ClearAttExhaustRefs(); SetTouchdownPoints (_V(0,0,10), _V(-1,0,-10), _V(1,0,-10)); VECTOR3 mesh_dir=_V(0.0,-0.2,0.03); UINT meshidx = AddMesh (hLMPKD, &mesh_dir); SetMeshVisibilityMode (meshidx, MESHVIS_VCEXTERNAL); if (!ph_Dsc) ph_Dsc = CreatePropellantResource(fuelmass); //2nd stage Propellant SetDefaultPropellantResource (ph_Dsc); // display 2nd stage propellant level in generic HUD // 133.084001 kg is 293.4 pounds, which is the fuel + oxidizer capacity of one RCS tank. if (!ph_RCSA) { ph_RCSA = CreatePropellantResource(133.084001); } if (!ph_RCSB) { ph_RCSB = CreatePropellantResource(133.084001); } // orbiter main thrusters th_hover[0] = CreateThruster (_V(0.0 , -3.3, 0.0), _V(0,1,0), 46706.3, ph_Dsc, 3107); th_hover[1] = CreateThruster (_V(0.013, -3.0, -0.03), _V(0,1,0), 0, ph_Dsc, 0); //this is a "virtual engine",no thrust and no fuel //needed for visual gimbaling for corrected engine flames DelThrusterGroup(THGROUP_HOVER,true); thg_hover = CreateThrusterGroup(th_hover, 2, THGROUP_HOVER); AddExhaust(th_hover[1], 10.0, 1.2, exhaustTex); SetCameraOffset (_V(-1,1.0,0.0)); SetEngineLevel(ENGINE_HOVER,0); AddRCS_LMH(-1.85); status = 0; stage = 0; bModeDocked=true; VECTOR3 dockpos = {0.0 ,2.6, 0.0}; VECTOR3 dockdir = {0,1,0}; VECTOR3 dockrot = { -0.8660254, 0, 0.5 }; SetDockParams(dockpos, dockdir, dockrot); hattDROGUE = CreateAttachment(true, dockpos, dockdir, dockrot, "PADROGUE"); InitNavRadios (4); LDGswitch=false; ATT2switch=true; ATT3switch=true; ATT1switch=true; AFEED1switch=false; AFEED2switch=false; AFEED3switch=false; AFEED4switch=false; // Descent stage attached. agc.SetInputChannelBit(030, DescendStageAttached, true); CheckRCS(); }