From 431acccc4c3bd40a9b451dc41f5d390f35906d10 Mon Sep 17 00:00:00 2001 From: Wilrik de Loose Date: Wed, 28 May 2008 10:53:07 +0000 Subject: final menu handlers --- matchblox/engine/C_MatchBloxEngine.cpp | 18 ++++++++++------ matchblox/main.cpp | 4 +++- matchblox/menu/menu.c | 38 +++++++++++++++++++++++++++------- matchblox/menu/menu.h | 2 ++ matchblox/menu/menu_msg.c | 20 ++++++++++++++---- matchblox/menu/menu_msg.h | 10 +++++---- 6 files changed, 69 insertions(+), 23 deletions(-) diff --git a/matchblox/engine/C_MatchBloxEngine.cpp b/matchblox/engine/C_MatchBloxEngine.cpp index 5925fb2..48a11a9 100644 --- a/matchblox/engine/C_MatchBloxEngine.cpp +++ b/matchblox/engine/C_MatchBloxEngine.cpp @@ -24,6 +24,7 @@ #include "font.h" #include "stereoheadtrackfrustum.h" #include "textfile.h" +#include "menu.h" extern "C" { extern GLuint g_iBase; @@ -110,11 +111,14 @@ GameResult C_MatchBloxEngine::ProcessMsgs(void) switch (l_iAction) { case ACTION_PAUSE: - if (!Pause()) + if (Pause()) { - Resume(); + MenuOptions(); } break; + case ACTION_RECALIBRATE: + // recalibrate + break; case ACTION_START: Abort(); NewGame(l_pMsg1->gamemode); @@ -423,9 +427,9 @@ bool C_MatchBloxEngine::NewGame(int f_iGameMode) { if(m_State == ES_INITIALISED) { - m_bHeadTrackingEnabled = (int)(f_iGameMode & GO_HEADTRACKING); - m_bStereoEnabled = (int)(f_iGameMode & GO_STEREOVISION); - m_CurrentBox = (BoxSize)((f_iGameMode & (255 - 8)) >> 3); + m_bHeadTrackingEnabled = (int)(f_iGameMode & GO_HEADTRACKING)? true : false; + m_bStereoEnabled = (f_iGameMode & GO_STEREOVISION)? true : false; + m_CurrentBox = (BoxSize)((f_iGameMode & (255 - 7)) >> 3); //prepare a session struct for administration m_pCurrentSession = new GameSession(m_GameSettings.m_iNrOfTurns, m_CurrentBox); @@ -458,7 +462,8 @@ bool C_MatchBloxEngine::Pause() { //only pause when playing if (m_State == ES_PLAYING_GRAB_BLOCK || - m_State == ES_PLAYING_PUT_BLOCK) + m_State == ES_PLAYING_PUT_BLOCK || + m_State == ES_GET_READY) { //save current state m_SavedState = m_State; @@ -723,6 +728,7 @@ void C_MatchBloxEngine::CursorMove(Vect3D_t &f_NewCursorPos) { //send a rumble message and set collision animation state //message_send() + } } diff --git a/matchblox/main.cpp b/matchblox/main.cpp index 9090443..5b1373b 100644 --- a/matchblox/main.cpp +++ b/matchblox/main.cpp @@ -16,6 +16,8 @@ #include #include "typedefs.h" +#include "message_input.h" +#include "message_queue.h" #include "menu.h" #include "textfile.h" @@ -54,7 +56,7 @@ bool InitWiiMotes() g_GameState.m_pWiimote[0]->SetLeds(0x0f); - g_GameState.m_pWiimote[0]->StartRumble(); + g_GameState.m_pWiimote[0]->StartRumble(); sleep(500); g_GameState.m_pWiimote[0]->StopRumble(); diff --git a/matchblox/menu/menu.c b/matchblox/menu/menu.c index a4a31c1..57dd8c0 100644 --- a/matchblox/menu/menu.c +++ b/matchblox/menu/menu.c @@ -156,23 +156,29 @@ void MenuBuild (void) break; case MENU_START: - MenuAddLabel(50, 50, "Headtracking"); - MenuAddButton(150, 100, 64, 64, "On", BUTTON_RADIO, BUTTON_GROUP1, MenuEnableHT); - MenuAddButton(350, 100, 64, 64, "Off", BUTTON_RADIO, BUTTON_GROUP1, MenuDisableHT); + MenuAddLabel(50, 30, "Headtracking"); + MenuAddButton(150, 80, 64, 64, "On", BUTTON_RADIO, BUTTON_GROUP1, MenuEnableHT); + MenuAddButton(350, 80, 64, 64, "Off", BUTTON_RADIO, BUTTON_GROUP1, MenuDisableHT); MenuEnableGroup(BUTTON_GROUP1); MenuAddLabel(50, 150, "Stereo vision"); - MenuAddButton(150, 200, 64, 64, "On", BUTTON_RADIO, BUTTON_GROUP2, MenuEnableSV); - MenuAddButton(350, 200, 64, 64, "Off", BUTTON_RADIO, BUTTON_GROUP2, MenuDisableSV); + MenuAddButton(150, 200, 64, 64, "On", BUTTON_RADIO, BUTTON_GROUP2, MenuEnableSV); + MenuAddButton(350, 200, 64, 64, "Off", BUTTON_RADIO, BUTTON_GROUP2, MenuDisableSV); MenuEnableGroup(BUTTON_GROUP2); + MenuAddLabel(50, 270, "Box size"); + MenuAddButton(30, 320, 64, 64, "Small", BUTTON_RADIO, BUTTON_GROUP3, MenuSetBoxSmall); + MenuAddButton(220, 320, 64, 64, "Medium", BUTTON_RADIO, BUTTON_GROUP3, MenuSetBoxMedium); + MenuAddButton(440, 320, 64, 64, "Large", BUTTON_RADIO, BUTTON_GROUP3, MenuSetBoxLarge); + MenuEnableGroup(BUTTON_GROUP3); + MenuAddButton(50, 400, 256, 64, "Back", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPrev); MenuAddButton(350, 400, 256, 64, "Next", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPostMessageStart); break; case MENU_OPTIONS: - MenuAddButton(200, 150, 250, 64, "Abort", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPostMessageAbort); - MenuAddButton(200, 250, 250, 64, "Recalibrate", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPostMessageAbort); + MenuAddButton(150, 150, 400, 80, "Abort", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPostMessageAbort); + MenuAddButton(150, 250, 400, 80, "Recalibrate", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPostMessageRecalibrate); MenuEnableGroup(BUTTON_GROUP1); break; } @@ -328,6 +334,10 @@ void MenuProcessMessage(void) { MenuMouseClick(GLUT_LEFT_BUTTON, GLUT_UP, l_iXPos, l_iYPos); } + else if (l_pMsg->btns & WIIMOTE_BUTTON_PLUS) + { + MenuPostMessagePause(); + } else { MenuMouseMove(l_iXPos, l_iYPos); @@ -454,4 +464,16 @@ void MenuOff(void) { g_pCurMenu = &g_sMenuOff; -} // MenuOff \ No newline at end of file +} // MenuOff + +void MenuStart(void) +{ + g_pCurMenu = &g_sMenuStart; + +} // MenuStart + +void MenuOptions(void) +{ + g_pCurMenu = &g_sMenuOptions; + +} // MenuOptions \ No newline at end of file diff --git a/matchblox/menu/menu.h b/matchblox/menu/menu.h index b21e50f..1bef444 100644 --- a/matchblox/menu/menu.h +++ b/matchblox/menu/menu.h @@ -14,6 +14,8 @@ void MenuMouseClick(int button, int state, int x, int y); void MenuMouseMove(int x, int y); void MenuOff(void); +void MenuStart(void); +void MenuOptions(void); #ifdef __cplusplus } diff --git a/matchblox/menu/menu_msg.c b/matchblox/menu/menu_msg.c index 3b6f4de..3775eaa 100644 --- a/matchblox/menu/menu_msg.c +++ b/matchblox/menu/menu_msg.c @@ -1,5 +1,4 @@ #include "message_queue.h" -#include "message_input.h" #include "menu_msg.h" #include "menu.h" @@ -61,11 +60,24 @@ void MenuPostMessageAbort(void) payload.action = ACTION_ABORT; payload.gamemode = 0; + MenuStart(); MenuPostMessage(payload); } // MenuPostMessageAbort +void MenuPostMessageRecalibrate(void) +{ + struct menu_payload payload; + + payload.action = ACTION_RECALIBRATE; + payload.gamemode = 0; + MenuStart(); + + MenuPostMessage(payload); + +} // MenuPostMessageRecalibrate + // setter voor game options void MenuEnableHT(void) { g_iGameMode |= GO_HEADTRACKING; } void MenuDisableHT(void) { g_iGameMode &= ~GO_HEADTRACKING; } @@ -73,6 +85,6 @@ void MenuEnableSV(void) { g_iGameMode |= GO_STEREOVISION; } void MenuDisableSV(void) { g_iGameMode &= ~GO_STEREOVISION; } void MenuEnableShadow(void) { g_iGameMode |= GO_SHADOW; } void MenuDisableShadow(void) { g_iGameMode &= ~GO_SHADOW; } -void MenuSetBoxSmall(void) { g_iGameMode = (g_iGameMode & 8) | 0 << 3; } // 0 << 3 == 0 -void MenuSetBoxMedium(void) { g_iGameMode = (g_iGameMode & 8) | 1 << 3; } // 1 << 3 == 8 -void MenuSetBoxLarge(void) { g_iGameMode = (g_iGameMode & 8) | 2 << 3; } // 2 << 3 == 16 \ No newline at end of file +void MenuSetBoxSmall(void) { g_iGameMode = (g_iGameMode & 7) | 0 << 3; } // 0 << 3 == 0 +void MenuSetBoxMedium(void) { g_iGameMode = (g_iGameMode & 7) | 1 << 3; } // 1 << 3 == 8 +void MenuSetBoxLarge(void) { g_iGameMode = (g_iGameMode & 7) | 2 << 3; } // 2 << 3 == 16 \ No newline at end of file diff --git a/matchblox/menu/menu_msg.h b/matchblox/menu/menu_msg.h index 9f6dc38..f188b73 100644 --- a/matchblox/menu/menu_msg.h +++ b/matchblox/menu/menu_msg.h @@ -9,10 +9,11 @@ struct menu_payload enum game_actions { - ACTION_START = 1, - ACTION_ABORT = 2, - ACTION_PAUSE = 4, - ACTION_RESUME = 8 + ACTION_START = 1, + ACTION_ABORT = 2, + ACTION_PAUSE = 4, + ACTION_RESUME = 8, + ACTION_RECALIBRATE = 16 }; typedef enum GameOption @@ -26,6 +27,7 @@ void MenuPostMessagePause(void); void MenuPostMessageResume(void); void MenuPostMessageStart(void); void MenuPostMessageAbort(void); +void MenuPostMessageRecalibrate(void); void MenuEnableHT(void); void MenuDisableHT(void); -- cgit v0.12