summaryrefslogtreecommitdiffstats
path: root/matchblox/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'matchblox/main.cpp')
-rw-r--r--matchblox/main.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/matchblox/main.cpp b/matchblox/main.cpp
new file mode 100644
index 0000000..dc4ec64
--- /dev/null
+++ b/matchblox/main.cpp
@@ -0,0 +1,158 @@
+#include <GL/glut.h>
+#include <iostream>
+
+#include "MessageQueue.h"
+#include "C_MatchBloxEngine.h"
+
+#define SCREEN_WIDTH 640
+#define SCREEN_HEIGHT 480
+
+msgQueue g_Queue;
+C_MatchBloxEngine *g_pEngine;
+
+void init_gl(void)
+{
+ GLfloat l_fLightpos[4] = {0.0, 1.0, 1.0, 0.0};
+ glClearColor(0.9, 0.9, 0.9, 1.0);
+ glClearDepth(1000.0);
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_DEPTH_TEST);
+ glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHT0);
+ glLightfv(GL_LIGHT0, GL_POSITION, l_fLightpos);
+ glEnable(GL_NORMALIZE);
+
+ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+} // init_gl
+
+void idle_func(void)
+{
+ //call engine idle func
+
+ glutPostRedisplay();
+}
+
+void render_scene(void)
+{
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ g_pEngine->Render(glutGet(GLUT_ELAPSED_TIME));
+
+ glutSwapBuffers();
+
+} // render_scene
+
+void reshape(int w, int h)
+{
+ //set the new viewport dimension
+ glViewport(0, 0, w, h);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(90.0, ((GLdouble)h)/((GLdouble)w), 0.5, 100.0);
+ glTranslated(0.0, 0.0, -0.5);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+}
+
+void process_normal_keys(unsigned char key, int x, int y)
+{
+ // escape
+ if (key == 27)
+ {
+ exit(0);
+ }
+ else
+ {
+ if (key == 'n')
+ {
+ g_pEngine->Abort();
+ g_pEngine->NewGame(0, 0, BS_LARGE);
+ }
+ msgStruct l_msg;
+ l_msg.m_MessageType = KEY_PRESS;
+ l_msg.parm1 = key;
+ l_msg.parm2 = x;
+ l_msg.parm3 = y;
+
+ g_Queue.push(l_msg);
+ }
+} // process_normal_keys
+
+
+
+void process_special_keys(int key, int x, int y)
+{
+ switch (key)
+ {
+ // do sumting
+ }
+ msgStruct l_msg;
+ l_msg.m_MessageType = SPECIAL_KEY;
+ l_msg.parm1 = key;
+ l_msg.parm2 = x;
+ l_msg.parm3 = y;
+
+ g_Queue.push(l_msg);
+
+} // process_special_keys
+
+
+
+void process_mouse(int button, int state, int x, int y)
+{
+ msgStruct l_msg;
+ l_msg.m_MessageType = MOUSE_PRESS;
+ l_msg.parm1 = button;
+ l_msg.parm2 = state;
+ l_msg.parm3 = x;
+ l_msg.parm4 = y;
+
+ g_Queue.push(l_msg);
+
+
+} // process_mouse
+
+
+
+void process_passive_mouse(int x, int y)
+{
+ //process_mouse(-1, -1, x, y);
+ msgStruct l_msg;
+ l_msg.m_MessageType = MOUSE_MOVE;
+ l_msg.parm1 = x;
+ l_msg.parm2 = y;
+ l_msg.parm3 = 0;
+ l_msg.parm4 = 0;
+
+ g_Queue.push(l_msg);
+
+} // process_passive_mouse
+
+
+
+int main(int argc, char **argv)
+{
+ glutInit(&argc, argv);
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+ glutInitWindowSize(SCREEN_WIDTH, SCREEN_HEIGHT);
+ glutCreateWindow("MatchBloxEngine demo");
+
+ glutReshapeFunc(reshape);
+ glutDisplayFunc(render_scene);
+ glutIdleFunc(idle_func);
+ glutKeyboardFunc(process_normal_keys);
+ glutSpecialFunc(process_special_keys);
+ glutMouseFunc(process_mouse);
+ glutPassiveMotionFunc(process_passive_mouse);
+
+ init_gl();
+ //MenuInit(SCREEN_WIDTH, SCREEN_HEIGHT);
+
+ g_pEngine = new C_MatchBloxEngine("models", "");
+
+ glutMainLoop();
+
+ return 0;
+
+} // main
+