Fixed lightning being multiplied in multiplayer mode

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@8174 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2011-04-01 14:41:18 +00:00
parent 29b19703da
commit c54809ebe2
8 changed files with 41 additions and 27 deletions

View File

@ -39,9 +39,11 @@ const float TEXTURE_X_TILES[RAIN_RING_COUNT] = { 2.0f, 2.5f, 3.5f, 5.0f, 8.0f };
const float TEXTURE_Y_TILES[RAIN_RING_COUNT] = { 8.0f, 7.0f, 6.0f, 4.0f, 4.0f };
Rain::Rain(irr::scene::ICameraSceneNode* camera, irr::scene::ISceneNode* parent)
Rain::Rain(irr::scene::ICameraSceneNode* camera, irr::scene::ISceneNode* parent, bool lightning)
{
m_thunder_sound = sfx_manager->createSoundSource("thunder");
m_lightning = lightning;
if (lightning) m_thunder_sound = sfx_manager->createSoundSource("thunder");
Material* m = material_manager->getMaterial("rain.png");
assert(m != NULL);
@ -120,7 +122,7 @@ Rain::~Rain()
m_node[r]->remove();
}
if (m_thunder_sound) sfx_manager->deleteSFX(m_thunder_sound);
if (m_lightning && m_thunder_sound != NULL) sfx_manager->deleteSFX(m_thunder_sound);
}
// ----------------------------------------------------------------------------
@ -140,20 +142,23 @@ void Rain::update(float dt)
matrix.setTextureTranslate(m_x[m], m_y[m]);
}
m_next_lightning -= dt;
if (m_next_lightning < 0.0f)
if (m_lightning)
{
RaceGUIBase* gui_base = World::getWorld()->getRaceGUI();
RaceGUI* gui = dynamic_cast<RaceGUI*>(gui_base);
if (gui != NULL)
{
gui->lightning();
if (m_thunder_sound) m_thunder_sound->play();
}
m_next_lightning -= dt;
RandomGenerator g;
m_next_lightning = 35 + (float)g.get(35);
if (m_next_lightning < 0.0f)
{
RaceGUIBase* gui_base = World::getWorld()->getRaceGUI();
RaceGUI* gui = dynamic_cast<RaceGUI*>(gui_base);
if (gui != NULL)
{
gui->lightning();
if (m_thunder_sound) m_thunder_sound->play();
}
RandomGenerator g;
m_next_lightning = 35 + (float)g.get(35);
}
}
} // update

View File

@ -37,10 +37,11 @@ class Rain
float m_y[RAIN_RING_COUNT];
float m_next_lightning;
bool m_lightning;
SFXBase* m_thunder_sound;
public:
Rain(irr::scene::ICameraSceneNode* camera, irr::scene::ISceneNode* parent);
Rain(irr::scene::ICameraSceneNode* camera, irr::scene::ISceneNode* parent, bool lightning);
~Rain();
void update(float dt);

View File

@ -63,9 +63,10 @@
* \param ident The identifier for the kart model to use.
* \param position The position (or rank) for this kart (between 1 and
* number of karts). This is used to determine the start position.
* \param is_first_kart Indicates whether this is the first *player* kart
* \param init_transform The initial position and rotation for this kart.
*/
Kart::Kart (const std::string& ident, Track* track, int position,
Kart::Kart (const std::string& ident, Track* track, int position, bool is_first_kart,
const btTransform& init_transform, RaceManager::KartType type)
: TerrainInfo(1),
Moveable(), EmergencyAnimation(this), MaxSpeed(this), m_powerup(this)
@ -172,7 +173,7 @@ Kart::Kart (const std::string& ident, Track* track, int position,
animations = false;
}
loadData(type, track, animations);
loadData(type, is_first_kart, track, animations);
reset();
} // Kart
@ -1656,13 +1657,14 @@ void Kart::updatePhysics(float dt)
/** Attaches the right model, creates the physics and loads all special
* effects (particle systems etc.)
*/
void Kart::loadData(RaceManager::KartType type, Track* track, bool animatedModel)
void Kart::loadData(RaceManager::KartType type, bool is_first_kart, Track* track, bool animatedModel)
{
if (animatedModel)
{
scene::ISceneNode* staticModel = m_kart_model->attachModel(false);
scene::ISceneNode* animatedModelNode = m_kart_model->attachModel(animatedModel);
LODNode* node = new LODNode(irr_driver->getSceneManager()->getRootSceneNode(), irr_driver->getSceneManager());
LODNode* node = new LODNode(irr_driver->getSceneManager()->getRootSceneNode(),
irr_driver->getSceneManager());
node->add(50, animatedModelNode, true);
node->add(500, staticModel, true);
m_node = node;
@ -1720,7 +1722,7 @@ void Kart::loadData(RaceManager::KartType type, Track* track, bool animatedModel
type == RaceManager::KT_PLAYER)
{
// camera not yet available at this point
m_rain = new Rain(NULL, NULL);
m_rain = new Rain(NULL, NULL, is_first_kart);
}
Vec3 position(0, getKartHeight()*0.35f, -getKartLength()*0.35f);

View File

@ -191,12 +191,13 @@ protected:
KartModel* m_kart_model;
public:
Kart(const std::string& ident, Track* track, int position,
Kart(const std::string& ident, Track* track, int position, bool is_first_kart,
const btTransform& init_transform, RaceManager::KartType type);
virtual ~Kart();
unsigned int getWorldKartId() const { return m_world_kart_id; }
void setWorldKartId(unsigned int n) { m_world_kart_id=n; }
void loadData(RaceManager::KartType type, Track* track, bool animatedModel);
void loadData(RaceManager::KartType type, bool is_first_kart, Track* track,
bool animatedModel);
virtual void updateGraphics(const Vec3& off_xyz,
const btQuaternion& off_rotation);
void createPhysics ();

View File

@ -91,7 +91,7 @@ Kart *ProfileWorld::createKart(const std::string &kart_ident, int index,
race_manager->getNumberOfKarts()-1);
btTransform init_pos = m_track->getStartTransform(index);
Kart *new_kart = new Kart(prof_kart_id, m_track, index+1, init_pos, RaceManager::KT_AI);
Kart *new_kart = new Kart(prof_kart_id, m_track, index+1, false, init_pos, RaceManager::KT_AI);
Controller *controller = loadAIController(new_kart);
new_kart->setController(controller);

View File

@ -179,7 +179,8 @@ Kart *World::createKart(const std::string &kart_ident, int index,
{
int position = index+1;
btTransform init_pos = m_track->getStartTransform(index);
Kart *new_kart = new Kart(kart_ident, m_track, position, init_pos, race_manager->getKartType(index));
Kart *new_kart = new Kart(kart_ident, m_track, position, (local_player_id == 0), init_pos,
race_manager->getKartType(index));
Controller *controller = NULL;
switch(race_manager->getKartType(index))
{

View File

@ -27,7 +27,7 @@
NetworkKart::NetworkKart(const std::string &kart_name, Track* track, int position,
const btTransform &init_transform, int global_player_id,
RaceManager::KartType type)
: Kart(kart_name, track, position, init_transform, type)
: Kart(kart_name, track, position, false, init_transform, type)
{
m_global_player_id = global_player_id;
} // NetworkKart

View File

@ -373,7 +373,11 @@ void RaceGUI::renderPlayerView(const Kart *kart)
if (m_lightning > 0.0f)
{
GLint glviewport[4];
glGetIntegerv(GL_VIEWPORT, glviewport);
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);