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 <string>
24 #include <vector>
25 
26 #include <irrString.h>
27 using namespace irr;
28 
29 #include "states_screens/race_gui_base.hpp"
30 
31 class AbstractKart;
32 class InputMap;
33 class Material;
34 class RaceSetup;
35 
40 class RaceGUI : public RaceGUIBase
41 {
42 private:
43 
44  Material *m_speed_meter_icon;
45  Material *m_speed_bar_icon;
46 
47  // Minimap related variables
48  // -------------------------
52 
56 
59 
62 
65 
68 
71 
74 
77 
80 
84 
88 
89  int m_negative_timer_additional_width;
90 
93 
96  irr::video::ITexture *m_red_team;
97  irr::video::ITexture *m_blue_team;
98  irr::video::ITexture *m_red_flag;
99  irr::video::ITexture *m_blue_flag;
100  irr::video::ITexture *m_soccer_ball;
101  irr::video::ITexture *m_heart_icon;
103  irr::video::ITexture* m_champion;
104 
107  enum AnimationState {AS_NONE, AS_SMALLER, AS_BIGGER};
108  std::vector<AnimationState> m_animation_states;
109 
111  std::vector<float> m_rank_animation_duration;
112 
114  std::vector<int> m_last_ranks;
115 
116  bool m_is_tutorial;
117 
118  /* Display informat for one player on the screen. */
119  void drawEnergyMeter (int x, int y, const AbstractKart *kart,
120  const core::recti &viewport,
121  const core::vector2df &scaling);
122  void drawSpeedEnergyRank (const AbstractKart* kart,
123  const core::recti &viewport,
124  const core::vector2df &scaling, float dt);
125  void drawLap (const AbstractKart* kart,
126  const core::recti &viewport,
127  const core::vector2df &scaling);
128  void drawRank (const AbstractKart *kart,
129  const core::vector2df &offset,
130  float min_ratio, int meter_width,
131  int meter_height, float dt);
132 
133  /* Helper functions for drawing meters */
134 
135  void drawMeterTexture(video::ITexture *meter_texture, video::S3DVertex vertices[], unsigned int count);
136 
137  unsigned int computeVerticesForMeter(core::vector2df position[], float threshold[], video::S3DVertex vertices[],
138  unsigned int vertices_count, float measure, int gauge_width,
139  int gauge_height, core::vector2df offset);
140 
142  void drawGlobalMiniMap ();
143  void drawGlobalTimer ();
144  void drawLiveDifference ();
145 
146 public:
147 
148  RaceGUI();
149  ~RaceGUI();
150  virtual void init();
151  virtual void reset();
152  virtual void renderGlobal(float dt);
153  virtual void renderPlayerView(const Camera *camera, float dt);
154 
156  virtual const core::dimension2du getMiniMapSize() const
157  { return core::dimension2du(m_map_width, m_map_height); }
158  virtual void calculateMinimapSize();
159 }; // RaceGUI
160 
161 #endif
irr::video::ITexture * m_red_team
Icon textures (stored as variables to not look up their location on every frame)
Definition: race_gui.hpp:96
An abstract base class for the two race guis (race_gui and race_result gui)
Definition: race_gui_base.hpp:49
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:83
int m_map_rendered_height
The height of the rendered mini map in pixels, must be a power of 2.
Definition: race_gui.hpp:61
int m_map_bottom
Distance of map from bottom of screen.
Definition: race_gui.hpp:73
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:55
virtual const core::dimension2du getMiniMapSize() const
Returns the size of the texture on which to render the minimap to.
Definition: race_gui.hpp:156
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:51
irr::video::ITexture * m_champion
Texture for the hit limit icon.
Definition: race_gui.hpp:103
int m_font_height
Height of the digit font.
Definition: race_gui.hpp:92
int m_map_rendered_width
The width of the rendered mini map in pixels, must be a power of 2.
Definition: race_gui.hpp:58
AnimationState
Animation state: none, getting smaller (old value), getting bigger (new number).
Definition: race_gui.hpp:107
int m_timer_width
Maximum string length for the timer.
Definition: race_gui.hpp:79
int m_map_left
Distance of map from left side of screen.
Definition: race_gui.hpp:70
Definition: material.hpp:46
Handles the in-race GUI (messages, mini-map, rankings, timer, etc...)
Definition: race_gui.hpp:40
int m_lap_width
Maximum lap display length (either 9/9 or 99/99).
Definition: race_gui.hpp:76
std::vector< int > m_last_ranks
Stores the previous rank for each kart.
Definition: race_gui.hpp:114
int m_map_width
Width of the map in pixels on the screen, need not be a power of 2.
Definition: race_gui.hpp:64
std::vector< float > m_rank_animation_duration
How long the rank animation has been shown.
Definition: race_gui.hpp:111
This is the base class for all cameras.
Definition: camera.hpp:48
An abstract interface for the actual karts.
Definition: abstract_kart.hpp:61
int m_map_height
Height of the map in pixels on the screen, need not be a power of 2.
Definition: race_gui.hpp:67
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:87