/// <summary> /// Changes the current HUD page. /// </summary> /// <param name='page'> /// the new HUD /// </param> /// private void changeHudPage(HudPage page) { if (page != hudPage) { clearText(); switch (page) { case HudPage.SPEED: { setLedColour(ledLCD, Color.white); setLed(ledLCD, 99, 0, 0); setText(0, "Speed: 0000 km/h"); setText(1, " 0.00 mach"); break; } case HudPage.THRUST: { setLedColour(ledLCD, Color.white); setLed(ledLCD, 99, 0, 0); setText(0, "Thrust E1: 000%"); setText(1, " E2: 000%"); break; } case HudPage.FUEL: { setLedColour(ledLCD, Color.white); setLed(ledLCD, 99, 0, 0); setText(0, "Fuel E1: 000%"); setText(1, " E2: 000%"); break; } case HudPage.ABORT: { // make background LED blink in red setLedColour(ledLCD, Color.red); setLed(9, 99, 500, 50); // write text setText(0, "!!!! ABORT !!!! "); setText(1, "!!!! ABORT !!!! "); break; } } hudPage = page; // immediately update the data nextHudUpdateTime = Time.time; nextButtonPollTime = nextHudUpdateTime; } }
/// <summary> /// Checks the buttons and updates the LCD display accordingly /// </summary> /// private void checkButtons() { if (IsConnected() && (Time.time > nextButtonPollTime)) { // poll the buttons and switch the HUD accordingly HudPage newPage = hudPage; if (getButtonPresses(buttonLeft) > 0) { newPage--; } if (getButtonPresses(buttonRight) > 0) { newPage++; } // if vehicle starts to move: switch to speed page automatically if ((vehicleData.speed > 0.1) && (hudPage == HudPage.STANDBY)) { newPage = HudPage.SPEED; } if (newPage != hudPage) { // page has changed: stay within "selectable" range if (newPage <= HudPage.FIRST_SELECTABLE) { newPage = HudPage.LAST_SELECTABLE - 1; } if (newPage >= HudPage.LAST_SELECTABLE) { newPage = HudPage.FIRST_SELECTABLE + 1; } changeHudPage(newPage); } nextButtonPollTime = Time.time + (buttonPollInterval / 1000.0); } }
/// <summary> /// Runs a quick diagnose routine on the IO box. /// </summary> /// <returns> /// ??? /// </returns> private IEnumerator RunDiagnose() { hudPage = HudPage.DIAGNOSE; const float stepWait = 0.25f; setLedColour(ledLCD, Color.yellow); setLed (ledLCD, 255, 0, 0); setText(0, "System Check: "); setText(1, " "); yield return new WaitForSeconds(stepWait); getButtonPresses(buttonLeft); // clear button presses getButtonPresses(buttonRight); setLed(ledLeft, 100, 0, 0); setLed(ledRight, 100, 0, 0); setLedColour(ledLeft, Color.red); setLedColour(ledRight, Color.red); setText(1, "HUD"); yield return new WaitForSeconds(stepWait); setLedColour(ledLeft, Color.green); setLedColour(ledRight, Color.green); setText(1, "Engine"); yield return new WaitForSeconds(stepWait); setLedColour(ledLeft, Color.blue); setLedColour(ledRight, Color.blue); setText(1, "Booster"); yield return new WaitForSeconds(stepWait); setLedColour(ledLeft, Color.yellow); setLedColour(ledRight, Color.yellow); setText(1, "Steering"); yield return new WaitForSeconds(stepWait); setLedColour(ledLeft, Color.cyan); setLedColour(ledRight, Color.cyan); setText(1, "Brakes "); yield return new WaitForSeconds(stepWait); setLedColour(ledLeft, Color.magenta); setLedColour(ledRight, Color.magenta); setText(1, "Parachute"); yield return new WaitForSeconds(stepWait); setLedColour(ledLeft, Color.white); setLedColour(ledRight, Color.white); setLedColour(9, Color.green); setText(0, " All Systems OK "); setText(1, " Ready to go... "); yield return new WaitForSeconds(stepWait); setLed(ledLeft, 0); setLed(ledRight, 0); hudPage = HudPage.STANDBY; }
/// <summary> /// Changes the current HUD page. /// </summary> /// <param name='page'> /// the new HUD /// </param> /// private void changeHudPage(HudPage page) { if ( page != hudPage ) { clearText(); switch ( page ) { case HudPage.SPEED: { setLedColour(ledLCD, Color.white); setLed(ledLCD, 99, 0, 0); setText(0, "Speed: 0000 km/h"); setText(1, " 0.00 mach"); break; } case HudPage.THRUST: { setLedColour(ledLCD, Color.white); setLed(ledLCD, 99, 0, 0); setText(0, "Thrust E1: 000%"); setText(1, " E2: 000%"); break; } case HudPage.FUEL: { setLedColour(ledLCD, Color.white); setLed(ledLCD, 99, 0, 0); setText(0, "Fuel E1: 000%"); setText(1, " E2: 000%"); break; } case HudPage.ABORT: { // make background LED blink in red setLedColour(ledLCD, Color.red); setLed (9, 99, 500, 50); // write text setText(0, "!!!! ABORT !!!! "); setText(1, "!!!! ABORT !!!! "); break; } } hudPage = page; // immediately update the data nextHudUpdateTime = Time.time; nextButtonPollTime = nextHudUpdateTime; } }