summaryrefslogtreecommitdiffstats
path: root/src/app/app.h
blob: ee6184f509fb7b97ce912b0e1d6377a90f2c8c63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// * This file is part of the COLOBOT source code
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see  http://www.gnu.org/licenses/.

// app.h

#pragma once


#include "common/misc.h"
#include "graphics/common/device.h"
#include "graphics/common/engine.h"

#include <string>


class CInstanceManager;
class CEvent;
class CRobotMain;
class CSound;

struct ApplicationPrivate;


/**
 * \class CApplication Main application
 *
 * This class is responsible for creating and handling main application window,
 * receiving events, etc.
 *
 * ...
 */
class CApplication
{
public:
	//! Constructor (can only be called once!)
	CApplication();
	//! Destructor
	~CApplication();

public:
	//! Parses commandline arguments
	Error		ParseArguments(int argc, char *argv[]);
	//! Initializes the application
	bool		Create();
	//! Main event loop
	int			Run();

protected:
	//! Cleans up before exit
	void		Destroy();
	//! Processes an SDL event to Event struct
	void		ParseEvent();
	//! Handles some incoming events
	void		ProcessEvent(Event event);
	//! Renders the image in window
	bool		Render();

public:
	void		Pause(bool pause);
	void		StepSimulation(float rTime);

	void		SetMousePos(Math::Point pos);

	void		SetShowStat(bool show);
	bool		RetShowStat();
	void		SetDebugMode(bool mode);
	bool		RetDebugMode();
	bool		RetSetupMode();

	void		FlushPressKey();
	void		ResetKey();
	void		SetKey(int keyRank, int option, int key);
	int			RetKey(int keyRank, int option);

	void		SetJoystick(bool enable);
	bool		RetJoystick();

	void		SetMouseType(Gfx::MouseType type);
	void		SetNiceMouse(bool nice);
	bool		RetNiceMouse();
	bool		RetNiceMouseCap();

	bool		WriteScreenShot(char *filename, int width, int height);

protected:
	//HRESULT		ConfirmDevice( DDCAPS* pddDriverCaps, D3DDEVICEDESC7* pd3dDeviceDesc );
	//HRESULT		Initialize3DEnvironment();
	//HRESULT		Change3DEnvironment();
	//HRESULT		CreateZBuffer(GUID* pDeviceGUID);
	//HRESULT		Render3DEnvironment();
	//VOID		Cleanup3DEnvironment();
	//VOID		DeleteDeviceObjects();
	//VOID		DisplayFrameworkError( HRESULT, DWORD );

	void		InitText();
	void		DrawSuppl();
	void		ShowStats();
	void		OutputText(long x, long y, char* str);

protected:
	//! Private (SDL-dependent data)
	ApplicationPrivate*		m_private;
	CInstanceManager*		m_iMan;
	Gfx::DeviceConfig		m_deviceConfig;
	Gfx::CEngine*			m_engine;
	CEvent*					m_event;
	CRobotMain*				m_robotMain;
	CSound*					m_sound;

	//! Code to return at exit
	int 			m_exitCode;

	bool			m_active;
	bool			m_activateApp;
	bool			m_ready;
	bool			m_joystick;

	std::string		m_windowTitle;
	long			m_vidMemTotal;
	bool			m_appUseZBuffer;
	bool			m_appUseStereo;
	bool			m_showStats;
	bool			m_debugMode;
	bool			m_audioState;
	bool			m_audioTrack;
	bool			m_niceMouse;
	bool			m_setupMode;

	int				m_keyState;
	Math::Vector	m_axeKey;
	Math::Vector	m_axeJoy;
	bool			m_joyButton[32];
	Math::Point		m_mousePos;
	long			m_mouseWheel;

	float			m_time;
	long			m_key[50][2];
};