From fe6ccf46d9d508fb64f70dadeed6f3619d0e3215 Mon Sep 17 00:00:00 2001 From: Rtch90 Date: Sun, 6 Nov 2011 23:11:15 +0000 Subject: [PATCH] -- [Re-Write] Removed nearly everything, and started from scratch. The reason for doing this? Got an idea for gameplay, and what I previusly wrote did not fit, and it sucked anyhow. Let's play. --- Unuk-QT/Entity.o | Bin 0 -> 11496 bytes Unuk-QT/Game.o | Bin 0 -> 22248 bytes Unuk-QT/ImageLoader.o | Bin 0 -> 21628 bytes Unuk-QT/Makefile | 75 +++------- Unuk-QT/Player.o | Bin 0 -> 26504 bytes Unuk-QT/Sprite.o | Bin 0 -> 47508 bytes Unuk-QT/Unuk-QT.pro | 35 ++--- Unuk-QT/Unuk-QT.pro.user | 24 +-- src/Unuk/Constants.h | 15 ++ src/Unuk/Game.cpp | 145 ------------------ src/Unuk/Game.h | 30 ---- src/Unuk/Makefile | 2 +- src/Unuk/Player.cpp | 63 -------- src/Unuk/Player.h | 33 ---- src/Unuk/main.cpp | 19 +-- src/libUnuk/AStar.cpp | 289 ------------------------------------ src/libUnuk/AStar.h | 59 -------- src/libUnuk/Entity.cpp | 35 ----- src/libUnuk/Entity.h | 46 ------ src/libUnuk/EntityType.h | 8 - src/libUnuk/Font.cpp | 11 ++ src/libUnuk/Font.h | 11 ++ src/libUnuk/Geometry.h | 92 ------------ src/libUnuk/ImageLoader.cpp | 178 ---------------------- src/libUnuk/ImageLoader.h | 76 ---------- src/libUnuk/Makefile | 2 +- src/libUnuk/Node.h | 48 ------ src/libUnuk/Rect.h | 8 + src/libUnuk/Sprite.cpp | 249 ------------------------------- src/libUnuk/Sprite.h | 64 -------- src/libUnuk/Static.h | 22 --- src/libUnuk/Timer.cpp | 45 ++++++ src/libUnuk/Timer.h | 29 ++++ src/libUnuk/Win32Window.cpp | 250 ------------------------------- src/libUnuk/Win32Window.h | 54 ------- 35 files changed, 174 insertions(+), 1843 deletions(-) create mode 100644 Unuk-QT/Entity.o create mode 100644 Unuk-QT/Game.o create mode 100644 Unuk-QT/ImageLoader.o create mode 100644 Unuk-QT/Player.o create mode 100644 Unuk-QT/Sprite.o create mode 100644 src/Unuk/Constants.h delete mode 100644 src/Unuk/Game.cpp delete mode 100644 src/Unuk/Game.h delete mode 100644 src/Unuk/Player.cpp delete mode 100644 src/Unuk/Player.h delete mode 100644 src/libUnuk/AStar.cpp delete mode 100644 src/libUnuk/AStar.h delete mode 100644 src/libUnuk/Entity.cpp delete mode 100644 src/libUnuk/Entity.h delete mode 100644 src/libUnuk/EntityType.h create mode 100644 src/libUnuk/Font.cpp create mode 100644 src/libUnuk/Font.h delete mode 100644 src/libUnuk/Geometry.h delete mode 100644 src/libUnuk/ImageLoader.cpp delete mode 100644 src/libUnuk/ImageLoader.h delete mode 100644 src/libUnuk/Node.h create mode 100644 src/libUnuk/Rect.h delete mode 100644 src/libUnuk/Sprite.cpp delete mode 100644 src/libUnuk/Sprite.h delete mode 100644 src/libUnuk/Static.h create mode 100644 src/libUnuk/Timer.cpp create mode 100644 src/libUnuk/Timer.h delete mode 100644 src/libUnuk/Win32Window.cpp delete mode 100644 src/libUnuk/Win32Window.h diff --git a/Unuk-QT/Entity.o b/Unuk-QT/Entity.o new file mode 100644 index 0000000000000000000000000000000000000000..267e38877f9b534a2f05e272f17550217bea3073 GIT binary patch literal 11496 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 literal 0 HcmV?d00001 diff --git a/Unuk-QT/Game.o b/Unuk-QT/Game.o new file mode 100644 index 0000000000000000000000000000000000000000..b8d347c94735a4b09f865068e386dc3172c75f67 GIT binary patch literal 22248 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 CdrxHm literal 0 HcmV?d00001 diff --git a/Unuk-QT/ImageLoader.o b/Unuk-QT/ImageLoader.o new file mode 100644 index 0000000000000000000000000000000000000000..543f93ab5b2c74b1d9caedc3767b505e321678fa GIT binary patch literal 21628 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 literal 0 HcmV?d00001 diff --git a/Unuk-QT/Makefile b/Unuk-QT/Makefile index 0133a25..9e32f8d 100644 --- a/Unuk-QT/Makefile +++ b/Unuk-QT/Makefile @@ -1,6 +1,6 @@ ############################################################################# # Makefile for building: Unuk-QT -# Generated by qmake (2.01a) (Qt 4.7.3) on: Tue Oct 25 22:14:31 2011 +# Generated by qmake (2.01a) (Qt 4.7.3) on: Sun Nov 6 22:57:44 2011 # Project: Unuk-QT.pro # Template: app # Command: /usr/bin/qmake-qt4 -spec /usr/share/qt4/mkspecs/linux-g++ CONFIG+=debug -o Makefile Unuk-QT.pro @@ -16,7 +16,7 @@ CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT $(DEFINES) INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. LINK = g++ LFLAGS = -LIBS = $(SUBLIBS) -L/usr/lib -lGL -lSDL -lGLU -lQtGui -lQtCore -lpthread +LIBS = $(SUBLIBS) -L/usr/lib -lGL -lSDL -lSDL_ttf -lGLU -lQtGui -lQtCore -lpthread AR = ar cqs RANLIB = QMAKE = /usr/bin/qmake-qt4 @@ -43,26 +43,21 @@ OBJECTS_DIR = ./ ####### Files -SOURCES = ../src/libUnuk/Sprite.cpp \ - ../src/libUnuk/ImageLoader.cpp \ - ../src/libUnuk/Debug.cpp \ - ../src/Unuk/Player.cpp \ +SOURCES = ../src/libUnuk/Debug.cpp \ ../src/Unuk/main.cpp \ - ../src/Unuk/Game.cpp \ - ../src/libUnuk/Entity.cpp \ - ../src/libUnuk/Input.cpp -OBJECTS = Sprite.o \ - ImageLoader.o \ - Debug.o \ - Player.o \ + ../src/libUnuk/Input.cpp \ + ../src/libUnuk/Timer.cpp \ + ../src/libUnuk/Font.cpp +OBJECTS = Debug.o \ main.o \ - Game.o \ - Entity.o \ - Input.o + Input.o \ + Timer.o \ + Font.o DIST = /usr/share/qt4/mkspecs/common/g++.conf \ /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/common/linux.conf \ /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/modules/qt_phonon.pri \ /usr/share/qt4/mkspecs/features/qt_functions.prf \ /usr/share/qt4/mkspecs/features/qt_config.prf \ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ @@ -114,6 +109,7 @@ Makefile: Unuk-QT.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt /usr/share/qt4/mkspecs/common/unix.conf \ /usr/share/qt4/mkspecs/common/linux.conf \ /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/modules/qt_phonon.pri \ /usr/share/qt4/mkspecs/features/qt_functions.prf \ /usr/share/qt4/mkspecs/features/qt_config.prf \ /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ @@ -136,6 +132,7 @@ Makefile: Unuk-QT.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt /usr/share/qt4/mkspecs/common/unix.conf: /usr/share/qt4/mkspecs/common/linux.conf: /usr/share/qt4/mkspecs/qconfig.pri: +/usr/share/qt4/mkspecs/modules/qt_phonon.pri: /usr/share/qt4/mkspecs/features/qt_functions.prf: /usr/share/qt4/mkspecs/features/qt_config.prf: /usr/share/qt4/mkspecs/features/exclusive_builds.prf: @@ -158,7 +155,7 @@ qmake: FORCE dist: @$(CHK_DIR_EXISTS) .tmp/Unuk-QT1.0.0 || $(MKDIR) .tmp/Unuk-QT1.0.0 - $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/ImageLoader.h ../src/libUnuk/Sprite.h ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/Unuk/Game.h ../src/Unuk/Player.h ../src/libUnuk/Static.h ../src/libUnuk/Geometry.h ../src/libUnuk/Entity.h ../src/libUnuk/EntityType.h ../src/libUnuk/Input.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Sprite.cpp ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/Debug.cpp ../src/Unuk/Player.cpp ../src/Unuk/main.cpp ../src/Unuk/Game.cpp ../src/libUnuk/Entity.cpp ../src/libUnuk/Input.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.h ../src/Libs/wglext.h ../src/Libs/glxext.h ../src/libUnuk/Input.h ../src/libUnuk/Rect.h ../src/libUnuk/Timer.h ../src/libUnuk/Font.h ../Constants.h ../src/Unuk/Constants.h .tmp/Unuk-QT1.0.0/ && $(COPY_FILE) --parents ../src/libUnuk/Debug.cpp ../src/Unuk/main.cpp ../src/libUnuk/Input.cpp ../src/libUnuk/Timer.cpp ../src/libUnuk/Font.cpp .tmp/Unuk-QT1.0.0/ && (cd `dirname .tmp/Unuk-QT1.0.0` && $(TAR) Unuk-QT1.0.0.tar Unuk-QT1.0.0 && $(COMPRESS) Unuk-QT1.0.0.tar) && $(MOVE) `dirname .tmp/Unuk-QT1.0.0`/Unuk-QT1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Unuk-QT1.0.0 clean:compiler_clean @@ -200,50 +197,24 @@ compiler_clean: ####### Compile -Sprite.o: ../src/libUnuk/Sprite.cpp ../src/libUnuk/Sprite.h \ - ../src/libUnuk/ImageLoader.h \ - ../src/libUnuk/Debug.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Sprite.o ../src/libUnuk/Sprite.cpp - -ImageLoader.o: ../src/libUnuk/ImageLoader.cpp ../src/libUnuk/ImageLoader.h \ - ../src/libUnuk/Debug.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o ImageLoader.o ../src/libUnuk/ImageLoader.cpp - Debug.o: ../src/libUnuk/Debug.cpp ../src/libUnuk/Debug.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Debug.o ../src/libUnuk/Debug.cpp -Player.o: ../src/Unuk/Player.cpp ../src/libUnuk/Sprite.h \ - ../src/libUnuk/ImageLoader.h \ +main.o: ../src/Unuk/main.cpp ../src/libUnuk/Input.h \ ../src/libUnuk/Debug.h \ - ../src/libUnuk/Input.h \ - ../src/Unuk/Player.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Player.o ../src/Unuk/Player.cpp - -main.o: ../src/Unuk/main.cpp ../src/Unuk/Game.h \ - ../src/Unuk/Player.h \ - ../src/libUnuk/Sprite.h \ - ../src/libUnuk/ImageLoader.h \ - ../src/libUnuk/Input.h \ - ../src/libUnuk/Debug.h + ../src/Unuk/Constants.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../src/Unuk/main.cpp -Game.o: ../src/Unuk/Game.cpp ../src/Unuk/Game.h \ - ../src/Unuk/Player.h \ - ../src/libUnuk/Sprite.h \ - ../src/libUnuk/ImageLoader.h \ - ../src/libUnuk/Input.h \ - ../src/libUnuk/Debug.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Game.o ../src/Unuk/Game.cpp - -Entity.o: ../src/libUnuk/Entity.cpp ../src/libUnuk/Entity.h \ - ../src/libUnuk/Geometry.h \ - ../src/libUnuk/EntityType.h \ - ../src/libUnuk/Static.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Entity.o ../src/libUnuk/Entity.cpp - Input.o: ../src/libUnuk/Input.cpp ../src/libUnuk/Input.h $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Input.o ../src/libUnuk/Input.cpp +Timer.o: ../src/libUnuk/Timer.cpp ../src/libUnuk/Timer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Timer.o ../src/libUnuk/Timer.cpp + +Font.o: ../src/libUnuk/Font.cpp ../src/libUnuk/Font.h \ + ../src/libUnuk/Debug.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o Font.o ../src/libUnuk/Font.cpp + ####### Install install: FORCE diff --git a/Unuk-QT/Player.o b/Unuk-QT/Player.o new file mode 100644 index 0000000000000000000000000000000000000000..a48f48738ecc4f0ae4f089e3a021904e593dbac5 GIT binary patch literal 26504 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 F{{x#+J;VS2 literal 0 HcmV?d00001 diff --git a/Unuk-QT/Sprite.o b/Unuk-QT/Sprite.o new file mode 100644 index 0000000000000000000000000000000000000000..bd9d82bfd56be18f4839b98a728defc3fab3e908 GIT binary patch literal 47508 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 literal 0 HcmV?d00001 diff --git a/Unuk-QT/Unuk-QT.pro b/Unuk-QT/Unuk-QT.pro index 47afe03..5323b14 100644 --- a/Unuk-QT/Unuk-QT.pro +++ b/Unuk-QT/Unuk-QT.pro @@ -1,29 +1,20 @@ LIBS += -lGL \ -lSDL \ + -lSDL_ttf \ -lGLU RESOURCES += -OTHER_FILES += ../src/libUnuk/Vec2.o \ - ../src/libUnuk/ImageLoader.o \ - ../src/libUnuk/GlxWindow.o \ - ../src/libUnuk/Sprite.o \ - ../src/libUnuk/Debug.o -HEADERS += ../src/libUnuk/ImageLoader.h \ - ../src/libUnuk/Sprite.h \ - ../src/libUnuk/Debug.h \ +OTHER_FILES += ../src/libUnuk/Debug.o +HEADERS += ../src/libUnuk/Debug.h \ ../src/Libs/wglext.h \ ../src/Libs/glxext.h \ - ../src/Unuk/Game.h \ - ../src/Unuk/Player.h \ - ../src/libUnuk/Static.h \ - ../src/libUnuk/Geometry.h \ - ../src/libUnuk/Entity.h \ - ../src/libUnuk/EntityType.h \ - ../src/libUnuk/Input.h -SOURCES += ../src/libUnuk/Sprite.cpp \ - ../src/libUnuk/ImageLoader.cpp \ - ../src/libUnuk/Debug.cpp \ - ../src/Unuk/Player.cpp \ + ../src/libUnuk/Input.h \ + ../src/libUnuk/Rect.h \ + ../src/libUnuk/Timer.h \ + ../src/libUnuk/Font.h \ + ../Constants.h \ + ../src/Unuk/Constants.h +SOURCES += ../src/libUnuk/Debug.cpp \ ../src/Unuk/main.cpp \ - ../src/Unuk/Game.cpp \ - ../src/libUnuk/Entity.cpp \ - ../src/libUnuk/Input.cpp + ../src/libUnuk/Input.cpp \ + ../src/libUnuk/Timer.cpp \ + ../src/libUnuk/Font.cpp diff --git a/Unuk-QT/Unuk-QT.pro.user b/Unuk-QT/Unuk-QT.pro.user index 4fbe52a..ceb10f6 100644 --- a/Unuk-QT/Unuk-QT.pro.user +++ b/Unuk-QT/Unuk-QT.pro.user @@ -76,7 +76,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-KIZOCtJ0Qj,guid=2d6e4614e1a8d0c60ff1566700000052 + DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-PlNAR2DRhi,guid=647dcd2f857df095e9fb55f200000037 DISPLAY=:0 HOME=/home/allanis HUSHLOGIN=FALSE @@ -89,13 +89,13 @@ QTDIR=/usr/share/qt4 SHELL=/bin/bash SHLVL=1 - SSH_AGENT_PID=3289 - SSH_AUTH_SOCK=/tmp/ssh-bmvArYgf3264/agent.3264 + SSH_AGENT_PID=3247 + SSH_AUTH_SOCK=/tmp/ssh-aXmQFZXr3222/agent.3222 TERM=linux USER=allanis WINDOWPATH=7 XAUTHORITY=/home/allanis/.Xauthority - XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1319816808.532592-2012073557 + XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1320507013.488131-497740237 _=/usr/bin/startx @@ -115,7 +115,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-KIZOCtJ0Qj,guid=2d6e4614e1a8d0c60ff1566700000052 + DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-PlNAR2DRhi,guid=647dcd2f857df095e9fb55f200000037 DISPLAY=:0 HOME=/home/allanis HUSHLOGIN=FALSE @@ -128,13 +128,13 @@ QTDIR=/usr/share/qt4 SHELL=/bin/bash SHLVL=1 - SSH_AGENT_PID=3289 - SSH_AUTH_SOCK=/tmp/ssh-bmvArYgf3264/agent.3264 + SSH_AGENT_PID=3247 + SSH_AUTH_SOCK=/tmp/ssh-aXmQFZXr3222/agent.3222 TERM=linux USER=allanis WINDOWPATH=7 XAUTHORITY=/home/allanis/.Xauthority - XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1319816808.532592-2012073557 + XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1320507013.488131-497740237 _=/usr/bin/startx false @@ -151,7 +151,7 @@ Debug - DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-KIZOCtJ0Qj,guid=2d6e4614e1a8d0c60ff1566700000052 + DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-PlNAR2DRhi,guid=647dcd2f857df095e9fb55f200000037 DISPLAY=:0 HOME=/home/allanis HUSHLOGIN=FALSE @@ -164,13 +164,13 @@ QTDIR=/usr/share/qt4 SHELL=/bin/bash SHLVL=1 - SSH_AGENT_PID=3289 - SSH_AUTH_SOCK=/tmp/ssh-bmvArYgf3264/agent.3264 + SSH_AGENT_PID=3247 + SSH_AUTH_SOCK=/tmp/ssh-aXmQFZXr3222/agent.3222 TERM=linux USER=allanis WINDOWPATH=7 XAUTHORITY=/home/allanis/.Xauthority - XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1319816808.532592-2012073557 + XDG_SESSION_COOKIE=6de6dd7b78e791242262c6460000012e-1320507013.488131-497740237 _=/usr/bin/startx true diff --git a/src/Unuk/Constants.h b/src/Unuk/Constants.h new file mode 100644 index 0000000..ae2f3ba --- /dev/null +++ b/src/Unuk/Constants.h @@ -0,0 +1,15 @@ +#ifndef _CONSTANTS_H_ +#define _CONSTANTS_H_ +#include + +const int TILE_WIDTH = 64; +const int TILE_HEIGHT = 64; + +const int SCREEN_WIDTH = 640; +const int SCREEN_HEIGHT = 480; +const int SCREEN_BPP = 16; + +const SDL_Color COLOUR_BLACK = { 0, 0, 0 }; +const SDL_Color COLOUR_WHITE = { 255, 255, 255 }; + +#endif diff --git a/src/Unuk/Game.cpp b/src/Unuk/Game.cpp deleted file mode 100644 index bb8529f..0000000 --- a/src/Unuk/Game.cpp +++ /dev/null @@ -1,145 +0,0 @@ -#ifdef WIN32 -#include -#endif - -#include -#include -#include -#include -#include - -#include "SDL/SDL.h" -#include "Game.h" -#include "Player.h" -#include "../libUnuk/Input.h" -#include "../libUnuk/Sprite.h" -#include "../libUnuk/Debug.h" - -Game::Game(void) { - m_assets = false; - m_rotationAngle = 0.0f; -} - -Game::~Game(void) { - DeleteAssets(); -} - -bool Game::Init(void) { - LoadAssets(); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - m_assets = true; - return true; -} - -void Game::Prepare(float dt) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glShadeModel(GL_FLAT); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - Sprite::Enable2D(); - - m_player->Prepare(); - - const float SPEED = 15.0f; - m_rotationAngle += SPEED * dt; - if(m_rotationAngle > 360.0f) { - m_rotationAngle -= 360.0f; - } -} - -void Game::Render(void) { - static GLint T0 = 0; - static GLint frames = 0; - - glClear(GL_COLOR_BUFFER_BIT); - glRasterPos2i(0, 0); - - // Draw the test image. - if(m_assets) { - m_player->Render(); - } - - glFlush(); - - glDisable(GL_TEXTURE_2D); - - // Get frames per second. - frames++; - { - GLint t = SDL_GetTicks(); - if (t - T0 >= 5000) { - GLfloat seconds = (t - T0) / 1000.0f; - GLfloat fps = frames / seconds; - Debug::logger->message("\n%d frames in %g seconds = %g FPS", frames, seconds, fps); - T0 = t; - frames = 0; - } - } -} - -void Game::Shutdown(void) { - Debug::logger->message("\n\n-----Cleaning Up-----"); - m_player->CleanUp(); - delete m_player; - Debug::logger->message("\nPlayer Deleted."); - Debug::closeLog(); -} - -void Game::UpdateProjection(void) { - GLint iViewport[4]; - - // Get a copy of the viewport. - glGetIntegerv(GL_VIEWPORT, iViewport); - glPushMatrix(); - glLoadIdentity(); - - // Save a copy of the projection matrix so that we can restore - // it when it's time to do 3D rendering again. - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - // Set up the orthographic projection. - glOrtho( iViewport[0], iViewport[0] + iViewport[2], - iViewport[1] + iViewport[3], iViewport[1], -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - // Make sure depth testing and lighting are disabled for 2D rendering - //until we are finished rendering in 2D. - glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_LIGHTING_BIT); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); - -// glMatrixMode(GL_PROJECTION); -// glLoadIdentity(); -// -// // Set up the orthographic projection. -// glOrtho(-1.0, 1.0, -1.0, 1.0, 1.0, 1000.0); -// -// glMatrixMode(GL_MODELVIEW); -// glLoadIdentity(); -} - -void Game::OnResize(int width, int height) { - // Let's see you divide by zero now! - if(height == 0) { height = 1; } - - // Set the viewport to the window size. - glViewport(0, 0, width, height); - - // Set the projection. - UpdateProjection(); -} - -void Game::LoadAssets(void) { - m_player = new Player(); -} - -void Game::DeleteAssets(void) { - delete m_player; -} diff --git a/src/Unuk/Game.h b/src/Unuk/Game.h deleted file mode 100644 index 2e10979..0000000 --- a/src/Unuk/Game.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _GAME_H_ -#define _GAME_H_ -#include "SDL/SDL.h" -#include "Player.h" - -class Game { -public: - Game(void); - ~Game(void); - - bool Init(void); - void Prepare(float dt); - void Render(void); - void Shutdown(void); - - void UpdateProjection(); - void OnResize(int width, int height); - - bool IsInit(void) { return m_assets; } - -private: - void LoadAssets(void); - void DeleteAssets(void); - float m_rotationAngle; - Player *m_player; - - bool m_assets; -}; - -#endif diff --git a/src/Unuk/Makefile b/src/Unuk/Makefile index 6008509..21dff96 100644 --- a/src/Unuk/Makefile +++ b/src/Unuk/Makefile @@ -2,7 +2,7 @@ CC = g++ CFLAGS = -ansi -Wall -g LDADD = -lGL -lGLU -lSDL -lSDL_image -objects = Game.o Player.o +objects = .PHONY: default all clean diff --git a/src/Unuk/Player.cpp b/src/Unuk/Player.cpp deleted file mode 100644 index efc8039..0000000 --- a/src/Unuk/Player.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include -#include "../libUnuk/Sprite.h" -#include "../libUnuk/Debug.h" -#include "../libUnuk/Input.h" -#include "Player.h" - -Player::Player(void) : m_posx(0), m_posy(0) { - m_player = new Sprite("../Data/Media/test.bmp"); -} - -Player::~Player(void) { - CleanUp(); -} - -void Player::Prepare(void) { - // I borked up the image loader, so for now we will - // rotate the image 180 degrees. - m_player->Rotate(180); - m_player->SetScale(0.5f, 0.5f); - //Set our pivot to the top right. - m_player->SetPivot(1.0f, 1.0f); - - CreateInput(); - // Move the player. - if(KeyStillDown(SDLK_w) || KeyStillDown(SDLK_UP)) { SetVelocity(0, -5); } - if(KeyStillDown(SDLK_a) || KeyStillDown(SDLK_LEFT)) { SetVelocity(-5, 0); } - if(KeyStillDown(SDLK_s) || KeyStillDown(SDLK_DOWN)) { SetVelocity( 0, 5); } - if(KeyStillDown(SDLK_d) || KeyStillDown(SDLK_RIGHT)) { SetVelocity( 5, 0); } - UpdateInput(); - - SetPosition(m_posx, m_posy); -} - -void Player::Render(void) { - // Only render calls should appear here. - m_player->Render(); -} - -//void Player::SetSprite(void) { -// m_player = new Sprite("../Data/Media/test.bmp"); -//} - -void Player::SetPosition(GLdouble posx, GLdouble posy) { - // Set the position of the player sprite. - m_posx = posx; - m_posy = posy; - - m_player->SetX(m_posx); - m_player->SetY(m_posy); -} - -void Player::SetVelocity(GLdouble velx, GLdouble vely) { - m_velx = velx; - m_vely = vely; - - m_posx += m_velx; - m_posy += m_vely; -} - -void Player::CleanUp(void) { - delete m_player; -} diff --git a/src/Unuk/Player.h b/src/Unuk/Player.h deleted file mode 100644 index 3672047..0000000 --- a/src/Unuk/Player.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _PLAYER_H_ -#define _PLAYER_H_ -#include -#include "../libUnuk/Sprite.h" - -class Player { -public: - Player(void); - ~Player(void); - - void Prepare(void); - void Render(void); - - void SetSprite(void); - - void SetPosition(GLdouble posx, GLdouble posy); - void SetVelocity(GLdouble velx, GLdouble vely); - - void CleanUp(void); - -private: - Sprite* m_player; - - // Position variables. - GLdouble m_posx; - GLdouble m_posy; - - // Velocity variables. - int m_velx; - int m_vely; -}; - -#endif diff --git a/src/Unuk/main.cpp b/src/Unuk/main.cpp index 7ca1fda..faa8cf7 100644 --- a/src/Unuk/main.cpp +++ b/src/Unuk/main.cpp @@ -7,14 +7,14 @@ #include #include #include "SDL/SDL.h" -#include "Game.h" #include "../libUnuk/Input.h" #include "../libUnuk/Debug.h" +#include "Constants.h" // Screen width, height, and bit depth. -const int SCREEN_WIDTH = 640; -const int SCREEN_HEIGHT = 480; -const int SCREEN_BPP = 16; +//const int SCREEN_WIDTH = 640; +//const int SCREEN_HEIGHT = 480; +//const int SCREEN_BPP = 16; // Define our SDL surface. SDL_Surface *surface; @@ -120,7 +120,6 @@ int main() { bool done = false; SDL_Event event; const SDL_VideoInfo *videoInfo; - Game game; // Initialize SDL. if(SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -170,8 +169,6 @@ int main() { // Initialize OpenGL. InitGL(); - Debug::logger->message("Game Initialize!"); - Debug::logger->message("\n\n-----Engine Initialization Complete-----"); Debug::logger->message("\n\n-----Logic-----"); @@ -204,13 +201,7 @@ int main() { } // Render the scene. float elapsedTime = GetElapsedSeconds(); - //game.ProcessEvents(); - //game.Init(); - if(!game.IsInit()) { - game.Init(); - } - game.Prepare(elapsedTime); - game.Render(); + SDL_GL_SwapBuffers(); } //game.Shutdown(); diff --git a/src/libUnuk/AStar.cpp b/src/libUnuk/AStar.cpp deleted file mode 100644 index 4e00042..0000000 --- a/src/libUnuk/AStar.cpp +++ /dev/null @@ -1,289 +0,0 @@ -#include -#include "AStar.h" -#include "Node.h" - -AStar::AStar(void) { - m_open = NULL; - m_stack = NULL; - m_best = NULL; - - udCost = NULL; - udValid = NULL; - udNotifyChild = NULL; - udNotifyList = NULL; -} - -AStar::~AStar(void) { - ClearNodes(); -} - -bool AStar::GeneratePath(int startx, int starty, int destx, int desty) { - // Grab the next node from the f position. - InitStep(startx, starty, destx, desty); - - int retval = 0; - while(retval == 0) { - // Go find the next node. - retval = Step(); - } - - if(retval == 0 || !m_best) { - // Set m_best to NULL so we can go and check for the next best node. - m_best = NULL; - return false; - } - return true; -} - -int AStar::Step(void) { - // If we don't get the most efficent route, then go back - // and check some more nodes plox! - if(!(m_best == GetBest())) { return -1; } - // Ok, we found the best route. - if(m_best->id == m_ID) { return 1; } - - // Please set the best route as a child node. - CreateChildren(m_best); - - return 0; -} - -int AStar::InitStep(int startx, int starty, int destx, int desty) { - // Prepare for the next pass by clearing our previous nodes. - ClearNodes(); - - // Initialize our variables. - m_startx = startx; - m_starty = starty; - m_destx = destx; - m_desty = desty; - m_ID = Coord2Id(destx, desty); - - // Set the node for our start location. - Node *temp = new Node(startx, starty); - temp->g = 0; - temp->h = abs(destx - startx) + abs(desty - starty); - temp->f = temp->g + temp->h; - temp->id = Coord2Id(startx, starty); - m_open = temp; - - return 0; -} - -void AStar::AddToOpen(Node *addnode) { - Node *node = m_open; - Node *prev = NULL; - - if(!m_open) { - // Add a a new node to the open list. - m_open = addnode; - - m_open->next = NULL; - - // Start a new open list with our new node. - //Func(udNotifyList, NULL, addnode, NL_STARTOPEN, NCData); - - return; - } - - while(node) { - // If our addnode's f is greater than the currently open node - // then add the open node to the to previous to make room for - // add node to be on the open list. - if(addnode->f > node->f) { - prev = node; - // Now we have our new node go to next. - node = node->next; - } else { - // go to the next node, and set it on our open list to check it's - // f value. - if(prev) { - prev->next = addnode; - addnode->next = node; - Func(udNotifyList, prev, addnode, NL_ADDOPEN, NCData); - } else { - // We will only ever run through this once per instance. We have no nodes currently - // so we set an open list with this node. - Node *temp = m_open; - - m_open = addnode; - m_open->next = temp; - //Func(udNotifyList, temp, addnode, NL_STARTOPEN, NCData); - } - return; - } - } - // Get the next node and add it to the open list. - prev->next = addnode; - //Func(udNotifyList, prev, addnode, NL_ADDOPEN, NCData); -} - -void AStar::ClearNodes(void) { - Node *temp = NULL; - Node *temp2 = NULL; - - if(m_open) { - while(m_open) { - temp = m_open->next; - delete m_open; - m_open = temp; - } - } - if(m_closed) { - while(m_closed) { - temp = m_closed->next; - delete m_closed; - m_closed = temp; - } - } -} - -void AStar::CreateChildren(Node *node) { - Node temp; - int x = node->x; - int y = node->y; - - // Loop through the grid and add the children to the list. - for(int i = -1; i < 2; i++) { - for(int j = -1; j < 2; j++) { - temp.x = x+i; - temp.y = y+j; - if((i == 0) && (j == 0) || !Func(udValid, node, &temp, NC_INITIALADD, CBData)) continue; - - LinkChild(node, &temp); - } - } -} - -void AStar::LinkChild(Node *node, Node *temp) { - // Initialize variables for our temp node. - int x = temp->x; - int y = temp->y; - int g = temp->g + Func(udCost, node, temp, 0, CBData); - // Grabbing a unique ID before adding the node to the open list. - int id = Coord2Id(x, y); - - Node *check = NULL; - - if(check = CheckList(m_open, id)) { - node->children[node->numChildren++] = check; - - // We have found an awesome route, update the node and variables. - if(g < check->g) { - check->parent = node; - check->g = g; - check->f = g+check->h; - //Func(udNotifyChild, node, check, NC_OPENADD_UP, NCData); - } else { - //Func(udNotifyChild, node, check, 2, NCData); - } - } else if(check = CheckList(m_closed, id)) { - node->children[node->numChildren++] = check; - - if(g < check->g) { - check->parent = node; - check->g = g; - check->f = g+check->h; - //Func(udNotifyChild, node, check, 3, NCData); - - // Update the parents. - UpdateParents(check); - } else { - //Func(udNotifyChild, node, check, 4, NCData); - } - } else { - Node *newnode = new Node(x, y); - newnode->parent = node; - newnode->g = g; - newnode->h = abs(x - m_destx) + abs(y - m_desty); - newnode->f = newnode->g + newnode->h; - newnode->id = Coord2Id(x, y); - - AddToOpen(newnode); - node->children[node->numChildren++] = newnode; - - //Func(udNotifyChild, node, newnode, 5, NCData); - } -} - - -void AStar::UpdateParent(Node *node) { - int g = node->g; - int c = node->numChildren; - - Node *child = NULL; - for(int i = 0; i < c; i++) { - child = node->children[i]; - if(g + 1 < child->g) { - child->g = g + 1; - child->f = child->g + child->h; - child->parent = node; - Push(child); - } - } - Node *parent; - - while(m_stack) { - parent = Pop(); - c = parent->numC22hildren; - for(int i = 0; i < c; i++) { - child = parent->children[i]; - - if(parent->g + 1 < child->g) { - child->g = parent->g + Func(udCost, parent, child, NC_INITIALADD, CBData); - child->f = child->g + child->h; - child->parent = parent; - Push(child); - } - } - } -} - -void AStar::Push(Node *node) { - if(!m_stack) { - m_stack = new Stack; - m_stack->data = node; - m_stack->next = NULL; - } else { - Stack *temp = new Stack; - temp->data = node; - temp->next = m_stack; - m_stack = temp; - } -} - -Node AStar::*Pop(void) { - Node *data = m_stack->data; - Stack *temp = m_stack; - - m_stack = temp->next; - delete temp; - - return data; -} - -Node AStar::*CheckList(Node *node, int id) { - while(node) { - if(node->id == id) return node; - - node = node->next; - } - return NULL; -} - -// Get the best node in the open list to enable us to find -// the best route to take. -Node AStar::*GetBest(void) { - if(!m_open) { return NULL; } - - Node *temp = m_open; - Node *temp2 = m_closed; - m_open = temp->next; - - //Func(udNotifyList, NULL, temp, NL_DELETEOPEN, NCData); - m_closed = temp; - m_closed->next = temp2; - //Func(udNotifyList, NULL, m_closed, NL_ADDCLOSED, NCData); - - return temp; -} diff --git a/src/libUnuk/AStar.h b/src/libUnuk/AStar.h deleted file mode 100644 index 12e9d08..0000000 --- a/src/libUnuk/AStar.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef _ASTAR_H_ -#define _ASTAR_H_ -#include "Node.h" - -class AStar { -public: - AStar(void); - ~AStar(void); - - Func udCost; // Called when the cost is needed. - Func udValid; // Check the validity of the coordanate. - Func udNotifyChild; // Child is called/checked (LinkChild). - Func udNotifyList; // node is added to the open/closed list. - - void *CBData; // Data passed back to the callback function. - void *NCData; // Data paseed back to to notify child. - - bool GeneratePath(int startx, int starty, int destx, int desty); - int Step(void); - int InitStep(int startx, int starty, int destx, int desty); - void SetRows(int r) { m_rows = r; } - void Reset(void) { m_best = NULL; } - - Node *GetBestNode(void) { return m_best; } - -private: - int m_rows; // Used to calculate unique ID for node->number. - int m_startx; - int m_starty; - int m_destx; - int m_desty; - - int m_ID; - - - // Node list. - Node *m_open; - Node *m_closed; - Node *m_best; - - Stack *m_stack; - - // Private methods. - void AddToOpen(Node *node); - void ClearNodes(void); - void CreateChildren(Node *node); - void LinkChild(Node *, Node *); - void UpdateParent(Node *node); - - // Stack functions. - void Push(Node *node); - Node *Pop(void); - Node *CheckList(Node *node, int number); - Node *GetBest(void); - - inline int Coord2Id(int x, int y) { return x * m_rows + y; } -}; - -#endif diff --git a/src/libUnuk/Entity.cpp b/src/libUnuk/Entity.cpp deleted file mode 100644 index e0998d4..0000000 --- a/src/libUnuk/Entity.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "Entity.h" - -Entity::Entity(GameWorld* const gameWorld) : - m_canBeRemoved(false), - m_world(gameWorld) {} - -Entity::~Entity(void) {} - -bool Entity::CanBeRemoved(void) const { - return m_canBeRemoved; -} - -void Entity::Destroy(void) { - m_canBeRemoved = true; -} - -void Entity::Prepare(float dt) { - OnPrepare(dt); -} - -void Entity::Render(void) const { - OnRender(); -} - -void Entity::OnPostRender(void) { - OnPostRender(); -} - -bool Entity::Initialize(void) { - return OnInitiaize(); -} - -void Entity::Shutdown(void) { - OnShutdown(); -} diff --git a/src/libUnuk/Entity.h b/src/libUnuk/Entity.h deleted file mode 100644 index 945221a..0000000 --- a/src/libUnuk/Entity.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef _ENTITY_H_ -#define _ENTITY_H_ -#include "Geometry.h" -#include "EntityType.h" -#include "Static.h" - -class GameWorld; - -/* - * Entity is static because we will mainly be handling - * pointers (that can be copied around) but we want - * all entities to be initiaized by the gameworld. - */ - -class Entity : private Static { -public: - Entity(GameWorld* const gameWorld); - virtual ~Entity(void); - - void Prepare(float dt); - void Render(void) const; - void PostRender(void); - bool Initialize(void); - void Shutdown(void); - bool CanBeRemoved(void) const; - void Destroy(void); - - virtual Vector2 GetPosition(void) const = 0; - //virtual Vector2 GetVelocity() const = 0; - virtual void SetPosition(const Vector2& position) = 0; - - virtual EntityType GetType(void) const = 0; - -private: - virtual void OnPrepare(float dt) = 0; - virtual void OnRender(void) const = 0; - virtual void OnPostRender(void) = 0; - virtual bool OnInitiaize(void) = 0; - virtual void OnShutdown(void) = 0; - - bool m_canBeRemoved; - - GameWorld* m_world; -}; - -#endif diff --git a/src/libUnuk/EntityType.h b/src/libUnuk/EntityType.h deleted file mode 100644 index 0b46c76..0000000 --- a/src/libUnuk/EntityType.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _ENTITYTYPES_H_ -#define _ENTITYTYPES_H_ - -enum EntityType { - PLAYER -}; - -#endif diff --git a/src/libUnuk/Font.cpp b/src/libUnuk/Font.cpp new file mode 100644 index 0000000..bee12a5 --- /dev/null +++ b/src/libUnuk/Font.cpp @@ -0,0 +1,11 @@ +#include "Font.h" + +TTF_Font* Font(const char* filename, const int size) { + ifstream font(filename); + + if(font.is_open() == false) { + Debug::logger->message("Font: %s cannot be found."); + exit(-1); + } + return TTF_OpenFont(filename, size); +} diff --git a/src/libUnuk/Font.h b/src/libUnuk/Font.h new file mode 100644 index 0000000..51a7994 --- /dev/null +++ b/src/libUnuk/Font.h @@ -0,0 +1,11 @@ +#ifndef _FONT_H_ +#define _FONT_H_ +#include +#include +#include +#include "Debug.h" +using namespace std; + +TTF_Font* Font(const char*, const int); + +#endif diff --git a/src/libUnuk/Geometry.h b/src/libUnuk/Geometry.h deleted file mode 100644 index 808a794..0000000 --- a/src/libUnuk/Geometry.h +++ /dev/null @@ -1,92 +0,0 @@ -#ifndef _GEOMETRY_H_ -#define _GEOMETRY_H_ -#include - -struct TexCoord { - float s, t; - TexCoord(void): - s(0.0f), - t(0.0f) {} - - TexCoord(float s, float t): - s(s), - t(t) {} -}; - -struct Colour { - float r, g, b, a; - Colour(float R, float G, float B, float A): - r(R), - g(G), - b(B), - a(A) {} - - Colour(void): - r(0.0f), - g(0.0f), - b(0.0f), - a(0.0f) {} -}; - -struct Vector2 { - float x, y; - Vector2(float X, float Y): - x(X), - y(Y) {} - - Vector2(void): - x(0.0f), - y(0.0f) {} - - Vector2(const Vector2& v): - x(v.x), - y(v.y) {} - - Vector2 operator*(const float s) const { - return Vector2(x*s, y*s); - } - - Vector2& operator=(const Vector2& v) { - if(this == &v) { - return *this; - } - x = v.x; - y = v.y; - - return *this; - } - - Vector2& operator+=(const Vector2& v) { - this->x += v.x; - this->y += v.y; - - return *this; - } - - const Vector2 operator-(const Vector2& v) const { - Vector2 result; - result.x = x - v.x; - result.y = y - v.y; - - return result; - } - - float length(void) const { - return sqrtf(x*x+y*y); - } - - void normalize(void) { - float l = 1.0f / length(); - x *= l; - y *= l; - } -}; - -typedef Vector2 Vertex; - -inline float degreesToRadians(const float degrees) { - const float PIOver180 = 3.14159f / 180.0f; - return degrees * PIOver180; -} - -#endif diff --git a/src/libUnuk/ImageLoader.cpp b/src/libUnuk/ImageLoader.cpp deleted file mode 100644 index 5541acf..0000000 --- a/src/libUnuk/ImageLoader.cpp +++ /dev/null @@ -1,178 +0,0 @@ -#include -#include -#include -#include "ImageLoader.h" -#include "Debug.h" -#define BITMAP_TYPE 19778 - -// Initialize an empty image. -ImageLoader::ImageLoader(void) { - Reset(); -} - -// Initializes an image with an image from the disk. -ImageLoader::ImageLoader(const char *filename) { - Reset(); - LoadBMP(filename); -} - -ImageLoader::~ImageLoader(void) { - if(colors != NULL) { - delete [] colors; - } - - if(pixelData != NULL) { - delete [] pixelData; - } -} - -bool ImageLoader::LoadBMP(const char* filename) { - FILE *in = NULL; - bool result = false; - - // Open the file for reading in binary mode. - in = fopen(filename, "rb"); - if(in == NULL) { - perror("Error"); - Debug::logger->message("\nError Number: %d", errno); - return false; - } - - fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, in); - - // Check if this is even the right type of file. - if(bmfh.bfType != BITMAP_TYPE) { - perror("Error"); - Debug::logger->message("\nError Number: %d", errno); - return false; - } - - fread(&bmih, sizeof(BITMAPINFOHEADER), 1, in); - width = bmih.biWidth; - height = bmih.biHeight; - bpp = bmih.biBitCount; - - // TODO: Get this running on 24-bit images too, right now it will seg fault if it is 24-bit. - // Set the number of colors. - LONG numColors = 1 << bmih.biBitCount; - - // The bitmap is not yet loaded. - loaded = false; - // Make sure memory is not lost. - if(colors != NULL) { - delete [] colors; - } - - if(pixelData != NULL) { - delete [] pixelData; - } - - // Load the palette for 8 bits per pixel. - if(bmih.biBitCount < 24) { - colors = new RGBQUAD[numColors]; - fread(colors, sizeof(RGBQUAD), numColors, in); - } - - DWORD size = bmfh.bfSize - bmfh.bfOffBits; - - BYTE *tempPixelData = NULL; - tempPixelData = new BYTE[size]; - - if(tempPixelData == NULL) { - Debug::logger->message("\nError: Out of memory. Cannot find space to load image into memory."); - fclose(in); - return false; - } - - fread(tempPixelData, sizeof(BYTE), size, in); - - result = FixPadding(tempPixelData, size); - loaded = result; - - delete [] tempPixelData; - fclose(in); - - return result; -} - -bool ImageLoader::FixPadding(BYTE const * const tempPixelData, DWORD size) { - // byteWidth is the width of the actual image in bytes. padWidth is - // the width of the image plus the extrapadding. - LONG byteWidth, padWidth; - - // Set both to the width of the image. - byteWidth = padWidth = (LONG)((float)width * (float)bpp / 8.0); - - // Add any extra space to bring each line to a DWORD boundary. - short padding = padWidth % 4 != 0; - padWidth += padding; - - DWORD diff; - int offset; - - height = bmih.biHeight; - // Set the diff to the actual image size (without any padding). - diff = height * byteWidth; - // allocate memory for the image. - pixelData = new BYTE[diff]; - - if(pixelData == NULL) { - return false; - } - - // =================================================================== - // Bitmap is inverted, so the paddind needs to be removed and the - // image reversed. Here you can start from the back of the file or - // the front, after the header. The only problem is that some programs - // will pad not only the data, but also the file size to be divisiaible - // by 4 bytes. - // =================================================================== - if(height > 0) { - offset = padWidth - byteWidth; - for(unsigned int i = 0; i < size - 2; i += 4) { - if((i + 1) % padWidth == 0) { - i += offset; - } - // Now we need to swap the data for it to have the right order. - *(pixelData + i) = *(tempPixelData + i + 2); // R - *(pixelData + i + 1) = *(tempPixelData + i + 1); // G - *(pixelData + i + 2) = *(tempPixelData + i); // B - *(pixelData + i + 3) = *(tempPixelData + i + 3); // A - } - } else { - // The image is not reserved. Only the padding needs to be removed. - height = height * -1; - offset = 0; - while(offset < height) { - memcpy((pixelData + (offset * byteWidth)), (tempPixelData + (offset * padWidth)), byteWidth); - offset++; - } - } - return true; -} - -void ImageLoader::Reset(void) { - width = 0; - height = 0; - pixelData = NULL; - colors = NULL; - loaded = false; -} - -// Get the alpha channel as an array of bytes. -// The size of the array will return -1 on failure. -BYTE *ImageLoader::GetAlpha() const { - LONG arraySize = width * height; - BYTE *array = new BYTE[arraySize]; - - if(array == NULL) { - delete [] array; - return NULL; - } - - for(long i = 0; i < arraySize; i++) { - // Jump to the alpha and extract it everytime. - array[i] = pixelData[i * 4 + 3]; - } - return array; -} diff --git a/src/libUnuk/ImageLoader.h b/src/libUnuk/ImageLoader.h deleted file mode 100644 index ced4325..0000000 --- a/src/libUnuk/ImageLoader.h +++ /dev/null @@ -1,76 +0,0 @@ -// =================================================================== -// This image loader will read in a 32-bit bitmap. -// =================================================================== - -#ifndef _IMAGELOADER_H_ -#define _IMAGELOADER_H_ - -typedef unsigned char BYTE; -typedef int LONG; -typedef unsigned int DWORD; -typedef unsigned short WORD; - -// Provides general information about the file. -typedef struct __attribute__ ((__packed__)) tagBITMAPFILEHEADER { - WORD bfType; - DWORD bfSize; - WORD bfReserved1; - WORD bfReserved2; - DWORD bfOffBits; -} BITMAPFILEHEADER, *PBITMAPFILEHEADER; - -// The information header provides information specific to the image data. -typedef struct __attribute__ ((__packed__)) tagBITMAPINFOHEADER { - DWORD biSize; - LONG biWidth; - LONG biHeight; - WORD biPlanes; - WORD biBitCount; - DWORD biCompression; - DWORD biSizeImage; - DWORD biXPelsPerMeter; - DWORD biYPelsPerMeter; - DWORD biCLRUsed; - DWORD biCLRImportant; -} BITMAPINFOHEADER, *PBITAPINFOHEADER; - -// Color palette. -typedef struct __attribute__ ((__packed__)) tagRGBQUAD { - BYTE rbgBlue; - BYTE rgbGreen; - BYTE rgbRed; - BYTE rgbReserved; -} RGBQUAD; - -class ImageLoader { -public: - ImageLoader(void); - ImageLoader(const char *filename); - - virtual ~ImageLoader(void); - - bool LoadBMP(const char *filename); - BYTE *GetAlpha(void) const; - - LONG GetHeight(void) const { return height; } - RGBQUAD *GetColors(void) const { return colors; } - bool GetLoaded(void) const { return loaded; } - BYTE *GetPixelData(void) const { return pixelData; } - LONG GetWidth(void) const { return width; } - -private: - BITMAPFILEHEADER bmfh; - BITMAPINFOHEADER bmih; - RGBQUAD *colors; - BYTE *pixelData; - bool loaded; - LONG width; - LONG height; - WORD bpp; - - // Private methods. - void Reset(void); - bool FixPadding(BYTE const * const tempPixelData, DWORD size); -}; - -#endif diff --git a/src/libUnuk/Makefile b/src/libUnuk/Makefile index e5358ac..d12f33a 100644 --- a/src/libUnuk/Makefile +++ b/src/libUnuk/Makefile @@ -1,7 +1,7 @@ CC = g++ CFLAGS = -ansi -Wall -g LDADD = -lGL -lGLU -lSDL -objects = Debug.o Entity.o ImageLoader.o Sprite.o Input.o \ +objects = Debug.o Input.o \ .PHONY: default all clean diff --git a/src/libUnuk/Node.h b/src/libUnuk/Node.h deleted file mode 100644 index 806f8d7..0000000 --- a/src/libUnuk/Node.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef _NODE_H_ -#define _NODE_H_ -#include - -#ifndef NULL -#define NULL 0 -#endif - -#define NL_ADDOPEN 0 -#define NL_STARTOPEN 1 -#define NL_DELETEOPEN 2 -#define NL_ADDCLOSED 3 - -#define NC_INITIALADD 0 -#define NC_OPENADD_UP 1 -#define NC_OPENADD 2 -#define NC_CLOSEDADD_UP 3 -#define NC_CLOSEADD 4 -#define NC_NEWADD 5 - -class Node { -public: - Node(int posx = -1, int posy = -1) : x(posx), y(posy), id(0), numChildren(0) { - parent = next = NULL; - memset(children, 0, sizeof(children)); - } - - // Fitness, goal, heuristic. - int f, g, h; - // Position x and y. - int x, y; - int numChildren; // x*m_rows+y - int id; - - Node *parent; - Node *next; - // Square tiles. - Node *children[8]; -}; - -struct Stack { - Node *data; - Stack *next; -}; - -typedef int(*Func) (Node *, Node *, int, void *); - -#endif diff --git a/src/libUnuk/Rect.h b/src/libUnuk/Rect.h new file mode 100644 index 0000000..c9bee71 --- /dev/null +++ b/src/libUnuk/Rect.h @@ -0,0 +1,8 @@ +#ifndef _RECT_H_ +#define _RECT_H_ +#include +#include // May not need this. +using namespace std; + + +#endif diff --git a/src/libUnuk/Sprite.cpp b/src/libUnuk/Sprite.cpp deleted file mode 100644 index ba86936..0000000 --- a/src/libUnuk/Sprite.cpp +++ /dev/null @@ -1,249 +0,0 @@ -#include -#include -#include -#include "Sprite.h" -#include "ImageLoader.h" -#include "Debug.h" - -Sprite::Sprite(string filename) { - image = new ImageLoader(filename.c_str()); - angle = 0; - x = 0.0f; - y = 0.0f; - SetPivot(0.0f, 0.0f); - SetScale(1.0f, 1.0f); -} - -Sprite::~Sprite(void) { - delete image; -} - -// Enable 2D drawing mode to draw our sprites. This function MUST be -// called before any sprite is drawn on screen using the Draw method. -void Sprite::Enable2D(void) { - GLint iViewport[4]; - - // Get a copy of the viewport. - glGetIntegerv(GL_VIEWPORT, iViewport); - glPushMatrix(); - glLoadIdentity(); - - // Save a copy of the projection atrix so that we can restore - // it when it's time to do 3D rendering again. - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - - // Set upt the orthographic projection. - glOrtho( iViewport[0], iViewport[0] + iViewport[2], - iViewport[1] + iViewport[3], iViewport[1], -1, 1); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - - // Make sure depth testing and lighting are disabled for 2D rendering - //until we are finished rendering in 2D. - glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_LIGHTING_BIT); - glDisable(GL_DEPTH_TEST); - glDisable(GL_LIGHTING); -} - -// Disables the 2D drawing. This can be called before you are done -// drawing all 2D sprites on screen using the Draw method. -void Sprite::Disable2D(void) { - glPopAttrib(); - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -} - -// Initializes extensions, textures, render states, etc. before rendering. -void Sprite::InitScene(void) { - // Disable lighting. - glDisable(GL_LIGHTING); - // Disable dithering. - glDisable(GL_DITHER); - // Disable blending (for now). - glDisable(GL_BLEND); - // Disable depth testing. - glDisable(GL_DEPTH_TEST); - - // Is the extension supported on this driver/card? - if(!IsExtensionSupported("GL_ARB_texture_rectangle")) { - Debug::logger->message("\nERROR: Texture rectangles not supported on this video card!"); - exit(-1); - } - - // TODO: - // If your machine does not support GL_NV_texture_rectangle, you can try - // using GL_EXT_texture_rectangle. Maybe I will run a test so I can support both. - - // Enable the texture rectangle extension. - glEnable(GL_TEXTURE_RECTANGLE_ARB); - - // Generate one texture ID. - glGenTextures(1, &textureID); - // Bind the texture using GL_TEXTURE_RECTANGLE_NV - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, textureID); - // Enable bilinear filtering on this texture. - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - // Write the 32-bit RGBA texture buffer to video memory. - glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, image->GetWidth(), image->GetHeight(), - 0, GL_RGBA, GL_UNSIGNED_BYTE, image->GetPixelData()); -} - -// ================================================================= -// Set the pivot point in relation to the sprite itself, that is -// using the object coordinates system. In this coordinate system -// the bottom left point of the object is at (0,0) and the top -// right is at (1,1). -// -// Example: To set the pivot to be in the middle of the sprite use -// (0.5, 0.5) default values are (1,1). -// pivotX can be any value, but when x is in the range [0,1] the -// pivot is inside the sprite where 0 is the left edge of the sprite -// and 1 is the right edge of the sprite. -// pivotY is the same as pivotX but when y is in the range of [0,1] -// the pivot is inside the sprite where 0 is the bottom edge of the -// sprite and 1 is the top edge of the sprite. -// ================================================================= -void Sprite::SetPivot(GLfloat pivotX, GLfloat pivotY) { - GLfloat deltaPivotX = pivotX - GetPivotX(); - GLfloat deltaPivotY = pivotY - GetPivotY(); - - this->pivotX = pivotX; - this->pivotY = pivotY; - - x += deltaPivotX * image->GetWidth(); - y += deltaPivotY * image->GetHeight(); -} - -// ================================================================= -// Sets the pivot to be at the point where object's pivot is set. -// obj is the reference object to whose pivot we will set this pivot -// to be. -// Note: If the obj pivot changes or the obj moves after the SetPivot -// call has been issued, the pivot of this object will not reflect these -// changes. You must call SetPivot again with that object to update the -// pivot information. -// ================================================================= -void Sprite::SetPivot(const Sprite &obj) { - // This x location if the pivot was at SetPivot(0, 0); - GLint worldX; - // This y location it the pivot was at SetPivot(0, 0); - GLint worldY; - GLfloat newPivotX; - GLfloat newPivotY; - - worldX = x - GetPivotX() * image->GetWidth(); - worldY = y - GetPivotY() * image->GetHeight(); - - newPivotX = (float)(obj.x - worldX) / image->GetWidth(); - newPivotY = (float)(obj.y - worldY) / image->GetHeight(); - - SetPivot(newPivotX, newPivotY); -} - -// Help determine if an OpenGL extension is supported on the target machine -// at runtime. -bool Sprite::IsExtensionSupported(const char *extension) const { - const GLubyte *extensions = NULL; - const GLubyte *start; - GLubyte *where, *terminator; - - // Extension names should not have spaces. - where = (GLubyte *) strchr(extension, ' '); - - if (where || *extension == '\0') { - return false; - } - - extensions = glGetString(GL_EXTENSIONS); - - // It takes a bit of care to be fool-proof about parsing the - // OpenGL extensions string. Don't be fooled by sub-strings, etc. - start = extensions; - - for (;;) { - where = (GLubyte *) strstr((const char *) start, extension); - - if (!where) { - break; - } - - terminator = where + strlen(extension); - if (where == start || *(where - 1) == ' ') { - if (*terminator == ' ' || *terminator == '\0') { - return true; - } - } - - start = terminator; - } - - return false; -} - -void Sprite::Render(void) { - InitScene(); - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_TEXTURE_2D); - - // Set the primitive color to white - glColor3f(1.0f, 1.0f, 1.0f); - // Bind the texture to the polygons - glBindTexture(GL_TEXTURE_RECTANGLE_ARB, textureID); - - glPushMatrix(); - - GLfloat transX = 1; - GLfloat transY = 1; - - if(x != 0.0) { - transX = x; - } - - if(y != 0.0) { - transY = y; - } - - glLoadIdentity(); - glTranslatef(transX, transY, 0); - glScalef(scaleX, scaleY, 1.0); - glRotatef(angle, 0.0, 0.0, 1.0); - - // ================================================================= - // Render a quad - // Instead of the using (s,t) coordinates, with the GL_NV_texture_rectangle - // extension, you need to use the actual dimensions of the texture. - // This makes using 2D sprites for games and emulators much easier now - // that you won't have to convert :) - // - // convert the coordinates so that the bottom left corner changes to - // (0, 0) -> (1, 1) and the top right corner changes from (1, 1) -> (0, 0) - // we will use this new coordinate system to calculate the location of the sprite - // in the world coordinates to do the rotation and scaling. This mapping is done in - // order to make implementation simpler in this class and let the caller keep using - // the standard OpenGL coordinates system (bottom left corner at (0, 0)) - // ================================================================= - glBegin(GL_QUADS); - glTexCoord2i(0, 0); - glVertex2i(-pivotX * image->GetWidth(), -pivotY * image->GetHeight()); - - glTexCoord2i(0, image->GetHeight()); - glVertex2i(-pivotX * image->GetWidth(), (1 - pivotY) * image->GetHeight()); - - glTexCoord2i(image->GetWidth(), image->GetHeight()); - glVertex2i( (1 - pivotX) * image->GetWidth(), (1 - pivotY) * image->GetHeight()); - - glTexCoord2i(image->GetWidth(), 0); - glVertex2i( (1 - pivotX) * image->GetWidth(), -pivotY * image->GetHeight()); - glEnd(); - - glPopMatrix(); -} diff --git a/src/libUnuk/Sprite.h b/src/libUnuk/Sprite.h deleted file mode 100644 index e9dfcb4..0000000 --- a/src/libUnuk/Sprite.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef _SPRITE_H_ -#define _SPRITE_H_ -#include -#include -#include "ImageLoader.h" - -using namespace std; - -class ImageLoader; - -class Sprite { -public: - static void Enable2D(void); - - static void Disable2D(void); - - Sprite(string filename); - virtual ~Sprite(void); - - virtual void Render(void); - virtual void Rotate(GLint degrees) { angle += degrees; } - - // Mutators. - GLint GetAngle(void) const { return angle; } - void SetAngle(GLint angle) { this->angle = angle; } - void SetX(GLdouble x) { this->x = x; } - void SetY(GLdouble y) { this->y = y; } - GLint GetHeight(void) const { return image->GetHeight() * scaleY; } - GLint GetWidth(void) const { return image->GetWidth() * scaleX; } - - void SetPivot(GLfloat pivotX, GLfloat pivotY); - GLfloat GetPivotX(void) const { return pivotX; } - GLfloat GetPivotY(void) const { return pivotY; } - - GLdouble GetX(void) const { return x; } - GLdouble GetY(void) const { return y; } - - void SetPivot(const Sprite &obj); - - - // ================================================================= - // Set the scale of the object. A scale of (1.0,1.0) means the sprite - // maintains its original size. Values larger than 1 scales the sprite - // up while values less than 1 shrink it down. - // ================================================================= - void SetScale(GLfloat x, GLfloat y) { scaleX = x, scaleY = y; } - -private: - ImageLoader *image; - GLuint textureID; - GLint angle; - GLdouble x; - GLdouble y; - GLfloat pivotX; - GLfloat pivotY; - GLfloat scaleX; - GLfloat scaleY; - - void InitScene(void); - - bool IsExtensionSupported(const char *extension) const; -}; - -#endif diff --git a/src/libUnuk/Static.h b/src/libUnuk/Static.h deleted file mode 100644 index 5d157f3..0000000 --- a/src/libUnuk/Static.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _STATIC_H_ -#define _STATIC_H_ - -/* - * Inheriting from this class will make the class uncopyable. - * It is useful to do this because a lot of the time we won't - * want to be able to copy stuff, like the window or the game class. - * - * I probably chose a bad name for this. - * - */ - -class Static { -protected: - Static() {} - ~Static() {} -private: - Static(const Static&); - Static& operator=(const Static &); -}; - -#endif diff --git a/src/libUnuk/Timer.cpp b/src/libUnuk/Timer.cpp new file mode 100644 index 0000000..e06aba0 --- /dev/null +++ b/src/libUnuk/Timer.cpp @@ -0,0 +1,45 @@ +#include "Timer.h" + +Timer::Timer(void) { + m_startTicks = 0; + m_pausedTicks = 0; + m_paused = false; +} + +Timer::~Timer(void) { +} + +void Timer::Start(void) { + m_paused = false; + m_startTicks = SDL_GetTicks(); +} + +void Timer::Pause(void) { + if(m_paused == false) { + m_paused = true; + m_pausedTicks = SDL_GetTicks() - m_startTicks; + } +} + +void Timer::Unpause(void) { + if(m_paused == true) { + m_paused = false; + m_startTicks = SDL_GetTicks() - m_pausedTicks; + m_pausedTicks = 0; + } +} + +int Timer::GetTicks(void) { + if(m_paused == true) { + return m_pausedTicks; + } else { + return SDL_GetTicks() - m_startTicks; + } +} + +string Timer::GetTicksStr(void) { + stringstream str; + str << GetTicks() << "ms"; + + return str.str(); +} diff --git a/src/libUnuk/Timer.h b/src/libUnuk/Timer.h new file mode 100644 index 0000000..593a2e1 --- /dev/null +++ b/src/libUnuk/Timer.h @@ -0,0 +1,29 @@ +#ifndef _TIMER_H_ +#define _TIMER_H_ +#include +#include +#include +using namespace std; + +class Timer { +public: + Timer(void); + ~Timer(void); + + void Pause(void); + void Unpause(void); + void Start(void); + + bool IsPaused(void) { return m_paused; } + + int GetTicks(void); + + string GetTicksStr(void); + +private: + bool m_paused; + int m_startTicks; + int m_pausedTicks; +}; + +#endif diff --git a/src/libUnuk/Win32Window.cpp b/src/libUnuk/Win32Window.cpp deleted file mode 100644 index 7bb4714..0000000 --- a/src/libUnuk/Win32Window.cpp +++ /dev/null @@ -1,250 +0,0 @@ -#include -#include -#include -#include -#include "../Libs/wglext.h" -#include "Win32Window.h" -#include "../Unuk/Game.h" - -typedef HGLRC(APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC, HGLRC, const int*); -PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB = NULL; - -Win32Window::Win32Window(HINSTANCE hInstance) { - m_isRunning = false; - m_game = NULL; - m_hinstance = hInstance; - m_lastTime = 0; -} - -Win32Window::~Win32Window(void) { - -} - -bool Win32Window::Create(int width, int height, int bpp, bool fullscreen) { - DWORD dwExStyle; - DWORD dwStyle; - - m_isFullscreen = fullscreen; - - // Set up the window values. - m_windowRect.left = (long) 0; - m_windowRect.right = (long) width; - m_windowRect.top = (long) 0; - m_windowRect.bottom = (long) height; - - // Set up the window class structure. - m_windowClass.cbSize = sizeof(WNDCLASSEX); - m_windowClass.style = CS_HREDRAW | CS_VREDRAW; - m_windowClass.lpfnWndProc = Win32Window::StaticWndProc; // Our static method is the event handler. - m_windowClass.cbClsExtra = 0; - m_windowClass.cbWndExtra = 0; - m_windowClass.hInstance = m_hinstance; - m_windowClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); - m_windowClass.hCurser = LoadCursor(NULL, IDC_ARROW); - m_windowClass.hbrBackground = NULL; - m_windowClass.lpszMenuName = NULL; - m_windowClass.lpszClassName = "Unuk"; - m_windowClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); - - // Register the window class. - if(!RegisterClassEx(&m_windowClass)) { - return false; - } - - // We need to change the display mode if we are running fullscreen. - if(m_isFullsceen) { - // This is the device mode. - DEVMODE dmScreenSettings; - memset(&dmScreenSettings, 0, sizeof(smScreenSettings)); - dmScreenSettings.dmSize = sizeof(dmScreenSettings); - - // Set the screen width/height/bpp. - dmScreenSettings.dmPelsWidth = width; - dmScreenSettings.dmPelsHeight = height; - dmScreenSettings.dmBitsPerPel = bpp; - dmScreenSettings.dwFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; - - if(ChangeDisplaySettings(&dScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { - // Setting display mode failed, we will switch to windowed mode. - MessageBox(NULL, "Display mode failed", NULL, MB_OK); - m_isFullscreen = false; - } - } - - // Check to see if we are still in fullscreen mode. - if(m_fullscreen) { - dwExStyle = WS_EX_APPWINDOW; - dwStyle = WS_POPUP; - ShowCursor(false); - } else { - // fullscreen mode must have failed. - dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; - dwStyle = WS_OVERLAPPEDWINDOW - } - - // Adjusted the window to the requested size. - AdjustWindowRectEx(&m_windowRect, swStyle, false, dwExStyle); - - // Now the class is regestered we can finaly create the window. - m_hWnd = CreateWindowEx(NULL, "Unuk", dwStyle | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 0, 0, - m_windowRect.right - m_windowRect.left, m_windowRect.bottom - m_windowRect.top, - NULL, NULL, m_hinstance, this); - - // Let's make sure the window creation went as planned. - if(!m_hWnd) return 0; - - m_hdc = GetDC(m_hWnd); - - // We know everything is ok, display and update the window now. - ShowWindow(m_hWnd, SW_SHOW); - UpdateWindow(m_hWnd); - - m_lastTime = GetTickCount() / 1000.0f; - return true; -} - -void Win32Window::Destroy(void) { - // If we are in fullscreen we want to switch back to desktop, and show the mouse cursor. - if(m_isFullscreen) { - ChangeDisplaySettings(NULL, 0); - ShowCursor(true); - } -} - -void Win32Window::AttachGame(Game* game) { - m_game = game; -} - -bool Win32Window::IsRunning(void) { - return m_isRunning; -} - -void Win32Window::ProccessEvents(void) { - MSG msg; - - // While there are messages in the queue, store them in msg. - while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - // Process the messages one at a time. - TranslateMessage(&msg); - DispatchMessage(&msg); - } -} - -void Win32Window::SetupPixelFormat(void) { - int pixelFormat; - - PIXELFORMATDESCRIPTOR pfd = { - sizeof(PIXELFORMATDESCRIPTOR), // Size. - 1, // Version. - PFD_SUPPORT_OPENGL | // OpenGL window. - PFD_DRAW_TO_WINDOW | // Render to window. - PFD_DOUBLEBUFFER, // Double buffer. - PFD_TYPE_RGBA, // Color type. - 32, // Color Depth. - 0, 0, 0, 0, 0, 0, // Color bits (ignored). - 0, // No alpha buffer. - 0, // Alpha bits (ignored). - 0, // No accumulation buffer. - 0, 0, 0, 0, // Accumulation bits (ignored). - 16, // Depth buffer. - 0, // No stencil buffer. - 0, // No auxiliary buffers. - PFD_MAIN_PLANE, // Main layer. - 0, // Reserved. - 0, 0, 0, // No layer, visible, damage masks. - }; - - pixelFormat = ChoosePixelFormat(m_hdc, &pfd); - SetPixelFormat(m_hdc, pixelFormat, &pfd); -} - -LRESULT Win32Window::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - switch(uMsg) { - // Create the window. - case WM_CREATE: - m_hdc = GetDC(hWnd); - SetupPixelFormat(); - - // Setup the OpenGL version. We want to use 3.0. - int attribs[] = { - WGL_CONTEXT_MAJOR_VERSION_ARB, 3, - WGL_CONTEXT_MINOR_VERSION_ARB, 0, - 0 - }; - - // Create a temporary context so we can get a pointer to the function. - HGLRC tmpContext = wglCreateContext(m_hdc); - // Make it the current. - wglMakeCurrent(m_hdc, tmpContext); - - // Get the function pointer. - wglCreateContextAttribsARB = (PFNWGLCCREATECONTEXTATTRIBSARBPROC) wglGetProcAddress("wglCreateContextAttribsARB"); - - // If it is NULL, then GL 3.0 is not supported. - if(!wglCreateContextAttribsARB) { - Debug::logger->message("\nOpenGL 3.0 is not supported, falling back to GL 2.1"); - m_hglrc = tmpContext; - } else { - // Create an OpenGL 3.0 context using the new function. - m_hglrc = wglCreateContextAttribsARB(m_hdc, 0, attribs); - // Delete then temp context. - wglDeleteContext(tmpContext); - } - - // Make the GL3 context current. - wglMakeCurrent(m_hdc, m_hglrc); - // Our window is now running. - m_isRunning = true; - break; - case WM_DESTROY: - case WM_CLOSE: - wglMakeCurrent(m_hdc, NULL); - wglDeleteContext(m_hglrc); - m_isRunning = false; - PostQuitMessage(0); - return 0; - break; - case WM_SIZE: - // Get the width and height. - int height = HIWORD(lParam); - int width = LOWORD(lParam); - getAttachedExample()->onResize(width, height); - break; - case WM_KEYDOWN: - // If we detect the escape key, then please close the window. - if(wParam == VK_ESCAPE) { - DestroyWindow(m_hwnd); - } - break; - default: - break; - } - return DefWindowProc(hWnd, uMsg, wParam, lParam); -} - -LRESULT CALLBACK Win32Window::StaticWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - Win32Window* window = NULL; - - // If we see the create message. - if(uMsg == WM_CREATE) { - // Then get the pointer we stored during create. - window = (Win32Window)(LPCREATESTRUCT)lParam)->lpCreateParams; - // Associate the window pointer with the hWnd for the other events to access. - SetWindowLongPtr(hWnd, GWL_USERDAA, (LONG_PTR)window); - } else { - // If this aint a creation event, then we should have stored a pointer to the window. - window = (Win32Window)GetWindowLongPtr(hWnd, GWL_USERDATA); - if(!window) { - return DefWindowProc(hWnd, uMsg, wParam, lParam); - } - } - // Call our window's member WndProc (allows us to access member variables). - return window->WndProc(hWnd, uMsg, wParam, lParam) -} - -float Win32Window::getElapsedSeconds() { - float currentTime = float(GetTickCount()) / 1000.0f; - float seconds = float(currentTime - m_lastTime); - m_lastTime = currentTime; - return seconds; -} diff --git a/src/libUnuk/Win32Window.h b/src/libUnuk/Win32Window.h deleted file mode 100644 index cefcd36..0000000 --- a/src/libUnuk/Win32Window.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef _WIN32WINDOW_H_ -#define _WIN32WINDOW_H_ -#include -#include - -class Game; // Declaration of our Game class. - -class Win32Window { -public: - // Default constructor/deconstructor. - Win32Window(HINSTANCE hInstance); - ~Win32Window(void); - - bool Create(int width, int height, int bpp, bool fullscreen); - void Destroy(); - void ProcessEvents(); - void AttachGame(Game* game); - - // Is the window running? - bool IsRunning(); - - void SwapBuffers() { SwapBuffers(m_hdc); } - - static LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - - float GetElapsedSeconds(); - -private: - // Pointer to the game class. - Game* m_game; - // Is the window still running? - bool m_isRunning; - bool m_fullscreen; - - // Window handle. - HWND m_hWnd; - // This is our rendering context. - HGLRC m_hglrc; - // The device context. - HDC m_hdc; - // Window bounds. - RECT m_windowRect; - // Application instance. - HINSTANCE m_hinstance; - WNDCLASSEX m_windowClass; - - void SetupPixelFormat(void); - Game* GetAttachedGame() { return m_game; } - - float m_lastTime; -}; - -#endif // _WIN32WINDOW_H_