summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--matchblox/engine/C_MatchBloxEngine.cpp12
-rw-r--r--matchblox/engine/C_MatchBloxEngine.h1
-rw-r--r--matchblox/menu/menu.c71
-rw-r--r--matchblox/menu/menu_msg.c17
-rw-r--r--matchblox/menu/menu_msg.h25
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