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:
parent
29b19703da
commit
c54809ebe2
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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 ();
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user