diff --git a/Config/ProjectApollo/SaturnSystems.cfg b/Config/ProjectApollo/SaturnSystems.cfg index f1269552e1..f2f811efdf 100644 --- a/Config/ProjectApollo/SaturnSystems.cfg +++ b/Config/ProjectApollo/SaturnSystems.cfg @@ -1240,6 +1240,7 @@ HYDRAULIC:FUELCELLRADIATOR8 150.0 + # Ext Lighting SPOTLIGHT DC_DUMMY 0 0.0 0.0 <-1.439 1.390 0.920> <0.0045 -0.0046 0.9999> 5000.0 0.0 0.0 0.0015 0.174533 0.5 <1.0 0.945 0.878 0.0> <1.0 0.945 0.878 0.0> <0.0 0.0 0.0 0.0> 100.0 115.0 RNDZLIGHT DC_DUMMY 1 0.02 0.98 <-0.490 -1.975 0.920> <0.0 -0.866 0.5> 5000.0 0.0 0.0 0.0015 2.094 3.142 <1.0 1.0 0.950 0.0> <1.0 1.0 0.950 0.0> <0.0 0.0 0.0 0.0> 10.0 28.0 diff --git a/Orbitersdk/samples/ProjectApollo/src_csm/eps.cpp b/Orbitersdk/samples/ProjectApollo/src_csm/eps.cpp index 4e7a2ed1e9..719b79a162 100644 --- a/Orbitersdk/samples/ProjectApollo/src_csm/eps.cpp +++ b/Orbitersdk/samples/ProjectApollo/src_csm/eps.cpp @@ -198,4 +198,54 @@ void CryoPressureSwitch::SaveState(FILEHANDLE scn, char *name_str) sprintf(buffer, "%d %d", PressureSwitch1, PressureSwitch2); oapiWriteScenario_string(scn, name_str, buffer); +} + +ExteriorLighting::ExteriorLighting() +{ + saturn = NULL; + SpotDeployed = false; + EVALtDeployed = false; +} + +ExteriorLighting::~ExteriorLighting() +{ + +} + +void ExteriorLighting::Init(Saturn *s, CircuitBrakerSwitch *MNB, ThreeSourceTwoDestSwitch *RDZSPOT) +{ + saturn = s; + RNDZSPOTMNBcb = MNB; + RDZSPOTsw = RDZSPOT; +} + +void ExteriorLighting::SystemTimestep(double simdt) +{ + if (!saturn->LETAttached()) + { + EVALtDeployed = true; + } + + if (RDZSPOTsw->IsDown() && RNDZSPOTMNBcb->IsPowered()) + { + SpotDeployed = true; + } +} + +void ExteriorLighting::LoadState(char *line, int strlen) +{ + int i, j; + + sscanf(line + strlen + 1, "%i %i", &i, &j); + + SpotDeployed = (i != 0); + EVALtDeployed = (j != 0); +} + +void ExteriorLighting::SaveState(FILEHANDLE scn, char *name_str) +{ + char buffer[100]; + + sprintf(buffer, "%d %d", SpotDeployed, EVALtDeployed); + oapiWriteScenario_string(scn, name_str, buffer); } \ No newline at end of file diff --git a/Orbitersdk/samples/ProjectApollo/src_csm/eps.h b/Orbitersdk/samples/ProjectApollo/src_csm/eps.h index a2284f6edd..23528f0f10 100644 --- a/Orbitersdk/samples/ProjectApollo/src_csm/eps.h +++ b/Orbitersdk/samples/ProjectApollo/src_csm/eps.h @@ -50,4 +50,24 @@ class CryoPressureSwitch bool PressureSwitch2; double lowpress; double highpress; +}; + + +/// This class simulates exterior lighting behavior in the CSM +class ExteriorLighting +{ +public: + ExteriorLighting(); + virtual ~ExteriorLighting(); + void Init(Saturn *s, CircuitBrakerSwitch *MNB, ThreeSourceTwoDestSwitch *RDZSPOT); + void SystemTimestep(double simdt); + void SaveState(FILEHANDLE scn, char *name_str); + void LoadState(char *line, int strlen); + +protected: + Saturn *saturn; + CircuitBrakerSwitch *RNDZSPOTMNBcb; + ThreeSourceTwoDestSwitch *RDZSPOTsw; + bool SpotDeployed; + bool EVALtDeployed; }; \ No newline at end of file diff --git a/Orbitersdk/samples/ProjectApollo/src_csm/satsystems.cpp b/Orbitersdk/samples/ProjectApollo/src_csm/satsystems.cpp index 3d76782d92..504e476873 100644 --- a/Orbitersdk/samples/ProjectApollo/src_csm/satsystems.cpp +++ b/Orbitersdk/samples/ProjectApollo/src_csm/satsystems.cpp @@ -139,12 +139,14 @@ void Saturn::SystemsInit() { FuelCellN2Blanket[2] = (h_Tank *)Panelsdk.GetPointerByString("HYDRAULIC:N2FUELCELL3BLANKET"); // - // Electric Lights + // Exterior Lights // SpotLight = (ElectricLight *)Panelsdk.GetPointerByString("ELECTRIC:SPOTLIGHT"); RndzLight = (ElectricLight *)Panelsdk.GetPointerByString("ELECTRIC:RNDZLIGHT"); + ExteriorLighting.Init(this, &LightingRndzMNBCB, &RndzLightSwitch); + // // EPS/Cryo devices // @@ -1862,6 +1864,7 @@ void Saturn::SystemsInternalTimestep(double simdt) EventTimer306Display.SystemTimestep(tFactor); H2CryoPressureSwitch.SystemTimestep(tFactor); O2CryoPressureSwitch.SystemTimestep(tFactor); + ExteriorLighting.SystemTimestep(tFactor); simdt -= tFactor; tFactor = __min(mintFactor, simdt); diff --git a/Orbitersdk/samples/ProjectApollo/src_csm/saturn.h b/Orbitersdk/samples/ProjectApollo/src_csm/saturn.h index 201e0659e4..337730b520 100644 --- a/Orbitersdk/samples/ProjectApollo/src_csm/saturn.h +++ b/Orbitersdk/samples/ProjectApollo/src_csm/saturn.h @@ -1902,9 +1902,9 @@ class Saturn: public ProjectApolloConnectorVessel, public PanelSwitchListener { ThreePosSwitch TVCGimbalDriveYawSwitch; SwitchRow CSMLightSwitchesRow; - ToggleSwitch RunEVALightSwitch; + TwoSourceSwitch RunEVALightSwitch; ThreeSourceTwoDestSwitch RndzLightSwitch; - ToggleSwitch TunnelLightSwitch; + TwoSourceSwitch TunnelLightSwitch; SwitchRow LMPowerSwitchRow; CSMLMPowerSwitch LMPowerSwitch; @@ -3835,6 +3835,9 @@ class Saturn: public ProjectApolloConnectorVessel, public PanelSwitchListener { ThreePhasePowerMerge SuitCompressor1Feeder; ThreePhasePowerMerge SuitCompressor2Feeder; + // Exterior Lighting + ExteriorLighting ExteriorLighting; + // GSE Pump* GSEGlycolPump; h_Radiator* GSERadiator; diff --git a/Orbitersdk/samples/ProjectApollo/src_csm/saturnpanel.cpp b/Orbitersdk/samples/ProjectApollo/src_csm/saturnpanel.cpp index b5cdfdfcfb..1e797de396 100644 --- a/Orbitersdk/samples/ProjectApollo/src_csm/saturnpanel.cpp +++ b/Orbitersdk/samples/ProjectApollo/src_csm/saturnpanel.cpp @@ -1860,9 +1860,9 @@ void Saturn::SetSwitches(int panel) { TVCGimbalDriveYawSwitch.Init (43, 0, 34, 29, srf[SRF_THREEPOSSWITCH], srf[SRF_BORDER_34x29], TVCGimbalDriveSwitchesRow); CSMLightSwitchesRow.Init(AID_CSMLIGHTSWITCHES, MainPanel); - RunEVALightSwitch.Init( 0, 0, 34, 29, srf[SRF_SWITCHUP], srf[SRF_BORDER_34x29], CSMLightSwitchesRow); - RndzLightSwitch.Init( 57, 0, 34, 29, srf[SRF_THREEPOSSWITCH], srf[SRF_BORDER_34x29], CSMLightSwitchesRow, &RunEVATRGTAC2CB, NULL, &LightingRndzMNACB, RndzLight, SpotLight); - TunnelLightSwitch.Init(111, 0, 34, 29, srf[SRF_SWITCHUP], srf[SRF_BORDER_34x29], CSMLightSwitchesRow); + RunEVALightSwitch.Init(0, 0, 34, 29, srf[SRF_SWITCHUP], srf[SRF_BORDER_34x29], CSMLightSwitchesRow, &RunEVATRGTAC1CB, &RunEVATRGTAC2CB); + RndzLightSwitch.Init(57, 0, 34, 29, srf[SRF_THREEPOSSWITCH], srf[SRF_BORDER_34x29], CSMLightSwitchesRow, &RunEVATRGTAC2CB, NULL, &LightingRndzMNACB, RndzLight, SpotLight); + TunnelLightSwitch.Init(111, 0, 34, 29, srf[SRF_SWITCHUP], srf[SRF_BORDER_34x29], CSMLightSwitchesRow, &LightingRndzMNACB, &LightingRndzMNBCB); LMPowerSwitchRow.Init(AID_LMPOWERSWITCH, MainPanel); LMPowerSwitch.Init( 0, 0, 34, 29, srf[SRF_THREEPOSSWITCH], srf[SRF_BORDER_34x29], LMPowerSwitchRow, this);