.scr patch (from Raymond Penners)
[blender.git] / source / gameengine / GamePlayer / ghost / GPG_Application.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL 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. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  * GHOST Blender Player application declaration file.
32  */
33
34 #include "GHOST_IEventConsumer.h"
35 #include "STR_String.h"
36
37 #ifdef WIN32
38 #include <wtypes.h>
39 #endif
40
41 class KX_KetsjiEngine;
42 class KX_ISceneConverter;
43 class NG_LoopBackNetworkDeviceInterface;
44 class SND_IAudioDevice;
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
57 class GPG_Application : public GHOST_IEventConsumer
58 {
59 public:
60         GPG_Application(GHOST_ISystem* system, struct Main *maggie, STR_String startSceneName);
61         ~GPG_Application(void);
62
63                         bool SetGameEngineData(struct Main *maggie, STR_String startSceneName);
64                         bool startWindow(STR_String& title, int windowLeft, int windowTop, int windowWidth, int windowHeight,
65                         const bool stereoVisual, const int stereoMode);
66                         bool startFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode);
67 #ifdef WIN32
68                         bool startScreenSaverFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode);
69                         bool startScreenSaverPreview(HWND parentWindow, const bool stereoVisual, const int stereoMode);
70 #endif
71
72         virtual bool processEvent(GHOST_IEvent* event);
73                         int getExitRequested(void);
74                         const STR_String& getExitString(void);
75                         bool StartGameEngine(int stereoMode);
76                         void StopGameEngine();
77
78 protected:
79         bool    handleWheel(GHOST_IEvent* event);
80         bool    handleButton(GHOST_IEvent* event, bool isDown);
81         bool    handleCursorMove(GHOST_IEvent* event);
82         bool    handleKey(GHOST_IEvent* event, bool isDown);
83
84         /**
85          * Initializes the game engine.
86          */
87         bool initEngine(GHOST_IWindow* window, int stereoMode);
88
89         /**
90          * Starts the game engine.
91          */
92         bool startEngine(void);
93
94         /**
95          * Stop the game engine.
96          */
97         void stopEngine(void);
98
99         /**
100          * Shuts the game engine down.
101          */
102         void exitEngine(void);
103
104         /* The game data */
105         STR_String                              m_startSceneName;
106         struct Main*                    m_maggie;
107
108         /* Exit state. */
109         int                                             m_exitRequested;
110         STR_String                              m_exitString;
111         /* GHOST system abstraction. */
112         GHOST_ISystem*                  m_system;
113         /* Main window. */
114         GHOST_IWindow*                  m_mainWindow;
115         /* Timer to advance frames. */
116         GHOST_ITimerTask*               m_frameTimer;
117         /* The cursor shape displayed. */
118         GHOST_TStandardCursor   m_cursor;
119
120         /** Engine construction state. */
121         bool m_engineInitialized;
122         /** Engine state. */
123         bool m_engineRunning;
124
125         /** the gameengine itself */
126         KX_KetsjiEngine* m_ketsjiengine;
127         /** The game engine's system abstraction. */
128         GPG_System* m_kxsystem;
129         /** The game engine's keyboard abstraction. */
130         GPG_KeyboardDevice* m_keyboard;
131         /** The game engine's mouse abstraction. */
132         GPC_MouseDevice* m_mouse;
133         /** The game engine's canvas abstraction. */
134         GPG_Canvas* m_canvas;
135         /** The game engine's platform dependent render tools. */
136         GPC_RenderTools* m_rendertools;
137         /** the rasterizer */
138         RAS_IRasterizer* m_rasterizer;
139         /** Converts Blender data files. */
140         KX_ISceneConverter* m_sceneconverter;
141         /** Network interface. */
142         NG_LoopBackNetworkDeviceInterface* m_networkdevice;
143         /** Sound device. */
144         SND_IAudioDevice* m_audiodevice;
145 };
146