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