* Make CEngine keep a CSpriteManager.
authorMatthijs Kooijman <m.kooijman@student.utwente.nl>
Mon, 11 Jun 2007 18:15:24 +0000 (20:15 +0200)
committerMatthijs Kooijman <m.kooijman@student.utwente.nl>
Mon, 11 Jun 2007 18:15:24 +0000 (20:15 +0200)
 * Let VideoUpdate create its Graphics object in ctor instead of Start,
   so it is available for Sprite creation.
 * Make VideoUpdate start and end scenes appropriately, so always a
   scene is open.
 * Add a CSpriteManager that loads default sprites.

ABM2/Engine/Kernel.h
ABM2/Engine/VideoUpdate.cpp
ABM2/Engine/VideoUpdate.h
ABM2/Makefile
ABM2/main.cpp

index 0e1c39d8a584fe9e4959925de89854aa97f4c9e9..3eda3db6a5c011a9915e9d8b95c6a6865736ef9b 100755 (executable)
@@ -10,6 +10,7 @@
 #endif // _MSC_VER > 1000\r
 \r
 #include "singleton.h"\r
+#include "SpriteManager.h"\r
 \r
 \r
 class CClient;\r
@@ -30,10 +31,13 @@ public:
        void ResumeTask(const CMMPointer<ITask> &t);\r
        void RemoveTask(const CMMPointer<ITask> &t);\r
        void KillAllTasks();\r
-\r
+       \r
+       void setSpriteManager(CSpriteManager*) {this->sm = sm;}\r
+       CSpriteManager* getSpriteManager() {return this->sm;}\r
 protected:\r
        std::list< CMMPointer<ITask> > taskList;\r
        std::list< CMMPointer<ITask> > pausedTaskList;\r
+       CSpriteManager *sm;\r
 };\r
 \r
 class ITask : public IMMObject\r
index 270a67b07a22f9da440f72075da83c601969f0f1..1d66b9cc39461de4c26f38eaee734301ffd11aaa 100755 (executable)
@@ -26,6 +26,8 @@ int CVideoUpdate::scrBPP=16;
 \r
 CVideoUpdate::CVideoUpdate()\r
 {\r
+       assert(screenWidth && screenHeight && screenBPP);\r
+       this->g = new Graphics(scrWidth, scrHeight, 16, false);\r
 }\r
 \r
 CVideoUpdate::~CVideoUpdate()\r
@@ -34,7 +36,6 @@ CVideoUpdate::~CVideoUpdate()
 \r
 bool CVideoUpdate::Start()\r
 {\r
-       assert(screenWidth && screenHeight && screenBPP);\r
 /*\r
        if(-1==SDL_InitSubSystem(SDL_INIT_VIDEO))\r
        {\r
@@ -59,24 +60,25 @@ bool CVideoUpdate::Start()
        //hide the mouse cursor\r
        SDL_ShowCursor(SDL_DISABLE);\r
 */\r
-       this->g = new Graphics(scrWidth, scrHeight, 16, false);\r
        if (this->g->createDisplay())\r
                return false;\r
        this->g->setCullingMode(AM_CULL_NONE);\r
        this->g->setBackground(COLOUR_RGBA(127, 127, 127, 255));\r
-\r
-       this->s = new Sprite("Data/POWBOMB.png", COLOUR_RGBA(0, 0, 255, 255), 64, 64, this->g);\r
+       \r
+       /* Start a first scene */\r
+       this->g->beginScene();\r
        return true;\r
 }\r
 \r
 void CVideoUpdate::Update()\r
 {\r
-       this->g->beginScene();\r
-       this->s->blit(0, 0, 1.0, 1.0, 0, 0, COLOUR_RGBA(255, 255, 255, 255));\r
        this->g->endScene();\r
+       this->g->beginScene();\r
 }\r
 \r
 void CVideoUpdate::Stop()\r
 {\r
+       /* End the last scene */\r
+       this->g->endScene();\r
        delete this->g;\r
 }\r
index e0f4bc212fc934fb00eb6d128da67e8d653259d7..0bf5d4dd2823286ee0b8399da9147b482b0b6a79 100755 (executable)
@@ -9,17 +9,9 @@
 #pragma once\r
 #endif // _MSC_VER > 1000\r
 \r
-#ifdef WITH_SDL\r
 #include <Amaltheia/Graphics.h>\r
 #include <Amaltheia/Sprite.h>\r
 \r
-#else // WITH_SDL\r
-#include <d3d9.h>\r
-#include <d3dx9.h>\r
-\r
-#include "engine.h"\r
-extern LPDIRECT3DDEVICE9 d3ddev;    // the pointer to the device class\r
-#endif // WITH_SDL\r
 \r
 class CVideoUpdate : public ITask  \r
 {\r
@@ -34,13 +26,10 @@ public:
        bool Start();\r
        void Update();\r
        void Stop();\r
+\r
+       Graphics* getGraphics() { return this->g; }\r
 private:\r
-#ifdef WITH_SDL\r
        Graphics *g;\r
-       Sprite *s;\r
-#else\r
-       LPDIRECT3D9 d3d;    // the pointer to our Direct3D interface\r
-#endif //WITH_SDL\r
 \r
 };\r
 #endif // !defined(AFX_VIDEOUPDATE_H__FB4B263B_4FA7_4700_BB70_EE5CB1768E83__INCLUDED_)\r
index 91782ea944b50e43cbcec24d2d19c84359bace0e..d3b2d619100fe6ce375c639decc53ff4a13e7e5c 100644 (file)
@@ -5,7 +5,7 @@ OBJS    := main.o Engine/Log.o SchemeReader.o Engine/Settings.o \
            Engine/mmanager.o Engine/Kernel.o Engine/ProfileLogHandler.o \
            Engine/VideoUpdate.o Engine/GlobalTimer.o Engine/SoundTask.o \
            Engine/profiler.o Playground.o Engine/InputTask.o \
-           Amaltheia/Graphics.o Amaltheia/Sprite.o
+           Amaltheia/Graphics.o Amaltheia/Sprite.o Engine/SpriteManager.o
 
 #include these in linking. Linking with -lftgl doesn't work for some stupid reason...
 EXTRA_OBJS := /usr/lib/libftgl.a
index 48dcd73f664a1692542a03fd47e7b3546c122ccc..e325647b86402a4ca002bcbea96218abba118c16 100755 (executable)
@@ -6,6 +6,7 @@
 \r
 #include "Engine/engine.h"\r
 #include "Engine/game.h"\r
+#include "Engine/SpriteManager.h"\r
 #include "Playground.h"\r
 #include "SchemeReader.h"\r
 \r
 #define SCREEN_WIDTH  640\r
 #define SCREEN_HEIGHT 480\r
 \r
+enum SpriteID {\r
+       SPR_NONE = 0,\r
+       SPR_FIELD,\r
+       SPR_SOLID,\r
+       SPR_BRICK,\r
+       SPR_BLANK,\r
+       SPR_PLAYER,\r
+};\r
+\r
+SpriteData defaultSprites[] = {\r
+       {SPR_FIELD, "FIELD0.png", 640, 480},\r
+       {SPR_BLANK, "FIELD0.png", 640, 480},\r
+       {SPR_NONE, NULL, 0, 0}\r
+};\r
+\r
 #ifdef WIN32\r
 HINSTANCE hInstance;\r
 HWND hWnd;\r
@@ -155,6 +171,9 @@ void CApplication::Run(int argc, char *argv[])
        globalTimer->priority=10;\r
        CKernel::GetSingleton().AddTask(CMMPointer<ITask>(globalTimer));\r
 \r
+       CSpriteManager *sm = new CSpriteManager(videoTask->getGraphics(), defaultSprites);\r
+       CKernel::GetSingleton().setSpriteManager(sm);\r
+\r
        Playground game;\r
        game.priority=100;\r
        CKernel::GetSingleton().AddTask(CMMPointer<ITask>(&game));\r