summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--matchblox/engine/C_MatchBloxEngine.cpp18
-rw-r--r--matchblox/main.cpp4
-rw-r--r--matchblox/menu/menu.c38
-rw-r--r--matchblox/menu/menu.h2
-rw-r--r--matchblox/menu/menu_msg.c20
-rw-r--r--matchblox/menu/menu_msg.h10
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 <math.h>
#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);