summaryrefslogtreecommitdiffstats
path: root/src/app/app.h
blob: a58ea986b74ee80fd75c9a7b37526ad0c579aca4 (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];
};