Skip to content
Draft
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
44 changes: 39 additions & 5 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,53 @@ 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() == 1)
{
sprintf(oapiDebugString(), "AOT DETENT ENABLED");
DebugLineClearTimer = 5;
}
else
{
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() == 1)
{
sprintf(oapiDebugString(), "AOT DETENT ENABLED");
DebugLineClearTimer = 5;
}
else
{
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)
}
}
break;

case OAPI_KEY_Z:

if (KEYMOD_ALT(keystate)) {
optics.ReticleMoved = -0.01; //Slow Rate (about 0.5 deg/sec)
optics.AOTDetentToggle(); // Toggle AOT detent
if (AOTReticleDetent.GetState() == 1)
{
sprintf(oapiDebugString(), "AOT DETENT ENABLED");
}
else
{
sprintf(oapiDebugString(), "AOT DETENT DISABLED");
}
DebugLineClearTimer = 5;
}
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
48 changes: 42 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,29 @@ 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 +503,27 @@ 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);
}*/

if (OpticsReticle > 2*PI) OpticsReticle -= 2*PI;
if (OpticsReticle < 0) OpticsReticle += 2*PI;
//sprintf(oapiDebugString(), "Optics Reticle %.2f", 360.0 - OpticsReticle / RAD);

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

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
23 changes: 9 additions & 14 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 @@ -1820,7 +1822,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_NEVER, 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 +2647,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, 0, 0, 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 @@ -3114,17 +3119,7 @@ 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;
optics.AOTDetentToggle();

return true;

Expand Down Expand Up @@ -3523,11 +3518,11 @@ bool LEM::clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf)
case AID_AOT_RETICLE:
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
11 changes: 11 additions & 0 deletions Orbitersdk/samples/ProjectApollo/src_lm/lemvc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,7 @@ const VECTOR3 UtilityLights_LMPLocation = { 0.1030, 1.0318, 0.8908 };
// AOT
const VECTOR3 Sw_RRGyroLocation = { -0.1557, 0.7949, 1.3874 };
const VECTOR3 AOT_ShaftSelectorLocation = { 0.0640, 0.8800, 1.4792 };
const VECTOR3 AOTReticleDetentLocation ={ 0.066068, 0.743351, 1.38436 };

// Flood lights
const VECTOR3 floodLightPos_Right = { 0.238, 0.89, 1.2 };
Expand Down Expand Up @@ -1477,6 +1478,10 @@ void LEM::RegisterActiveAreas()

oapiVCRegisterArea(AID_VC_RETICLEDISP, _R(1068*TexMul, 1891*TexMul, 1188*TexMul, 1927*TexMul), PANEL_REDRAW_ALWAYS, PANEL_MOUSE_IGNORE, PANEL_MAP_BACKGROUND, MainPanelTex2);

// AOT Reticle
oapiVCRegisterArea(AID_VC_AOTRETICLEDETENT, PANEL_REDRAW_ALWAYS, PANEL_MOUSE_DOWN);
oapiVCSetAreaClickmode_Spherical(AID_VC_AOTRETICLEDETENT, AOTReticleDetentLocation + ofs, 0.05);

// COAS FWD
const VECTOR3 COAS2Location = { -0.5612, 0.7323, 1.6805 };
oapiVCRegisterArea(AID_VC_COAS2, PANEL_REDRAW_NEVER, PANEL_MOUSE_LBDOWN);
Expand Down Expand Up @@ -3308,6 +3313,12 @@ void LEM::DefineVCAnimations()
RRGyroSelSwitch.SetReference(Sw_RRGyroLocation, _V(-0.048633374944462, -0.519162328382934, 0.853290848204481));
RRGyroSelSwitch.DefineMeshGroup(VC_GRP_Sw_RRGyro);

// AOT Reticle Knob
MainPanelVC.AddSwitch(&AOTReticleDetent, AID_VC_AOTRETICLEDETENT);
AOTReticleDetent.SetReference(AOTReticleDetentLocation);
AOTReticleDetent.SetDirection(_V(-0.003, 0, 0));
AOTReticleDetent.DefineMeshGroup(VC_GRP_AOT_ReticleKnob);

// EVA Antenna Handle
MainPanelVC.AddSwitch(&EvaAntennaHandle, AID_VC_EVA_Ant_Handle);
EvaAntennaHandle.SetReference(_V(-0.268539, 0.960945, -0.3565), _V(0, -0.01, 0));
Expand Down
1 change: 1 addition & 0 deletions Orbitersdk/samples/ProjectApollo/src_lm/lmresource.h
Original file line number Diff line number Diff line change
Expand Up @@ -866,6 +866,7 @@

#define AID_VC_SW_RRGYRO 3020
#define AID_VC_RETICLEDISP 3021
#define AID_VC_AOTRETICLEDETENT 3022

#define AID_VC_COAS1 3030
#define AID_VC_COAS2 3031
Expand Down