Code cleanup: remove readblenfile module, only contained some utility functions
[blender-staging.git] / source / gameengine / GamePlayer / ghost / GPG_Application.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 /** \file GPG_Application.h
31  *  \ingroup player
32  *  \brief GHOST Blender Player application declaration file.
33  */
34
35 #include "GHOST_IEventConsumer.h"
36 #include "STR_String.h"
37
38 #ifdef WIN32
39 #include <wtypes.h>
40 #endif
41
42 class KX_KetsjiEngine;
43 class KX_ISceneConverter;
44 class NG_LoopBackNetworkDeviceInterface;
45 class RAS_IRasterizer;
46 class GHOST_IEvent;
47 class GHOST_ISystem;
48 class GHOST_ITimerTask;
49 class GHOST_IWindow;
50 class GPC_MouseDevice;
51 class GPC_RenderTools;
52 class GPG_Canvas;
53 class GPG_KeyboardDevice;
54 class GPG_System;
55 struct Main;
56 struct Scene;
57
58 class GPG_Application : public GHOST_IEventConsumer
59 {
60 public:
61         GPG_Application(GHOST_ISystem* system);
62         ~GPG_Application(void);
63
64                         bool SetGameEngineData(struct Main* maggie, struct Scene* scene, int argc, char** argv);
65                         bool startWindow(STR_String& title, int windowLeft, int windowTop, int windowWidth, int windowHeight,
66                         const bool stereoVisual, const int stereoMode, const GHOST_TUns16 samples=0);
67                         bool startFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode, const GHOST_TUns16 samples=0);
68                         bool startEmbeddedWindow(STR_String& title, const GHOST_TEmbedderWindowID parent_window, const bool stereoVisual, const int stereoMode, const GHOST_TUns16 samples=0);
69 #ifdef WIN32
70                         bool startScreenSaverFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode, const GHOST_TUns16 samples=0);
71                         bool startScreenSaverPreview(HWND parentWindow, const bool stereoVisual, const int stereoMode, const GHOST_TUns16 samples=0);
72 #endif
73
74         virtual bool processEvent(GHOST_IEvent* event);
75                         int getExitRequested(void);
76                         const STR_String& getExitString(void);
77                         bool StartGameEngine(int stereoMode);
78                         void StopGameEngine();
79
80 protected:
81         bool    handleWheel(GHOST_IEvent* event);
82         bool    handleButton(GHOST_IEvent* event, bool isDown);
83         bool    handleCursorMove(GHOST_IEvent* event);
84         bool    handleKey(GHOST_IEvent* event, bool isDown);
85
86         /**
87          * Initializes the game engine.
88          */
89         bool initEngine(GHOST_IWindow* window, int stereoMode);
90
91         /**
92          * Starts the game engine.
93          */
94         bool startEngine(void);
95
96         /**
97          * Stop the game engine.
98          */
99         void stopEngine(void);
100
101         /**
102          * Shuts the game engine down.
103          */
104         void exitEngine(void);
105
106         /* The game data */
107         STR_String                              m_startSceneName;
108         struct Scene*                   m_startScene;
109         struct Main*                    m_maggie;
110
111         /* Exit state. */
112         int                                             m_exitRequested;
113         STR_String                              m_exitString;
114         /* GHOST system abstraction. */
115         GHOST_ISystem*                  m_system;
116         /* Main window. */
117         GHOST_IWindow*                  m_mainWindow;
118         /* Timer to advance frames. */
119         GHOST_ITimerTask*               m_frameTimer;
120         /* The cursor shape displayed. */
121         GHOST_TStandardCursor   m_cursor;
122
123         /** Engine construction state. */
124         bool m_engineInitialized;
125         /** Engine state. */
126         bool m_engineRunning;
127         /** Running on embedded window */
128         bool m_isEmbedded;
129
130         /** the gameengine itself */
131         KX_KetsjiEngine* m_ketsjiengine;
132         /** The game engine's system abstraction. */
133         GPG_System* m_kxsystem;
134         /** The game engine's keyboard abstraction. */
135         GPG_KeyboardDevice* m_keyboard;
136         /** The game engine's mouse abstraction. */
137         GPC_MouseDevice* m_mouse;
138         /** The game engine's canvas abstraction. */
139         GPG_Canvas* m_canvas;
140         /** The game engine's platform dependent render tools. */
141         GPC_RenderTools* m_rendertools;
142         /** the rasterizer */
143         RAS_IRasterizer* m_rasterizer;
144         /** Converts Blender data files. */
145         KX_ISceneConverter* m_sceneconverter;
146         /** Network interface. */
147         NG_LoopBackNetworkDeviceInterface* m_networkdevice;
148
149         bool m_blendermat;
150         bool m_blenderglslmat;
151         
152         /*
153          * GameLogic.globalDict as a string so that loading new blend files can use the same dict.
154          * Do this because python starts/stops when loading blend files.
155          */
156         char* m_pyGlobalDictString;
157         int m_pyGlobalDictString_Length;
158         
159         /* argc and argv need to be passed on to python */
160         int             m_argc;
161         char**  m_argv;
162 };
163