From a2642d3545821f1a35dc2dff3c0ff5b632f78397 Mon Sep 17 00:00:00 2001 From: Wilrik de Loose Date: Wed, 28 May 2008 08:33:38 +0000 Subject: Menu structuur --- matchblox/engine/C_MatchBloxEngine.cpp | 12 ++---- matchblox/engine/C_MatchBloxEngine.h | 1 + matchblox/menu/menu.c | 71 ++++++++++++++++++++++------------ matchblox/menu/menu_msg.c | 17 +++++++- matchblox/menu/menu_msg.h | 25 ++++++++++-- 5 files changed, 87 insertions(+), 39 deletions(-) diff --git a/matchblox/engine/C_MatchBloxEngine.cpp b/matchblox/engine/C_MatchBloxEngine.cpp index 9d385e2..e380300 100644 --- a/matchblox/engine/C_MatchBloxEngine.cpp +++ b/matchblox/engine/C_MatchBloxEngine.cpp @@ -117,7 +117,7 @@ GameResult C_MatchBloxEngine::ProcessMsgs(void) break; case ACTION_START: Abort(); - NewGame(0, l_pMsg1->gamemode, BS_SMALL); + NewGame(l_pMsg1->gamemode); break; case ACTION_RESUME: Resume(); @@ -426,13 +426,9 @@ bool C_MatchBloxEngine::NewGame(int f_iGameMode) { if(m_State == ES_INITIALISED) { - switch (f_iGameMode) - { - case 0: - m_bHeadTrackingEnabled = true; - m_bStereoEnabled = true; - m_CurrentBox = BoxSize::BS_MED; - } + m_bHeadTrackingEnabled = (int)(f_iGameMode & GO_HEADTRACKING); + m_bStereoEnabled = (int)(f_iGameMode & GO_STEREOVISION); + m_CurrentBox = (BoxSize)((f_iGameMode & (255 - 8)) >> 3); //prepare a session struct for administration m_pCurrentSession = new GameSession(m_GameSettings.m_iNrOfTurns, m_CurrentBox); diff --git a/matchblox/engine/C_MatchBloxEngine.h b/matchblox/engine/C_MatchBloxEngine.h index 5d90291..950f8e3 100644 --- a/matchblox/engine/C_MatchBloxEngine.h +++ b/matchblox/engine/C_MatchBloxEngine.h @@ -26,6 +26,7 @@ typedef enum GameResult GR_ERROR } GameResult; + enum EngineState { ES_INITIALISED, diff --git a/matchblox/menu/menu.c b/matchblox/menu/menu.c index c87d369..a4a31c1 100644 --- a/matchblox/menu/menu.c +++ b/matchblox/menu/menu.c @@ -103,6 +103,43 @@ void MenuClear(void) } // MenuClear +void MenuNext(void) +{ + int l_iMenuId = g_pCurMenu->m_iMenuId; + + l_iMenuId = (l_iMenuId + 1) % 4; + + switch (l_iMenuId) + { + default: + case MENU_OFF: g_pCurMenu = &g_sMenuOff; break; + case MENU_MAIN: g_pCurMenu = &g_sMenuMain; break; + case MENU_START: g_pCurMenu = &g_sMenuStart; break; + case MENU_OPTIONS: g_pCurMenu = &g_sMenuOptions; break; + } + +} // MenuNext + + +void MenuPrev(void) +{ + int l_iMenuId = g_pCurMenu->m_iMenuId; + + l_iMenuId = (l_iMenuId - 1); + if (l_iMenuId < 0) l_iMenuId = MENU_OPTIONS; + + switch (l_iMenuId) + { + default: + case MENU_OFF: g_pCurMenu = &g_sMenuOff; break; + case MENU_MAIN: g_pCurMenu = &g_sMenuMain; break; + case MENU_START: g_pCurMenu = &g_sMenuStart; break; + case MENU_OPTIONS: g_pCurMenu = &g_sMenuOptions; break; + } + +} // MenuPrev + + void MenuBuild (void) { int l_iMenuId = g_pCurMenu->m_iMenuId; @@ -119,16 +156,18 @@ void MenuBuild (void) break; case MENU_START: - MenuAddLabel(50, 50, "Headtracking"); - MenuAddButton(150, 100, 64, 64, "On", BUTTON_RADIO, BUTTON_GROUP1, NULL); - MenuAddButton(350, 100, 64, 64, "Off", BUTTON_RADIO, BUTTON_GROUP1, NULL); + 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); MenuEnableGroup(BUTTON_GROUP1); - MenuAddLabel(50, 250, "Stereo vision"); - MenuAddButton(150, 300, 64, 64, "On", BUTTON_RADIO, BUTTON_GROUP2, NULL); - MenuAddButton(350, 300, 64, 64, "Off", BUTTON_RADIO, BUTTON_GROUP2, NULL); - MenuAddButton(350, 400, 256, 64, "Next", BUTTON_CLICK, BUTTON_NO_GROUP, MenuPostMessageStart); + 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); MenuEnableGroup(BUTTON_GROUP2); + + 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: @@ -141,24 +180,6 @@ void MenuBuild (void) } // MenuBuild -void MenuNext(void) -{ - int l_iMenuId = g_pCurMenu->m_iMenuId; - - l_iMenuId = (l_iMenuId + 1) % 4; - - switch (l_iMenuId) - { - default: - case MENU_OFF: g_pCurMenu = &g_sMenuOff; break; - case MENU_MAIN: g_pCurMenu = &g_sMenuMain; break; - case MENU_START: g_pCurMenu = &g_sMenuStart; break; - case MENU_OPTIONS: g_pCurMenu = &g_sMenuOptions; break; - } - -} // MenuNext - - void MenuInit(int f_iWinWidth, int f_iWinHeight) { // init menu props diff --git a/matchblox/menu/menu_msg.c b/matchblox/menu/menu_msg.c index 0fed049..3b6f4de 100644 --- a/matchblox/menu/menu_msg.c +++ b/matchblox/menu/menu_msg.c @@ -3,6 +3,8 @@ #include "menu_msg.h" #include "menu.h" +int g_iGameMode = GO_HEADTRACKING | GO_STEREOVISION; + void MenuPostMessage(struct menu_payload payload) { struct messageq_s message; @@ -45,7 +47,7 @@ void MenuPostMessageStart(void) struct menu_payload payload; payload.action = ACTION_START; - payload.gamemode = 0; + payload.gamemode = g_iGameMode; MenuOff(); MenuPostMessage(payload); @@ -62,4 +64,15 @@ void MenuPostMessageAbort(void) MenuPostMessage(payload); -} // MenuPostMessageAbort \ No newline at end of file +} // MenuPostMessageAbort + +// setter voor game options +void MenuEnableHT(void) { g_iGameMode |= GO_HEADTRACKING; } +void MenuDisableHT(void) { g_iGameMode &= ~GO_HEADTRACKING; } +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 diff --git a/matchblox/menu/menu_msg.h b/matchblox/menu/menu_msg.h index 15dd423..9f6dc38 100644 --- a/matchblox/menu/menu_msg.h +++ b/matchblox/menu/menu_msg.h @@ -9,15 +9,32 @@ struct menu_payload enum game_actions { - ACTION_START = 0x0001, - ACTION_ABORT = 0x0002, - ACTION_PAUSE = 0x0004, - ACTION_RESUME = 0x0008 + ACTION_START = 1, + ACTION_ABORT = 2, + ACTION_PAUSE = 4, + ACTION_RESUME = 8 }; +typedef enum GameOption +{ + GO_HEADTRACKING = 1, + GO_STEREOVISION = 2, + GO_SHADOW = 4 +} GameOption; + void MenuPostMessagePause(void); void MenuPostMessageResume(void); void MenuPostMessageStart(void); void MenuPostMessageAbort(void); +void MenuEnableHT(void); +void MenuDisableHT(void); +void MenuEnableSV(void); +void MenuDisableSV(void); +void MenuEnableShadow(void); +void MenuDisableShadow(void); +void MenuSetBoxSmall(void); +void MenuSetBoxMedium(void); +void MenuSetBoxLarge(void); + #endif \ No newline at end of file -- cgit v0.12