Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified Orbitersdk/samples/ProjectApollo/Bitmaps/aot_reticle_knob.bmp
Binary file not shown.
Binary file not shown.
20 changes: 14 additions & 6 deletions Orbitersdk/samples/ProjectApollo/src_lm/LEM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1056,6 +1056,7 @@ int LEM::clbkConsumeBufferedKey(DWORD key, bool down, char *keystate) {
break;
}
}
return 0;
}

if (!KEYMOD_SHIFT(keystate) && !KEYMOD_CONTROL(keystate) && KEYMOD_ALT(keystate))
Expand Down Expand Up @@ -1114,20 +1115,27 @@ int LEM::clbkConsumeBufferedKey(DWORD key, bool down, char *keystate) {
break;

case OAPI_KEY_W:
optics.ReticleMoved = 0.52; //Fast Rate (about 30 deg/sec)
if (AOTReticleDetent.GetState() == 0)
{
optics.ReticleMoved = 0.52; //Fast Rate (about 30 deg/sec)

if (KEYMOD_ALT(keystate)) {
optics.ReticleMoved = 0.01; //Slow Rate (about 0.5 deg/sec)
if (KEYMOD_ALT(keystate)) {
optics.ReticleMoved = 0.01; //Slow Rate (about 0.5 deg/sec)
}
}
break;

case OAPI_KEY_S:
optics.ReticleMoved = -0.52; //Fast Rate (about 30 deg/sec)
if (AOTReticleDetent.GetState() == 0)
{
optics.ReticleMoved = -0.52; //Fast Rate (about 30 deg/sec)

if (KEYMOD_ALT(keystate)) {
optics.ReticleMoved = -0.01; //Slow Rate (about 0.5 deg/sec)
if (KEYMOD_ALT(keystate)) {
optics.ReticleMoved = -0.01; //Slow Rate (about 0.5 deg/sec)
}
}
break;

case OAPI_KEY_Q:
agc.SetInputChannelBit(016, MarkX, 1); // Mark X
break;
Expand Down
4 changes: 3 additions & 1 deletion Orbitersdk/samples/ProjectApollo/src_lm/LEM.h
Original file line number Diff line number Diff line change
Expand Up @@ -792,10 +792,12 @@ class LEM : public Payload, public PanelSwitchListener {

LMAbortButton AbortSwitch;
LMAbortStageButton AbortStageSwitch;


SwitchRow RRGyroSelSwitchRow;
ThreePosSwitch RRGyroSelSwitch;

SwitchRow AOTReticleSwitchRow;
ToggledPushSwitch AOTReticleDetent;

/////////////////
// LEM panel 1 //
Expand Down
50 changes: 44 additions & 6 deletions Orbitersdk/samples/ProjectApollo/src_lm/LEMcomputer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,7 @@ void LEMcomputer::GetRadarData(int radarBits)
LMOptics::LMOptics() {

lem = NULL;

OpticsShaft = 3;
OpticsReticle = 0.0;
ReticleMoved = 0;
Expand All @@ -434,6 +435,30 @@ void LMOptics::Init(LEM *vessel) {
lem = vessel;
}

bool LMOptics::ReticlePush() {
if (((360.0 - OpticsReticle / RAD) < 1.0) || ((360.0 - OpticsReticle / RAD > 359.0)))
{
return true;
}

else
return false;
}

void LMOptics::AOTDetentToggle() {

if (lem->AOTReticleDetent.GetState() == 0 && ReticlePush() == true)
{
lem->AOTReticleDetent.SetState(1);
}

else
{
lem->AOTReticleDetent.SetState(0);
}
return;
}

void LMOptics::SystemTimestep(double simdt) {
if (lem->AOTLampFeeder.Voltage() > SP_MIN_ACVOLTAGE)
{
Expand Down Expand Up @@ -479,15 +504,28 @@ bool LMOptics::PaintReticleAngle(SURFHANDLE surf, SURFHANDLE digits) {
}

void LMOptics::Timestep(double simdt) {
OpticsReticle = OpticsReticle + simdt * ReticleMoved;
if (lem->AOTReticleDetent.GetState() == 1)
{
OpticsReticle = 0.0;
ReticleMoved = 0.0;
}

/*if (ReticleMoved)
else
{
sprintf(oapiDebugString(), "Optics Shaft %d, Optics Reticle %.2f, Moved? %.4f, KnobTurning %d", OpticsShaft, 360.0 - OpticsReticle / RAD, ReticleMoved, KnobTurning);
}*/
OpticsReticle = OpticsReticle + simdt * ReticleMoved;

/*if (ReticleMoved)
{
sprintf(oapiDebugString(), "Optics Shaft %d, Optics Reticle %.2f, Moved? %.4f, KnobTurning %d", OpticsShaft, 360.0 - OpticsReticle / RAD, ReticleMoved, KnobTurning);
}*/

//sprintf(oapiDebugString(), "Optics Reticle %.2f", 360.0 - OpticsReticle / RAD);

if (OpticsReticle > 2 * PI) OpticsReticle -= 2 * PI;
if (OpticsReticle < 0) OpticsReticle += 2 * PI;
}

if (OpticsReticle > 2*PI) OpticsReticle -= 2*PI;
if (OpticsReticle < 0) OpticsReticle += 2*PI;
//sprintf(oapiDebugString(), "Detent %d ReticlePush %d", lem->AOTReticleDetent.GetState(), ReticlePush());
}

void LMOptics::SaveState(FILEHANDLE scn) {
Expand Down
10 changes: 6 additions & 4 deletions Orbitersdk/samples/ProjectApollo/src_lm/LEMcomputer.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,12 @@ class LEMcomputer: public ApolloGuidance
/// \ingroup AGC
/// \brief LM Optics.
///
class LMOptics {
public:
class LMOptics {
public:
LMOptics(); // Cons
void Init(LEM *vessel); // Initialization
void Init(LEM* vessel); // Initialization
bool ReticlePush(); // Checks If Reticle Can Pe Pushed In
void AOTDetentToggle(); // Toggles Reticle Detent
void Timestep(double simdt); // Timestep
void SystemTimestep(double simdt);
bool PaintReticleAngle(SURFHANDLE surf, SURFHANDLE digits); // Update panel image
Expand All @@ -103,7 +105,7 @@ class LMOptics {
// These should really be protected variables.
//

LEM *lem; // Our Ship
LEM* lem; // Our Ship

int OpticsShaft; // Shaft Position (can be 0=0, 1=60, 2=120, 3=180, 4=-120, 5=-60 degrees)
double OpticsReticle; // AOT Reticle rotation
Expand Down
33 changes: 12 additions & 21 deletions Orbitersdk/samples/ProjectApollo/src_lm/lempanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,8 @@ void LEM::InitSwitches() {

RRGyroSelSwitch.Register(PSH,"RRGyroSelSwitch",THREEPOSSWITCH_UP);

AOTReticleDetent.Register(PSH, "AOTReticleDetent", 1);

DskySwitchVerb.Register(PSH, "DskySwitchVerb", false);
DskySwitchNoun.Register(PSH, "DskySwitchNoun", false);
DskySwitchPlus.Register(PSH, "DskySwitchPlus", false);
Expand Down Expand Up @@ -1359,6 +1361,7 @@ void LEM::InitPanel (int panel)
oapiSetSurfaceColourKey(srf[SRF_LEM_F_HATCH_REL_VLV], g_Param.col[4]);
oapiSetSurfaceColourKey(srf[SRF_LEM_INTLK_OVRD], g_Param.col[4]);
oapiSetSurfaceColourKey(srf[SRF_LEM_MASTERALARM], g_Param.col[4]);
//oapiSetSurfaceColourKey(srf[SRF_AOTRETICLEKNOB], g_Param.col[4]);

//
// Borders need to set the center color to transparent so only the outline
Expand Down Expand Up @@ -1820,7 +1823,7 @@ bool LEM::clbkLoadPanel (int id) {
case LMPANEL_AOTVIEW: // LEM Alignment Optical Telescope View
oapiRegisterPanelBackground(hBmp, PANEL_ATTACH_TOP | PANEL_ATTACH_BOTTOM | PANEL_ATTACH_LEFT | PANEL_MOVEOUT_RIGHT, g_Param.col[4]);

oapiRegisterPanelArea(AID_AOT_RETICLE_KNOB, _R(1427, 694, 1502, 1021), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_PRESSED|PANEL_MOUSE_UP, PANEL_MAP_BACKGROUND);
oapiRegisterPanelArea(AID_AOT_RETICLE_KNOB, _R(1427, 694, 1502, 1021), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_DOWN, PANEL_MAP_BACKGROUND);
oapiRegisterPanelArea(AID_AOT_SHAFT_KNOB, _R(1433, 0, 1496, 156), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_DOWN, PANEL_MAP_BACKGROUND);
oapiRegisterPanelArea(AID_RR_GYRO_SEL_SWITCH, _R( 300, 66, 335, 96), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_DOWN, PANEL_MAP_BACKGROUND);
oapiRegisterPanelArea(AID_AOT_RETICLEDISPLAY, _R( 341, 824, 461, 860), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, PANEL_MAP_BACKGROUND);
Expand Down Expand Up @@ -2645,6 +2648,9 @@ void LEM::SetSwitches(int panel) {
RRGyroSelSwitchRow.Init(AID_RR_GYRO_SEL_SWITCH, MainPanel);
RRGyroSelSwitch.Init(0, 0, 34, 29, srf[SRF_LMTHREEPOSSWITCH], srf[SRF_BORDER_34x29], RRGyroSelSwitchRow);

AOTReticleSwitchRow.Init(AID_AOT_RETICLE_KNOB, MainPanel);
AOTReticleDetent.Init(0, 0, 74, 326, srf[SRF_AOTRETICLEKNOB], srf[SRF_BORDER_30x144], AOTReticleSwitchRow);

// ECS Panel
ECSSuitGasDiverterSwitchRow.Init(IDB_LEM_SGD_LEVER, MainPanel);
SuitGasDiverterSwitch.Init(0, 0, 126, 131, srf[SRF_LEM_SGD_LEVER], srf[SRF_BORDER_126x131], ECSSuitGasDiverterSwitchRow);
Expand Down Expand Up @@ -3041,11 +3047,15 @@ bool LEM::clbkPanelMouseEvent (int id, int event, int mx, int my)
return false;
}

if (id == AID_AOT_RETICLE_KNOB)
{
optics.AOTDetentToggle();
return true;
}

if (MainPanel.CheckMouseClick(id, event, mx, my))
return true;


switch (id) {
// panel 0 events:
/*case AID_DSKY_KEY:
Expand Down Expand Up @@ -3113,21 +3123,6 @@ bool LEM::clbkPanelMouseEvent (int id, int event, int mx, int my)
}
return true;

case AID_AOT_RETICLE_KNOB:
optics.ReticleMoved = 0;
if (my >=0 && my <= 163 ){
optics.ReticleMoved = 0.001 * pow(163 - my,1.25);
optics.KnobTurning++;
} else if (my >= 164 && my <= 326){
optics.ReticleMoved = -0.001 * pow(my-164,1.25);
optics.KnobTurning++;
}
if (optics.KnobTurning == 2) optics.KnobTurning = 0;

if (event & PANEL_MOUSE_UP) optics.ReticleMoved = 0;

return true;

case AID_AOT_SHAFT_KNOB:
if (my >= 90 && my <= 155) {
optics.OpticsShaft++;
Expand Down Expand Up @@ -3524,10 +3519,6 @@ bool LEM::clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf)
RedrawPanel_AOTReticle(surf);
return true;

case AID_AOT_RETICLE_KNOB:
oapiBlt(surf,srf[SRF_AOTRETICLEKNOB],0,0,optics.KnobTurning*74,0,74,326);
return true;

case AID_AOT_SHAFT_KNOB:
oapiBlt(surf,srf[SRF_AOTSHAFTKNOB],0,0,optics.OpticsShaft*62,0,62,155);
return true;
Expand Down
3 changes: 3 additions & 0 deletions Orbitersdk/samples/ProjectApollo/src_lm/lemsystems.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,6 +386,9 @@ void LEM::SystemsInit()
dsky.Init(&NumDockCompLTGFeeder, &LGC_DSKY_CB, &LtgAnunNumKnob, &LtgIntegralKnob, &LtgORideAnunSwitch, &LtgORideIntegralSwitch);
agc.InitHeat((h_HeatLoad *)Panelsdk.GetPointerByString("HYDRAULIC:LGCHEAT"));

//Optics
optics.Init(this);

// AGS stuff
asa.Init(this, &AGSOperateSwitch, (Boiler *)Panelsdk.GetPointerByString("ELECTRIC:LEM-ASA-FastHeater"),
(Boiler *)Panelsdk.GetPointerByString("ELECTRIC:LEM-ASA-FineHeater"),
Expand Down