Make water speed customizable

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@10791 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
auria 2012-02-02 16:37:30 +00:00
parent 1032f9654d
commit 6dcc313611
2 changed files with 31 additions and 6 deletions

View File

@ -75,28 +75,34 @@ public:
class WaterShaderProvider : public video::IShaderConstantSetCallBack class WaterShaderProvider : public video::IShaderConstantSetCallBack
{ {
float m_dx_1, m_dy_1, m_dx_2, m_dy_2; float m_dx_1, m_dy_1, m_dx_2, m_dy_2;
float m_water_shader_speed_1;
float m_water_shader_speed_2;
public: public:
LEAK_CHECK() LEAK_CHECK()
WaterShaderProvider() WaterShaderProvider(float water_shader_speed_1,
float water_shader_speed_2)
{ {
m_dx_1 = 0.0f; m_dx_1 = 0.0f;
m_dy_1 = 0.0f; m_dy_1 = 0.0f;
m_dx_2 = 0.0f; m_dx_2 = 0.0f;
m_dy_2 = 0.0f; m_dy_2 = 0.0f;
m_water_shader_speed_1 = water_shader_speed_1/100.0f;
m_water_shader_speed_2 = water_shader_speed_2/100.0f;
} }
virtual void OnSetConstants( virtual void OnSetConstants(
irr::video::IMaterialRendererServices *services, irr::video::IMaterialRendererServices *services,
s32 userData) s32 userData)
{ {
m_dx_1 += GUIEngine::getLatestDt()/15.0f; m_dx_1 += GUIEngine::getLatestDt()*m_water_shader_speed_1;
m_dy_1 += GUIEngine::getLatestDt()/15.0f; m_dy_1 += GUIEngine::getLatestDt()*m_water_shader_speed_1;
m_dx_2 += GUIEngine::getLatestDt()/25.0f; m_dx_2 += GUIEngine::getLatestDt()*m_water_shader_speed_2;
m_dy_2 -= GUIEngine::getLatestDt()/25.0f; m_dy_2 -= GUIEngine::getLatestDt()*m_water_shader_speed_2;
if (m_dx_1 > 1.0f) m_dx_1 -= 1.0f; if (m_dx_1 > 1.0f) m_dx_1 -= 1.0f;
if (m_dy_1 > 1.0f) m_dy_1 -= 1.0f; if (m_dy_1 > 1.0f) m_dy_1 -= 1.0f;
@ -429,6 +435,11 @@ Material::Material(const XMLNode *node, int index)
} }
node->get("water-shader", &m_water_shader); node->get("water-shader", &m_water_shader);
if (m_water_shader)
{
node->get("water-shader-speed-1", &m_water_shader_speed_1);
node->get("water-shader-speed-2", &m_water_shader_speed_2);
}
// Terrain-specifc sound effect // Terrain-specifc sound effect
const unsigned int children_count = node->getNumNodes(); const unsigned int children_count = node->getNumNodes();
@ -505,6 +516,8 @@ void Material::init(unsigned int index)
m_add = false; m_add = false;
m_disable_z_write = false; m_disable_z_write = false;
m_water_shader = false; m_water_shader = false;
m_water_shader_speed_1 = 6.6667f;
m_water_shader_speed_2 = 4.0f;
m_fog = true; m_fog = true;
m_max_speed_fraction = 1.0f; m_max_speed_fraction = 1.0f;
m_slowdown_time = 1.0f; m_slowdown_time = 1.0f;
@ -987,7 +1000,8 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
{ {
if (m_shaders[WATER_SHADER] == NULL) if (m_shaders[WATER_SHADER] == NULL)
{ {
m_shaders[WATER_SHADER] = new WaterShaderProvider(); m_shaders[WATER_SHADER] = new WaterShaderProvider(m_water_shader_speed_1,
m_water_shader_speed_2);
} }
m->setTexture(1, irr_driver->getTexture(file_manager->getTextureFile("waternormals.jpg"))); m->setTexture(1, irr_driver->getTexture(file_manager->getTextureFile("waternormals.jpg")));

View File

@ -107,7 +107,18 @@ private:
bool m_zipper; bool m_zipper;
/** If a kart is rescued when driving on this surface. */ /** If a kart is rescued when driving on this surface. */
bool m_drive_reset; bool m_drive_reset;
/** If the water shader (simulating wave effects and reflexions) is enabled */
bool m_water_shader; bool m_water_shader;
/** Speed of the 'main' wave in the water shader. Only used if
m_water_shader is true */
float m_water_shader_speed_1;
/** Speed of the 'secondary' waves in the water shader. Only used if
m_water_shader is true */
float m_water_shader_speed_2;
/** If a kart is rescued when crashing into this surface. */ /** If a kart is rescued when crashing into this surface. */
CollisionReaction m_collision_reaction; CollisionReaction m_collision_reaction;