* Use some more constants instead of literals.
[matthijs/ABM2.git] / ABM2 / main.cpp
index 1b136b120a345f89c062e9ea5326cc7e698a6128..66f44f96f44e538283b34931bdd5b7e29fc0bffd 100755 (executable)
@@ -1,23 +1,32 @@
 // include the basic windows header files and the Direct3D header file\r
+#ifdef WIN32\r
 #include <windows.h>\r
 #include <windowsx.h>\r
+#endif\r
 \r
 #include "Engine/engine.h"\r
 #include "Engine/game.h"\r
+#include "Engine/SpriteManager.h"\r
 #include "Playground.h"\r
-#include "Schemereader.h"\r
+#include "SchemeReader.h"\r
 \r
 // define the screen resolution and keyboard macros\r
 #define SCREEN_WIDTH  640\r
 #define SCREEN_HEIGHT 480\r
 \r
+SpriteData defaultSprites[] = {\r
+       {SPR_FIELD, "Data/FIELD0.png", SCREEN_WIDTH, SCREEN_HEIGHT},\r
+       {SPR_TILE, "Data/Tiles0.png", FIELD_UNIT_WIDTH, FIELD_UNIT_HEIGHT},\r
+       {SPR_NONE, NULL, 0, 0}\r
+};\r
+\r
+#ifdef WIN32\r
 HINSTANCE hInstance;\r
 HWND hWnd;\r
 \r
 // the WindowProc function prototype\r
 LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
 \r
-\r
 class CPongTask : public ITask\r
 {\r
 public:\r
@@ -118,6 +127,7 @@ public:
        AUTO_SIZE;\r
 };\r
 \r
+#endif // WIN32\r
 void CApplication::Run(int argc, char *argv[])\r
 {\r
        //open logfiles\r
@@ -125,7 +135,7 @@ void CApplication::Run(int argc, char *argv[])
 \r
        //create a couple of singletons\r
        new CSettingsManager();\r
-       new CKernel();\r
+       CKernel *kernel = new CKernel();\r
 \r
        //parse the 'settings.eng' file\r
        CSettingsManager::GetSingleton().ParseFile("settings.esf");\r
@@ -136,38 +146,43 @@ void CApplication::Run(int argc, char *argv[])
                for(int i=1;i<argc;i++)\r
                        CSettingsManager::GetSingleton().ParseSetting(std::string(argv[i]));\r
        \r
-       videoTask = new CVideoUpdate();\r
+       videoTask = new CVideoUpdate(kernel);\r
        videoTask->priority=10000;\r
-       CKernel::GetSingleton().AddTask(CMMPointer<ITask>(videoTask));\r
+       kernel->AddTask(CMMPointer<ITask>(videoTask));\r
 \r
-       inputTask = new CInputTask();\r
+       inputTask = new CInputTask(kernel);\r
        inputTask->priority=20;\r
-       CKernel::GetSingleton().AddTask(CMMPointer<ITask>(inputTask));\r
+       kernel->AddTask(CMMPointer<ITask>(inputTask));\r
 \r
-       soundTask = new CSoundTask();\r
+       soundTask = new CSoundTask(kernel);\r
        soundTask->priority=50;\r
-       CKernel::GetSingleton().AddTask(CMMPointer<ITask>(soundTask));\r
+       kernel->AddTask(CMMPointer<ITask>(soundTask));\r
 \r
-       globalTimer=new CGlobalTimer();\r
+       globalTimer=new CGlobalTimer(kernel);\r
        globalTimer->priority=10;\r
-       CKernel::GetSingleton().AddTask(CMMPointer<ITask>(globalTimer));\r
+       kernel->AddTask(CMMPointer<ITask>(globalTimer));\r
 \r
-       Playground game;\r
+       CSpriteManager *sm = new CSpriteManager(videoTask->getGraphics(), defaultSprites);\r
+       kernel->setSpriteManager(sm);\r
+\r
+       Playground game(kernel);\r
        game.priority=100;\r
-       CKernel::GetSingleton().AddTask(CMMPointer<ITask>(&game));\r
+       kernel->AddTask(CMMPointer<ITask>(&game));\r
+\r
 \r
        //set up the profiler with an output handler\r
        CProfileLogHandler profileLogHandler;\r
        CProfileSample::outputHandler=&profileLogHandler;\r
 \r
        //main game loop\r
-       CKernel::GetSingleton().Execute();\r
+       kernel->Execute();\r
        \r
        //clean up singletons\r
-       delete CKernel::GetSingletonPtr();\r
+       delete kernel;\r
        delete CSettingsManager::GetSingletonPtr();\r
 }\r
 \r
+#ifdef WIN32\r
 \r
 // the entry point for any Windows program\r
 int WINAPI WinMain(HINSTANCE hInst,\r
@@ -215,7 +230,6 @@ int WINAPI WinMain(HINSTANCE hInst,
   return 0;\r
 }\r
 \r
-\r
 // this is the main message handler for the program\r
 LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
@@ -230,3 +244,17 @@ LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
 \r
     return DefWindowProc (hWnd, message, wParam, lParam);\r
 }\r
+#else // WIN32\r
+int main(int argc, char *argv[])\r
+{\r
+  new CApplication();\r
+  CApplication::GetSingleton().Run(argc,argv);\r
+  delete CApplication::GetSingletonPtr();\r
+\r
+  //clean up any remaining unreleased objects\r
+  IMMObject::CollectRemainingObjects(true);\r
+\r
+  return 0;\r
+}\r
+#endif //WIN32\r
+\r