summaryrefslogtreecommitdiffstats
path: root/MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp')
-rw-r--r--MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp238
1 files changed, 234 insertions, 4 deletions
diff --git a/MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp b/MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp
index ed40038..a0ad65e 100644
--- a/MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp
+++ b/MatchBloxEngine/MatchBloxEngine/C_MatchBloxEngine.cpp
@@ -1,23 +1,89 @@
+#include <GL/glut.h>
+#include <iostream>
+
#include "C_MatchBloxEngine.h"
-C_MatchBloxEngine::C_MatchBloxEngine(char *f_strModelPath, char *f_strLogFile)
+#include "C_3DObject.h"
+#include "C_Environment.h"
+#include "C_Hand.h"
+#include "C_Block.h"
+#include "C_Box.h"
+#include "C_Log.h"
+#include "bitmap.h"
+
+C_MatchBloxEngine::C_MatchBloxEngine(const char *f_strModelPath,
+ const char *f_strLogFile)
{
+ //create logger
+
+
+ //Load models
+ if (LoadModels(f_strModelPath))
+ {
+ //set state to initialised;
+ m_State = ES_INITIALISED;
+ }
+
+ //debug
+ m_pBox[0]->SetPos(0.0, -5.0, -15.0);
+ m_pBox[0]->SetRot(45.0, 0.0, 0.0);
+ m_pBox[0]->RandomizeTiles();
}
C_MatchBloxEngine::~C_MatchBloxEngine()
{
+ //destroy logger
+
+ //delete models
+ DeleteModels();
}
GameResult C_MatchBloxEngine::GameStep(msgQueue &f_Queue)
{
+ //process message queue
+
}
-void C_MatchBloxEngine::Draw(unsigned int f_uiElapsedTime)
+void C_MatchBloxEngine::Render(unsigned int f_uiElapsedTime)
{
+ switch (m_State)
+ {
+ case ES_INITIALISED:
+ break;
+ case ES_ERROR:
+ break;
+ case ES_GET_READY:
+ break;
+ case ES_PLAYING_GRAB_BLOCK:
+ break;
+ case ES_PLAYING_PUT_BLOCK:
+ break;
+ case ES_PAUSED:
+ break;
+ case ES_FINISHED:
+ break;
+ }
+ m_pEnvMap->Render();
+
+ m_pBox[0]->Render();
}
-bool C_MatchBloxEngine::NewGame(int f_iUserID, int f_iGameId)
+bool C_MatchBloxEngine::NewGame(int f_iUserID, int f_iGameId, BoxSize f_BS)
{
+ if(m_State == ES_INITIALISED)
+ {
+ //log new game
+
+ //prepare a fresh box
+ m_CurrentBox = f_BS;
+ m_pBox[(int)m_CurrentBox]->RandomizeTiles();
+
+ //set state to GET READY
+ m_State = ES_GET_READY;
+
+ return true;
+ }
+
return false;
}
@@ -28,15 +94,179 @@ bool C_MatchBloxEngine::StartGame()
bool C_MatchBloxEngine::Pause()
{
+ //only pause when playing
+ if (m_State == ES_PLAYING_GRAB_BLOCK ||
+ m_State == ES_PLAYING_PUT_BLOCK)
+ {
+ //save current state
+ m_SavedState = m_State;
+
+ //probably do something with a time variable
+
+ //set current state to paused
+ m_State = ES_PAUSED;
+
+ return true;
+ }
+
return false;
}
bool C_MatchBloxEngine::Resume()
{
+ if (m_State == ES_PAUSED)
+ {
+ //restore previous state
+ m_State = m_SavedState;
+
+ //restore timers
+ //
+
+ return true;
+ }
return false;
}
bool C_MatchBloxEngine::Abort()
{
+ //abort when not in error or init state
+ if (m_State != ES_ERROR && m_State != ES_INITIALISED)
+ {
+ //set state to initialised
+ m_State = ES_INITIALISED;
+
+ //..
+
+ return true;
+ }
return false;
-} \ No newline at end of file
+}
+
+bool C_MatchBloxEngine::LoadModels(const char* f_strModelDir)
+{
+ MatProps_t l_Mat;
+ std::string l_BaseName = f_strModelDir;
+
+ //create the environment mapped cube
+ m_pEnvMap = new C_Environment("envmaps/brightday2_", 50.0);
+
+ //load the bitmaps for the textures
+ LoadTexture((l_BaseName + "/wood1.bmp").c_str(), m_uiWood1Tex);
+ LoadTexture((l_BaseName + "/wood2.bmp").c_str(), m_uiWood2Tex);
+ LoadTexture((l_BaseName + "/wood3.bmp").c_str(), m_uiWood3Tex);
+
+ //load the block models
+ //red squares
+ l_Mat.setAmb(1.0, 0.0, 0.0, 1.0);
+ l_Mat.setDif(1.0, 0.0, 0.0, 1.0);
+ m_pBlock[BT_SQUARE] = new C_Block((l_BaseName + "/square.obj").c_str(),
+ m_uiWood1Tex, l_Mat);
+ if (!m_pBlock[BT_SQUARE]->Initialized()) return false;
+
+ //yellow cricles
+ l_Mat.setAmb(0.0, 1.0, 1.0, 1.0);
+ l_Mat.setDif(0.0, 1.0, 1.0, 1.0);
+ m_pBlock[BT_CIRCLE] = new C_Block((l_BaseName + "/circle.obj").c_str(),
+ m_uiWood1Tex, l_Mat);
+ if (!m_pBlock[BT_CIRCLE]->Initialized()) return false;
+
+ //green triangles
+ l_Mat.setAmb(0.0, 1.0, 0.0, 1.0);
+ l_Mat.setDif(0.0, 1.0, 0.0, 1.0);
+ m_pBlock[BT_TRIANGLE] = new C_Block((l_BaseName + "/triangle.obj").c_str(),
+ m_uiWood1Tex, l_Mat);
+ if (!m_pBlock[BT_TRIANGLE]->Initialized()) return false;
+
+ //blue crosses
+ l_Mat.setAmb(0.0, 0.0, 1.0, 1.0);
+ l_Mat.setDif(0.0, 0.0, 1.0, 1.0);
+ m_pBlock[BT_CROSS] = new C_Block((l_BaseName + "/cross.obj").c_str(),
+ m_uiWood1Tex, l_Mat);
+ if (!m_pBlock[BT_CROSS]->Initialized()) return false;
+
+
+ //load the hand???
+
+
+ //Load the box tiles
+ l_Mat.setAmb(1.0, 1.0, 1.0, 1.0);
+ l_Mat.setDif(1.0, 1.0, 1.0, 1.0);
+
+ m_pTiles[BT_SQUARE] = new C_3DObject((l_BaseName + "/tile_square.obj").c_str(),
+ m_uiWood3Tex, l_Mat);
+ if (!m_pTiles[BT_SQUARE]->Initialized()) return false;
+
+ m_pTiles[BT_CIRCLE] = new C_3DObject((l_BaseName + "/tile_circle.obj").c_str(),
+ m_uiWood3Tex, l_Mat);
+ if (!m_pTiles[BT_CIRCLE]->Initialized()) return false;
+
+ m_pTiles[BT_TRIANGLE] = new C_3DObject((l_BaseName + "/tile_triangle.obj").c_str(),
+ m_uiWood3Tex, l_Mat);
+ if (!m_pTiles[BT_TRIANGLE]->Initialized()) return false;
+
+ m_pTiles[BT_CROSS] = new C_3DObject((l_BaseName + "/tile_cross.obj").c_str(),
+ m_uiWood3Tex, l_Mat);
+ if (!m_pTiles[BT_CROSS]->Initialized()) return false;
+
+ m_pTiles[4] = new C_3DObject((l_BaseName + "/tile_no_hole.obj").c_str(),
+ m_uiWood3Tex, l_Mat);
+ if (!m_pTiles[4]->Initialized()) return false;
+
+
+ //Load the box models
+ m_pBox[0] = new C_Box((l_BaseName + "/box_small.obj").c_str(),
+ m_uiWood2Tex, l_Mat, 2, 2, m_pTiles);
+ if (!m_pBox[0]->Initialized()) return false;
+
+ m_pBox[1] = new C_Box((l_BaseName + "/box_med.obj").c_str(),
+ m_uiWood2Tex, l_Mat, 4, 2, m_pTiles);
+ if (!m_pBox[1]->Initialized()) return false;
+
+ m_pBox[2] = new C_Box((l_BaseName + "/box_large.obj").c_str(),
+ m_uiWood2Tex, l_Mat, 4, 4, m_pTiles);
+ if (!m_pBox[2]->Initialized()) return false;
+
+
+ return true;
+}
+
+void C_MatchBloxEngine::DeleteModels()
+{
+ //delete objects
+ delete m_pEnvMap;
+ delete m_pBlock[0];
+ delete m_pBlock[1];
+ delete m_pBlock[2];
+ delete m_pBlock[3];
+ //delete m_pHand;
+ delete m_pBox[0];
+ delete m_pBox[1];
+ delete m_pBox[2];
+ delete m_pTiles[0];
+ delete m_pTiles[1];
+ delete m_pTiles[2];
+ delete m_pTiles[3];
+ delete m_pTiles[4];
+
+ //delete textures
+ glDeleteTextures(1, &m_uiWood1Tex);
+ glDeleteTextures(1, &m_uiWood2Tex);
+ glDeleteTextures(1, &m_uiWood3Tex);
+}
+
+void C_MatchBloxEngine::LoadTexture(const char* f_BmpName, GLuint &f_uiTexHandle)
+{
+ BitmapStruct l_Bmp;
+
+ l_Bmp = BitmapLoad((char*)f_BmpName);
+ f_uiTexHandle = (GLuint)l_Bmp.m_iImageId;
+
+ glBindTexture(GL_TEXTURE_2D, f_uiTexHandle);
+
+ //set the texture paramaters
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+}
+