OpenXcom  1.0
Open-source clone of the original X-Com
BattlescapeState.h
1 #pragma once
2 /*
3  * Copyright 2010-2016 OpenXcom Developers.
4  *
5  * This file is part of OpenXcom.
6  *
7  * OpenXcom is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * OpenXcom is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with OpenXcom. If not, see <http:///www.gnu.org/licenses/>.
19  */
20 #include "../Engine/State.h"
21 #include "Position.h"
22 
23 #include <vector>
24 #include <string>
25 
26 namespace OpenXcom
27 {
28 
29 class Surface;
30 class Map;
31 class ImageButton;
32 class BattlescapeButton;
33 class InteractiveSurface;
34 class Text;
35 class Bar;
36 class NumberText;
37 class BattleUnit;
38 class SavedBattleGame;
39 class BattleItem;
40 class Timer;
41 class WarningMessage;
42 class BattlescapeGame;
43 
47 class BattlescapeState : public State
48 {
49 private:
50  Surface *_rank;
51  InteractiveSurface *_icons;
52  Map *_map;
53  BattlescapeButton *_btnUnitUp, *_btnUnitDown, *_btnMapUp, *_btnMapDown, *_btnShowMap, *_btnKneel;
54  BattlescapeButton *_btnInventory, *_btnCenter, *_btnNextSoldier, *_btnNextStop, *_btnShowLayers, *_btnHelp;
55  BattlescapeButton *_btnEndTurn, *_btnAbort, *_btnLaunch, *_btnPsi, *_reserve;
56  InteractiveSurface *_btnStats;
57  BattlescapeButton *_btnReserveNone, *_btnReserveSnap, *_btnReserveAimed, *_btnReserveAuto, *_btnReserveKneel, *_btnZeroTUs;
58  InteractiveSurface *_btnLeftHandItem, *_btnRightHandItem;
59  static const int VISIBLE_MAX = 10;
60  InteractiveSurface *_btnVisibleUnit[VISIBLE_MAX];
61  NumberText *_numVisibleUnit[VISIBLE_MAX];
62  BattleUnit *_visibleUnit[VISIBLE_MAX];
63  WarningMessage *_warning;
64  Text *_txtName;
65  NumberText *_numTimeUnits, *_numEnergy, *_numHealth, *_numMorale, *_numLayers, *_numAmmoLeft, *_numAmmoRight;
66  Bar *_barTimeUnits, *_barEnergy, *_barHealth, *_barMorale;
67  Timer *_animTimer, *_gameTimer;
68  SavedBattleGame *_save;
69  Text *_txtDebug, *_txtTooltip;
70  std::vector<State*> _popups;
71  BattlescapeGame *_battleGame;
72  bool _firstInit;
73  bool _isMouseScrolling, _isMouseScrolled;
74  int _xBeforeMouseScrolling, _yBeforeMouseScrolling;
75  Position _mapOffsetBeforeMouseScrolling;
76  Uint32 _mouseScrollingStartTime;
77  int _totalMouseMoveX, _totalMouseMoveY;
78  bool _mouseMovedOverThreshold;
79  bool _mouseOverIcons;
80  std::string _currentTooltip;
81  Position _cursorPosition;
82  Uint8 _barHealthColor;
83  bool _autosave;
85  void handleItemClick(BattleItem *item);
87  void blinkVisibleUnitButtons();
89  void blinkHealthBar();
91  void toggleKneelButton(BattleUnit* unit);
92 public:
94  void selectNextPlayerUnit(bool checkReselect = false, bool setReselect = false, bool checkInventory = false, bool checkFOV = true);
96  void selectPreviousPlayerUnit(bool checkReselect = false, bool setReselect = false, bool checkInventory = false);
97  static const int DEFAULT_ANIM_SPEED = 100;
103  void init();
105  void think();
107  void mapOver(Action *action);
109  void mapPress(Action *action);
111  void mapClick(Action *action);
113  void mapIn(Action *action);
115  void btnUnitUpClick(Action *action);
117  void btnUnitDownClick(Action *action);
119  void btnMapUpClick(Action *action);
121  void btnMapDownClick(Action *action);
123  void btnShowMapClick(Action *action);
125  void btnKneelClick(Action *action);
127  void btnInventoryClick(Action *action);
129  void btnCenterClick(Action *action);
131  void btnNextSoldierClick(Action *action);
133  void btnNextStopClick(Action *action);
135  void btnPrevSoldierClick(Action *action);
137  void btnShowLayersClick(Action *action);
139  void btnHelpClick(Action *action);
141  void btnEndTurnClick(Action *action);
143  void btnAbortClick(Action *action);
145  void btnStatsClick(Action *action);
147  void btnLeftHandItemClick(Action *action);
149  void btnRightHandItemClick(Action *action);
151  void btnVisibleUnitClick(Action *action);
153  void btnLaunchClick(Action *action);
155  void btnPsiClick(Action *action);
157  void btnReserveClick(Action *action);
159  void btnReloadClick(Action *action);
161  void btnPersonalLightingClick(Action *action);
163  bool playableUnitSelected();
165  void updateSoldierInfo(bool checkFOV = true);
167  void animate();
169  void handleState();
171  void setStateInterval(Uint32 interval);
173  Game *getGame() const;
175  Map *getMap() const;
177  void debug(const std::string &message);
179  void warning(const std::string &message);
181  void handle(Action *action);
183  void popup(State *state);
185  void finishBattle(bool abort, int inExitArea);
187  void showLaunchButton(bool show);
189  void showPsiButton(bool show);
195  void saveAIMap();
197  void saveVoxelMap();
199  void saveVoxelView();
201  void mouseInIcons(Action *action);
203  void mouseOutIcons(Action *action);
205  bool getMouseOverIcons() const;
207  bool allowButtons(bool allowSaving = false) const;
209  void btnReserveKneelClick(Action *action);
211  void btnZeroTUsClick(Action *action);
213  void txtTooltipIn(Action *action);
215  void txtTooltipOut(Action *action);
217  void resize(int &dX, int &dY);
219  void stopScrolling(Action *action);
221  void autosave();
222 };
223 
224 }
void stopScrolling(Action *action)
Move the mouse back to where it started after we finish drag scrolling.
Definition: BattlescapeState.cpp:2278
bool allowButtons(bool allowSaving=false) const
Is the player allowed to press buttons?
Definition: BattlescapeState.cpp:2135
void btnHelpClick(Action *action)
Handler for clicking the Help button.
Definition: BattlescapeState.cpp:1046
Container for all the information associated with a given user action, like mouse clicks...
Definition: Action.h:32
void btnInventoryClick(Action *action)
Handler for clicking the Soldier button.
Definition: BattlescapeState.cpp:917
void btnNextSoldierClick(Action *action)
Handler for clicking the Next Soldier button.
Definition: BattlescapeState.cpp:961
void mouseOutIcons(Action *action)
Handler for the mouse going out of the icons, enabling the tile selection cube.
Definition: BattlescapeState.cpp:2112
void btnReserveClick(Action *action)
Handler for clicking a reserved button.
Definition: BattlescapeState.cpp:1215
BattlescapeGame * getBattleGame()
Returns a pointer to the battlegame, in case we need its functions.
Definition: BattlescapeState.cpp:2094
A game state that receives user input and reacts accordingly.
Definition: State.h:44
void selectNextPlayerUnit(bool checkReselect=false, bool setReselect=false, bool checkInventory=false, bool checkFOV=true)
Selects the next soldier.
Definition: BattlescapeState.cpp:999
Timer used to run code in fixed intervals.
Definition: Timer.h:35
void saveVoxelMap()
Saves each layer of voxels on the bettlescape as a png.
Definition: BattlescapeState.cpp:1896
Surface that the user can interact with.
Definition: InteractiveSurface.h:37
void btnMapUpClick(Action *action)
Handler for clicking the Map Up button.
Definition: BattlescapeState.cpp:848
void saveVoxelView()
Saves a first-person voxel view of the battlescape.
Definition: BattlescapeState.cpp:1768
void handle(Action *action)
Handles keypresses.
Definition: BattlescapeState.cpp:1523
bool getMouseOverIcons() const
Checks if the mouse is over the icons.
Definition: BattlescapeState.cpp:2121
void think()
Runs the timers and handles popups.
Definition: BattlescapeState.cpp:561
void selectPreviousPlayerUnit(bool checkReselect=false, bool setReselect=false, bool checkInventory=false)
Selects the previous soldier.
Definition: BattlescapeState.cpp:1019
void mapClick(Action *action)
Handler for clicking the map.
Definition: BattlescapeState.cpp:726
Text string displayed on screen.
Definition: Text.h:40
Bar graphic that represents a certain value.
Definition: Bar.h:31
void txtTooltipIn(Action *action)
Handler for showing tooltip.
Definition: BattlescapeState.cpp:2193
void mapIn(Action *action)
Handler for entering with mouse to the map surface.
Definition: BattlescapeState.cpp:812
void btnLeftHandItemClick(Action *action)
Handler for clicking the left hand item button.
Definition: BattlescapeState.cpp:1116
void mapPress(Action *action)
Handler for pressing the map.
Definition: BattlescapeState.cpp:697
void btnRightHandItemClick(Action *action)
Handler for clicking the right hand item button.
Definition: BattlescapeState.cpp:1143
void btnAbortClick(Action *action)
Handler for clicking the Abort button.
Definition: BattlescapeState.cpp:1070
void setStateInterval(Uint32 interval)
Sets the state timer interval.
Definition: BattlescapeState.cpp:1475
void btnLaunchClick(Action *action)
Handler for clicking the launch rocket button.
Definition: BattlescapeState.cpp:1195
void init()
Initializes the battlescapestate.
Definition: BattlescapeState.cpp:492
void finishBattle(bool abort, int inExitArea)
Finishes a battle.
Definition: BattlescapeState.cpp:1979
void autosave()
Autosave next turn.
Definition: BattlescapeState.cpp:2303
void btnReloadClick(Action *action)
Handler for clicking the reload button.
Definition: BattlescapeState.cpp:1247
bool playableUnitSelected()
Determines whether a playable unit is selected.
Definition: BattlescapeState.cpp:1271
void clearMouseScrollingState()
Clears mouse-scrolling state.
Definition: BattlescapeState.cpp:2086
void btnShowMapClick(Action *action)
Handler for clicking the Show Map button.
Definition: BattlescapeState.cpp:868
Represents a single item in the battlescape.
Definition: BattleItem.h:37
Map * getMap() const
Gets map.
Definition: BattlescapeState.cpp:1493
void btnShowLayersClick(Action *action)
Handler for clicking the Show Layers button.
Definition: BattlescapeState.cpp:1037
Interactive map of the battlescape.
Definition: Map.h:44
void warning(const std::string &message)
Show warning message.
Definition: BattlescapeState.cpp:1514
void resize(int &dX, int &dY)
Update the resolution settings, we just resized the window.
Definition: BattlescapeState.cpp:2222
void mapOver(Action *action)
Handler for moving mouse over the map.
Definition: BattlescapeState.cpp:594
void btnKneelClick(Action *action)
Handler for clicking the Kneel button.
Definition: BattlescapeState.cpp:891
void saveAIMap()
Saves a map as used by the AI.
Definition: BattlescapeState.cpp:1645
void btnNextStopClick(Action *action)
Handler for clicking the Next Stop button.
Definition: BattlescapeState.cpp:974
void showPsiButton(bool show)
Shows the PSI button.
Definition: BattlescapeState.cpp:2078
void btnEndTurnClick(Action *action)
Handler for clicking the End Turn button.
Definition: BattlescapeState.cpp:1057
void btnUnitDownClick(Action *action)
Handler for clicking the Unit Down button.
Definition: BattlescapeState.cpp:835
Coloured box with text inside that fades out after it is displayed.
Definition: WarningMessage.h:33
void popup(State *state)
Displays a popup window.
Definition: BattlescapeState.cpp:1968
Element that is blit (rendered) onto the screen.
Definition: Surface.h:38
~BattlescapeState()
Cleans up the Battlescape state.
Definition: BattlescapeState.cpp:482
void animate()
Animates map objects on the map, also smoke,fire, ...
Definition: BattlescapeState.cpp:1455
void btnUnitUpClick(Action *action)
Handler for clicking the Unit Up button.
Definition: BattlescapeState.cpp:822
void btnPersonalLightingClick(Action *action)
Handler for clicking the lighting button.
Definition: BattlescapeState.cpp:1260
void updateSoldierInfo(bool checkFOV=true)
Updates soldier name/rank/tu/energy/health/morale.
Definition: BattlescapeState.cpp:1279
void mouseInIcons(Action *action)
Handler for the mouse moving over the icons, disables the tile selection cube.
Definition: BattlescapeState.cpp:2103
void btnPrevSoldierClick(Action *action)
Handler for clicking the Previous Soldier button.
Definition: BattlescapeState.cpp:984
void btnVisibleUnitClick(Action *action)
Handler for clicking a visible unit button.
Definition: BattlescapeState.cpp:1170
Battlescape game - the core game engine of the battlescape game.
Definition: BattlescapeGame.h:68
void showLaunchButton(bool show)
Show the launch button.
Definition: BattlescapeState.cpp:2069
The battlescape data that gets written to disk when the game is saved.
Definition: SavedBattleGame.h:47
void txtTooltipOut(Action *action)
Handler for hiding tooltip.
Definition: BattlescapeState.cpp:2206
void btnReserveKneelClick(Action *action)
Handler for clicking the reserve TUs to kneel button.
Definition: BattlescapeState.cpp:2146
The core of the game engine, manages the game&#39;s entire contents and structure.
Definition: Game.h:41
Regular image that works like a button.
Definition: BattlescapeButton.h:34
Easy handling of X-Y-Z coordinates.
Definition: Position.h:28
void debug(const std::string &message)
Show debug message.
Definition: BattlescapeState.cpp:1502
Number digits displayed on the screen.
Definition: NumberText.h:29
Battlescape screen which shows the tactical battle.
Definition: BattlescapeState.h:47
Game * getGame() const
Gets game.
Definition: BattlescapeState.cpp:1484
void btnMapDownClick(Action *action)
Handler for clicking the Map Down button.
Definition: BattlescapeState.cpp:858
void btnZeroTUsClick(Action *action)
Handler for clicking the expend all TUs button.
Definition: BattlescapeState.cpp:2172
void handleState()
Handles the battle game state.
Definition: BattlescapeState.cpp:1466
void btnPsiClick(Action *action)
Handler for clicking the use psi button.
Definition: BattlescapeState.cpp:1205
BattlescapeState()
Creates the Battlescape state.
Definition: BattlescapeState.cpp:82
Represents a moving unit in the battlescape, player controlled or AI controlled it holds info about i...
Definition: BattleUnit.h:59
void btnStatsClick(Action *action)
Handler for clicking the stats.
Definition: BattlescapeState.cpp:1080
Definition: BaseInfoState.cpp:40
void btnCenterClick(Action *action)
Handler for clicking the Center button.
Definition: BattlescapeState.cpp:948