SuperTuxKart
race_gui.hpp
1 //
2 // SuperTuxKart - a fun racing game with go-kart
3 // Copyright (C) 2004-2015 Steve Baker <sjbaker1@airmail.net>
4 // Copyright (C) 2006-2015 Joerg Henrichs, SuperTuxKart-Team, Steve Baker
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 3
9 // of the License, or (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 
20 #ifndef HEADER_RACE_GUI_HPP
21 #define HEADER_RACE_GUI_HPP
22 
23 #include <map>
24 #include <string>
25 #include <vector>
26 
27 #include <irrString.h>
28 using namespace irr;
29 
30 #include "states_screens/race_gui_base.hpp"
31 
32 class AbstractKart;
33 class InputMap;
34 class Material;
35 class RaceSetup;
36 
41 class RaceGUI : public RaceGUIBase
42 {
43 private:
44 
45  // Minimap related variables
46  // -------------------------
50 
54 
57 
60 
63 
66 
69 
72 
75 
78 
82 
86 
87  int m_negative_timer_additional_width;
88 
91 
94  irr::video::ITexture *m_red_team;
95  irr::video::ITexture *m_blue_team;
96  irr::video::ITexture *m_red_flag;
97  irr::video::ITexture *m_blue_flag;
98  irr::video::ITexture *m_soccer_ball;
99  irr::video::ITexture *m_heart_icon;
100  irr::video::ITexture *m_basket_ball_icon;
102  irr::video::ITexture* m_champion;
103 
105  irr::video::ITexture *m_speed_meter_icon;
106  irr::video::ITexture *m_speed_bar_icon;
107 
110  enum AnimationState {AS_NONE, AS_SMALLER, AS_BIGGER};
111  std::map<int, AnimationState> m_animation_states;
112 
114  std::map<int, float> m_animation_duration;
115 
117  std::map<int, int> m_last_digit;
118 
119  bool m_is_tutorial;
120 
121  /* Display informat for one player on the screen. */
122  void drawEnergyMeter (int x, int y, const AbstractKart *kart,
123  const core::recti &viewport,
124  const core::vector2df &scaling);
125  void drawSpeedEnergyRank (const AbstractKart* kart,
126  const core::recti &viewport,
127  const core::vector2df &scaling, float dt);
128  void drawLap (const AbstractKart* kart,
129  const core::recti &viewport,
130  const core::vector2df &scaling);
131  void drawRank (const AbstractKart *kart,
132  const core::vector2df &offset,
133  float min_ratio, int meter_width,
134  int meter_height, float dt);
135 
136  /* Helper functions for drawing meters */
137 
138  void drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex vertices[], unsigned int count, bool reverse = false);
139 
140  unsigned int computeVerticesForMeter(core::vector2df position[], float threshold[], video::S3DVertex vertices[],
141  unsigned int vertices_count, float measure, int gauge_width,
142  int gauge_height, core::vector2df offset);
143 
145  void drawGlobalMiniMap ();
146  void drawGlobalTimer ();
147  void drawLiveDifference ();
148 
149 public:
150 
151  RaceGUI();
152  ~RaceGUI();
153  virtual void init();
154  virtual void reset();
155  virtual void renderGlobal(float dt);
156  virtual void renderPlayerView(const Camera *camera, float dt);
157 
159  virtual const core::dimension2du getMiniMapSize() const
160  { return core::dimension2du(m_map_width, m_map_height); }
161  virtual void initSize();
162  virtual void calculateMinimapSize();
163 }; // RaceGUI
164 
165 #endif
An abstract interface for the actual karts.
Definition: abstract_kart.hpp:62
This is the base class for all cameras.
Definition: camera.hpp:49
Definition: material.hpp:48
An abstract base class for the two race guis (race_gui and race_result gui)
Definition: race_gui_base.hpp:50
Handles the in-race GUI (messages, mini-map, rankings, timer, etc...)
Definition: race_gui.hpp:42
int m_font_height
Height of the digit font.
Definition: race_gui.hpp:90
int m_big_precise_timer_width
Maximum string length for a big precise timer (like the live difference timer over a minute)
Definition: race_gui.hpp:85
virtual const core::dimension2du getMiniMapSize() const
Returns the size of the texture on which to render the minimap to.
Definition: race_gui.hpp:159
irr::video::ITexture * m_red_team
Icon textures (stored as variables to not look up their location on every frame)
Definition: race_gui.hpp:94
std::map< int, int > m_last_digit
Stores the previous digit on the center of the speedometer for each number.
Definition: race_gui.hpp:117
int m_lap_width
Maximum lap display length (either 9/9 or 99/99).
Definition: race_gui.hpp:74
int m_map_bottom
Distance of map from bottom of screen.
Definition: race_gui.hpp:71
int m_map_rendered_width
The width of the rendered mini map in pixels, must be a power of 2.
Definition: race_gui.hpp:56
std::map< int, float > m_animation_duration
How long the speedometer digit animation has been shown for this number.
Definition: race_gui.hpp:114
irr::video::ITexture * m_champion
Texture for the hit limit icon.
Definition: race_gui.hpp:102
irr::video::ITexture * m_speed_meter_icon
Texture for speedometer.
Definition: race_gui.hpp:105
int m_map_rendered_height
The height of the rendered mini map in pixels, must be a power of 2.
Definition: race_gui.hpp:59
AnimationState
Animation state: none, getting smaller (old value), getting bigger (new number).
Definition: race_gui.hpp:110
int m_map_width
Width of the map in pixels on the screen, need not be a power of 2.
Definition: race_gui.hpp:62
int m_minimap_player_size
The size of a single marker on the screen or player karts, need not be a power of 2.
Definition: race_gui.hpp:53
int m_small_precise_timer_width
Maximum string length for a small precise timer (like the live difference timer under a minute)
Definition: race_gui.hpp:81
int m_minimap_ai_size
The size of a single marker on the screen for AI karts, need not be a power of 2.
Definition: race_gui.hpp:49
int m_map_height
Height of the map in pixels on the screen, need not be a power of 2.
Definition: race_gui.hpp:65
int m_map_left
Distance of map from left side of screen.
Definition: race_gui.hpp:68
int m_timer_width
Maximum string length for the timer.
Definition: race_gui.hpp:77