Added lighning support to minimal race gui.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@8281 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
@@ -353,6 +353,7 @@ supertuxkart_SOURCES = \
|
||||
states_screens/options_screen_video.hpp \
|
||||
states_screens/addons_screen.cpp \
|
||||
states_screens/addons_screen.hpp \
|
||||
states_screens/race_gui_base.cpp \
|
||||
states_screens/race_gui_base.hpp \
|
||||
states_screens/race_gui.cpp \
|
||||
states_screens/race_gui.hpp \
|
||||
|
||||
@@ -149,10 +149,9 @@ void Rain::update(float dt)
|
||||
if (m_next_lightning < 0.0f)
|
||||
{
|
||||
RaceGUIBase* gui_base = World::getWorld()->getRaceGUI();
|
||||
RaceGUI* gui = dynamic_cast<RaceGUI*>(gui_base);
|
||||
if (gui != NULL)
|
||||
if (gui_base != NULL)
|
||||
{
|
||||
gui->lightning();
|
||||
gui_base->doLightning();
|
||||
if (m_thunder_sound) m_thunder_sound->play();
|
||||
}
|
||||
|
||||
|
||||
@@ -1058,6 +1058,10 @@
|
||||
RelativePath="..\..\states_screens\race_gui.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\states_screens\race_gui_base.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\states_screens\race_result_gui.cpp"
|
||||
>
|
||||
|
||||
@@ -271,6 +271,7 @@ void MinimalRaceGUI::createRegularPolygon(unsigned int n, float radius,
|
||||
*/
|
||||
void MinimalRaceGUI::renderGlobal(float dt)
|
||||
{
|
||||
RaceGUIBase::renderGlobal(dt);
|
||||
cleanupMessages(dt);
|
||||
|
||||
// Special case : when 3 players play, use 4th window to display such
|
||||
@@ -359,6 +360,7 @@ void MinimalRaceGUI::renderPlayerView(const Kart *kart)
|
||||
drawEnergyMeter (kart, viewport, scaling);
|
||||
drawRankLap (info, kart, viewport);
|
||||
|
||||
RaceGUIBase::renderPlayerView(kart);
|
||||
} // renderPlayerView
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -49,12 +49,6 @@ using namespace irr;
|
||||
#include "utils/string_utils.hpp"
|
||||
#include "utils/translation.hpp"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <OpenGL/gl.h>
|
||||
#else
|
||||
#include <GL/gl.h>
|
||||
#endif
|
||||
|
||||
/** The constructor is called before anything is attached to the scene node.
|
||||
* So rendering to a texture can be done here. But world is not yet fully
|
||||
* created, so only the race manager can be accessed safely.
|
||||
@@ -73,7 +67,6 @@ RaceGUI::RaceGUI()
|
||||
m_map_height = (int)(100.0f * scaling);
|
||||
m_map_left = (int)( 10.0f * scaling);
|
||||
m_map_bottom = (int)( 10.0f * scaling);
|
||||
m_lightning = 0.0f;
|
||||
|
||||
// Minimap is also rendered bigger via OpenGL, so find power-of-two again
|
||||
const int map_texture = 2 << ((int) ceil(1.0 + log(128.0 * scaling)));
|
||||
@@ -274,10 +267,9 @@ void RaceGUI::createRegularPolygon(unsigned int n, float radius,
|
||||
*/
|
||||
void RaceGUI::renderGlobal(float dt)
|
||||
{
|
||||
RaceGUIBase::renderGlobal(dt);
|
||||
cleanupMessages(dt);
|
||||
|
||||
if (m_lightning > 0.0f) m_lightning -= dt;
|
||||
|
||||
|
||||
// Special case : when 3 players play, use 4th window to display such
|
||||
// stuff (but we must clear it)
|
||||
if (race_manager->getNumLocalPlayers() == 3 &&
|
||||
@@ -370,59 +362,7 @@ void RaceGUI::renderPlayerView(const Kart *kart)
|
||||
drawSpeedAndEnergy (kart, viewport, scaling);
|
||||
drawRankLap (info, kart, viewport);
|
||||
|
||||
if (m_lightning > 0.0f)
|
||||
{
|
||||
GLint glviewport[4];
|
||||
glviewport[0] = viewport.UpperLeftCorner.X;
|
||||
glviewport[1] = viewport.UpperLeftCorner.Y;
|
||||
glviewport[2] = viewport.LowerRightCorner.X;
|
||||
glviewport[3] = viewport.LowerRightCorner.Y;
|
||||
//glGetIntegerv(GL_VIEWPORT, glviewport);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_ONE, GL_ONE);
|
||||
glColor4f(0.7f*m_lightning, 0.7f*m_lightning, 0.7f*std::min(1.0f, m_lightning*1.5f), 1.0f);
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
glVertex3d(glviewport[0],glviewport[1],0);
|
||||
glVertex3d(glviewport[0],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[1],0);
|
||||
glEnd();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
#if 0 // Rainy look, off, TODO: needs to be settable per track
|
||||
else
|
||||
{
|
||||
GLint glviewport[4];
|
||||
glGetIntegerv(GL_VIEWPORT, glviewport);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
|
||||
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
glVertex3d(glviewport[0],glviewport[1],0);
|
||||
glVertex3d(glviewport[0],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[1],0);
|
||||
glEnd();
|
||||
glEnable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
|
||||
RaceGUIBase::renderPlayerView(kart);
|
||||
} // renderPlayerView
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -81,9 +81,7 @@ private:
|
||||
Material *m_plunger_face;
|
||||
typedef std::vector<TimedMessage> AllMessageType;
|
||||
AllMessageType m_messages;
|
||||
|
||||
float m_lightning;
|
||||
|
||||
|
||||
/** A texture with all mini dots to be displayed in the minimap for all karts. */
|
||||
video::ITexture *m_marker;
|
||||
|
||||
@@ -206,7 +204,6 @@ public:
|
||||
virtual const core::dimension2du getMiniMapSize() const
|
||||
{ return core::dimension2du(m_map_width, m_map_height); }
|
||||
|
||||
void lightning() { m_lightning = 1.0f; }
|
||||
}; // RaceGUI
|
||||
|
||||
#endif
|
||||
|
||||
107
src/states_screens/race_gui_base.cpp
Normal file
107
src/states_screens/race_gui_base.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
// $Id$
|
||||
//
|
||||
// SuperTuxKart - a fun racing game with go-kart
|
||||
// Copyright (C) 2004-2005 Steve Baker <sjbaker1@airmail.net>
|
||||
// Copyright (C) 2006 Joerg Henrichs, SuperTuxKart-Team, Steve Baker
|
||||
//
|
||||
// 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, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
#include "states_screens/race_gui_base.hpp"
|
||||
|
||||
#ifdef __APPLE__
|
||||
# include <OpenGL/gl.h>
|
||||
#else
|
||||
# define _WINSOCKAPI_
|
||||
# include <windows.h>
|
||||
# include <GL/gl.h>
|
||||
#endif
|
||||
|
||||
#include "karts/kart.hpp"
|
||||
|
||||
RaceGUIBase::RaceGUIBase()
|
||||
{
|
||||
m_lightning = 0.0f;
|
||||
|
||||
} // RaceGUIBase
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/** Updates lightning related information.
|
||||
*/
|
||||
void RaceGUIBase::renderGlobal(float dt)
|
||||
{
|
||||
if (m_lightning > 0.0f) m_lightning -= dt;
|
||||
|
||||
} // renderGlobal
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void RaceGUIBase::renderPlayerView(const Kart *kart)
|
||||
{
|
||||
const core::recti &viewport = kart->getCamera()->getViewport();
|
||||
|
||||
if (m_lightning > 0.0f)
|
||||
{
|
||||
GLint glviewport[4];
|
||||
glviewport[0] = viewport.UpperLeftCorner.X;
|
||||
glviewport[1] = viewport.UpperLeftCorner.Y;
|
||||
glviewport[2] = viewport.LowerRightCorner.X;
|
||||
glviewport[3] = viewport.LowerRightCorner.Y;
|
||||
//glGetIntegerv(GL_VIEWPORT, glviewport);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_ONE, GL_ONE);
|
||||
glColor4f(0.7f*m_lightning, 0.7f*m_lightning, 0.7f*std::min(1.0f, m_lightning*1.5f), 1.0f);
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
glVertex3d(glviewport[0],glviewport[1],0);
|
||||
glVertex3d(glviewport[0],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[1],0);
|
||||
glEnd();
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
#if 0 // Rainy look, off, TODO: needs to be settable per track
|
||||
else
|
||||
{
|
||||
GLint glviewport[4];
|
||||
glGetIntegerv(GL_VIEWPORT, glviewport);
|
||||
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
|
||||
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glBegin(GL_QUADS);
|
||||
|
||||
glVertex3d(glviewport[0],glviewport[1],0);
|
||||
glVertex3d(glviewport[0],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[3],0);
|
||||
glVertex3d(glviewport[2],glviewport[1],0);
|
||||
glEnd();
|
||||
glEnable(GL_BLEND);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // renderPlayerView
|
||||
@@ -52,14 +52,15 @@ public:
|
||||
int lap;
|
||||
}; // KartIconDisplayInfo
|
||||
|
||||
/** Delight in seconds between lightnings. */
|
||||
float m_lightning;
|
||||
|
||||
public:
|
||||
|
||||
bool m_enabled;
|
||||
|
||||
RaceGUIBase() {};
|
||||
RaceGUIBase();
|
||||
virtual ~RaceGUIBase() {};
|
||||
virtual void renderGlobal(float dt) = 0;
|
||||
virtual void renderPlayerView(const Kart *kart) = 0;
|
||||
virtual void addMessage(const irr::core::stringw &m, const Kart *kart,
|
||||
float time,
|
||||
int fonst_size,
|
||||
@@ -72,6 +73,12 @@ public:
|
||||
/** Returns the size of the texture on which to render the minimap to. */
|
||||
virtual const core::dimension2du
|
||||
getMiniMapSize() const = 0;
|
||||
virtual void renderGlobal(float dt);
|
||||
virtual void renderPlayerView(const Kart *kart);
|
||||
|
||||
/** Set the flag that a lightning should be shown. */
|
||||
void doLightning() { m_lightning = 1.0f; }
|
||||
|
||||
}; // RaceGUIBase
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user