diff --git a/data/stk_config.xml b/data/stk_config.xml
index cdc49e1aa..0ca524422 100644
--- a/data/stk_config.xml
+++ b/data/stk_config.xml
@@ -24,9 +24,6 @@
-
-
-
+ speed due to nitro fades out.
+ max: How much nitro a kart can store.
+ -->
+ max-speed-increase="5" duration="1" fade-out-time="2" max="16"/>
-
+
@@ -345,13 +347,5 @@
-
-
-
diff --git a/src/karts/controller/ai_base_controller.cpp b/src/karts/controller/ai_base_controller.cpp
index 50fa169c5..a9e4aed35 100644
--- a/src/karts/controller/ai_base_controller.cpp
+++ b/src/karts/controller/ai_base_controller.cpp
@@ -34,14 +34,14 @@ AIBaseController::AIBaseController(AbstractKart *kart,
StateManager::ActivePlayer *player)
: Controller(kart, player)
{
- m_kart = kart;
- m_kart_length = m_kart->getKartLength();
- m_kart_width = m_kart->getKartWidth();
+ m_kart = kart;
+ m_kart_length = m_kart->getKartLength();
+ m_kart_width = m_kart->getKartWidth();
if(race_manager->getMinorMode()!=RaceManager::MINOR_MODE_3_STRIKES)
{
- m_world = dynamic_cast(World::getWorld());
- m_track = m_world->getTrack();
+ m_world = dynamic_cast(World::getWorld());
+ m_track = m_world->getTrack();
computePath();
}
else
diff --git a/src/karts/controller/ai_base_controller.hpp b/src/karts/controller/ai_base_controller.hpp
index 1a17490de..5c7cc014f 100644
--- a/src/karts/controller/ai_base_controller.hpp
+++ b/src/karts/controller/ai_base_controller.hpp
@@ -21,6 +21,7 @@
#include "karts/controller/controller.hpp"
#include "states_screens/state_manager.hpp"
+class AIProperties;
class LinearWorld;
class QuadGraph;
class Track;
@@ -61,6 +62,9 @@ protected:
/** Keep a pointer to world. */
LinearWorld *m_world;
+ /** A pointer to the AI properties for this kart. */
+ const AIProperties *m_ai_properties;
+
/** The current node the kart is on. This can be different from the value
* in LinearWorld, since it takes the chosen path of the AI into account
* (e.g. the closest point in LinearWorld might be on a branch not
diff --git a/src/karts/controller/player_controller.cpp b/src/karts/controller/player_controller.cpp
index db0413122..fc2c3edfa 100644
--- a/src/karts/controller/player_controller.cpp
+++ b/src/karts/controller/player_controller.cpp
@@ -29,6 +29,7 @@
#include "items/item.hpp"
#include "items/powerup.hpp"
#include "karts/abstract_kart.hpp"
+#include "karts/kart_properties.hpp"
#include "karts/rescue_animation.hpp"
#include "modes/world.hpp"
#include "race/history.hpp"
@@ -426,8 +427,8 @@ void PlayerController::handleZipper(bool play_sound)
*/
void PlayerController::collectedItem(const Item &item, int add_info, float old_energy)
{
- if (old_energy < MAX_NITRO &&
- m_kart->getEnergy() == MAX_NITRO)
+ if (old_energy < m_kart->getKartProperties()->getNitroMax() &&
+ m_kart->getEnergy() == m_kart->getKartProperties()->getNitroMax())
{
m_full_sound->play();
}
diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp
index 8353d63f7..5741698ad 100644
--- a/src/karts/kart.cpp
+++ b/src/karts/kart.cpp
@@ -865,8 +865,8 @@ void Kart::collectedItem(Item *item, int add_info)
race_state->itemCollected(getWorldKartId(), item->getItemId());
}
- if ( m_collected_energy > MAX_NITRO )
- m_collected_energy = MAX_NITRO;
+ if ( m_collected_energy > m_kart_properties->getNitroMax())
+ m_collected_energy = m_kart_properties->getNitroMax();
m_controller->collectedItem(*item, add_info, old_energy);
} // collectedItem
diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp
index ab230e788..46dd0559d 100644
--- a/src/karts/kart_properties.cpp
+++ b/src/karts/kart_properties.cpp
@@ -65,9 +65,8 @@ KartProperties::KartProperties(const std::string &filename)
// if everything is defined properly.
m_mass = m_brake_factor = m_engine_power[0] = m_engine_power[1] =
m_engine_power[2] = m_max_speed[0] = m_max_speed[1] = m_max_speed[2] =
- m_time_full_steer = m_time_full_steer_ai =
- m_nitro_consumption = m_nitro_engine_force =
- m_nitro_small_container = m_nitro_big_container =
+ m_time_full_steer = m_nitro_consumption = m_nitro_engine_force =
+ m_nitro_small_container = m_nitro_big_container = m_nitro_max =
m_nitro_max_speed_increase = m_nitro_duration = m_nitro_fade_out_time =
m_suspension_stiffness = m_wheel_damping_relaxation = m_wheel_base =
m_wheel_damping_compression = m_friction_slip = m_roll_influence =
@@ -92,7 +91,7 @@ KartProperties::KartProperties(const std::string &filename)
m_camera_distance = m_camera_forward_up_angle =
m_camera_backward_up_angle = m_explosion_invulnerability_time =
m_rescue_time = m_rescue_height = m_explosion_time =
- m_explosion_radius = m_ai_steering_variation =
+ m_explosion_radius =
m_swatter_distance2 = m_swatter_duration = m_squash_slowdown =
m_squash_duration = m_downward_impulse_factor = UNDEFINED;
@@ -141,8 +140,8 @@ void KartProperties::copyFrom(const KartProperties *source)
// So all pointer variables need to be separately allocated and assigned.
m_skidding_properties = new SkiddingProperties();
assert(m_skidding_properties);
- *m_skidding_properties = *source->m_skidding_properties;
-} // copy
+ *m_skidding_properties = *source->m_skidding_properties;
+} // copyFrom
//-----------------------------------------------------------------------------
/** Loads the kart properties from a file.
@@ -296,7 +295,7 @@ void KartProperties::getAllData(const XMLNode * root)
nitro_node->get("engine-force", &m_nitro_engine_force );
nitro_node->get("duration", &m_nitro_duration );
nitro_node->get("fade-out-time", &m_nitro_fade_out_time );
-
+ nitro_node->get("max", &m_nitro_max );
}
if(const XMLNode *rescue_node = root->getNode("rescue"))
@@ -314,10 +313,6 @@ void KartProperties::getAllData(const XMLNode * root)
&m_explosion_invulnerability_time);
}
- if(const XMLNode *ai_node = root->getNode("ai"))
- {
- ai_node->get("steering-variation", &m_ai_steering_variation );
- }
if(const XMLNode *skid_node = root->getNode("skid"))
{
m_skidding_properties->load(skid_node);
@@ -661,6 +656,7 @@ void KartProperties::checkAllSet(const std::string &filename)
CHECK_NEG(m_nitro_engine_force, "nitro engine-force" );
CHECK_NEG(m_nitro_duration, "nitro duration" );
CHECK_NEG(m_nitro_fade_out_time, "nitro fade-out-time" );
+ CHECK_NEG(m_nitro_max, "nitro max" );
CHECK_NEG(m_swatter_distance2, "swatter distance" );
CHECK_NEG(m_swatter_duration, "swatter duration" );
CHECK_NEG(m_squash_duration, "squash-duration" );
@@ -673,7 +669,6 @@ void KartProperties::checkAllSet(const std::string &filename)
CHECK_NEG(m_explosion_invulnerability_time,
"explosion invulnerability-time");
CHECK_NEG(m_explosion_radius, "explosion radius" );
- CHECK_NEG(m_ai_steering_variation, "ai steering-variation" );
m_skidding_properties->checkAllSet(filename);
} // checkAllSet
diff --git a/src/karts/kart_properties.hpp b/src/karts/kart_properties.hpp
index 1639bb86e..1bd12e32d 100644
--- a/src/karts/kart_properties.hpp
+++ b/src/karts/kart_properties.hpp
@@ -207,6 +207,8 @@ private:
/** Duration during which the increased maximum speed
* due to nitro fades out. */
float m_nitro_fade_out_time;
+ /** Maximum nitro a kart can collect. */
+ float m_nitro_max;
/** Square of the maximum distance a swatter can operate. */
float m_swatter_distance2;
/** How long the swatter lasts. */
@@ -295,14 +297,6 @@ private:
/** How long the slip stream speed increase will gradually be reduced. */
float m_slipstream_fade_out_time;
-
- /** Make the AI to steer at slightly different points to make it less
- * likely that the AI creates 'trains' - the kart behind getting
- * slipstream. The variation should be a value between 0 (no variation,
- * all karts steer to the same driveline points) and 1 (karts will aim
- * all the way to the very edge of the drivelines). */
- float m_ai_steering_variation;
-
float m_camera_distance; /**< Distance of normal camera from kart.*/
float m_camera_forward_up_angle; /**< Up angle of the camera in relation to
the pitch of the kart when driving
@@ -485,6 +479,9 @@ public:
* due to nitro fades out. */
float getNitroFadeOutTime () const {return m_nitro_fade_out_time; }
+ /** Returns the maximum amount of nitro a kart can store. */
+ float getNitroMax () const {return m_nitro_max; }
+
/** Returns a shift of the center of mass (lowering the center of mass
* makes the karts more stable. */
const Vec3&getGravityCenterShift() const {return m_gravity_center_shift; }
@@ -643,9 +640,6 @@ public:
float getCameraBackwardUpAngle () const
{return m_camera_backward_up_angle; }
- /** Returns AI steering variation value. */
- float getAISteeringVariation () const {return m_ai_steering_variation; }
-
/** Returns the full path where the files for this kart are stored. */
const std::string& getKartDir () const {return m_root; }
diff --git a/src/karts/moveable.hpp b/src/karts/moveable.hpp
index af8c211a4..ebfdce722 100644
--- a/src/karts/moveable.hpp
+++ b/src/karts/moveable.hpp
@@ -34,8 +34,6 @@ using namespace irr;
class Material;
-const int MAX_NITRO = 16;
-
/**
* \ingroup karts
*/
diff --git a/src/states_screens/minimal_race_gui.cpp b/src/states_screens/minimal_race_gui.cpp
index fdfea5ac9..6ba52b66b 100644
--- a/src/states_screens/minimal_race_gui.cpp
+++ b/src/states_screens/minimal_race_gui.cpp
@@ -368,7 +368,8 @@ void MinimalRaceGUI::drawEnergyMeter(const AbstractKart *kart,
const core::recti &viewport,
const core::vector2df &scaling)
{
- float state = (float)(kart->getEnergy()) / MAX_NITRO;
+ float state = (float)(kart->getEnergy())
+ / kart->getKartProperties()->getNitroMax();
if (state < 0.0f) state = 0.0f;
else if (state > 1.0f) state = 1.0f;
@@ -396,7 +397,8 @@ void MinimalRaceGUI::drawEnergyMeter(const AbstractKart *kart,
// ------
if (race_manager->getCoinTarget() > 0)
{
- float coin_target = (float)race_manager->getCoinTarget() / MAX_NITRO;
+ float coin_target = (float)race_manager->getCoinTarget()
+ / kart->getKartProperties()->getNitroMax();
const int EMPTY_TOP_PIXELS = 4;
const int EMPTY_BOTTOM_PIXELS = 3;
diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp
index 1ecd5f024..70edeb77c 100644
--- a/src/states_screens/race_gui.cpp
+++ b/src/states_screens/race_gui.cpp
@@ -39,6 +39,7 @@ using namespace irr;
#include "items/powerup_manager.hpp"
#include "karts/abstract_kart.hpp"
#include "karts/controller/controller.hpp"
+#include "karts/kart_properties.hpp"
#include "karts/kart_properties_manager.hpp"
#include "modes/follow_the_leader.hpp"
#include "modes/linear_world.hpp"
@@ -326,7 +327,8 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart,
const core::recti &viewport,
const core::vector2df &scaling)
{
- float state = (float)(kart->getEnergy()) / MAX_NITRO;
+ float state = (float)(kart->getEnergy())
+ / kart->getKartProperties()->getNitroMax();
if (state < 0.0f) state = 0.0f;
else if (state > 1.0f) state = 1.0f;
@@ -346,7 +348,8 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart,
// Target
if (race_manager->getCoinTarget() > 0)
{
- float coin_target = (float)race_manager->getCoinTarget() / MAX_NITRO;
+ float coin_target = (float)race_manager->getCoinTarget()
+ / kart->getKartProperties()->getNitroMax();
const int EMPTY_TOP_PIXELS = 4;
const int EMPTY_BOTTOM_PIXELS = 3;
diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp
index 3f1d6c67c..ae009114a 100644
--- a/src/states_screens/race_gui_overworld.cpp
+++ b/src/states_screens/race_gui_overworld.cpp
@@ -468,7 +468,8 @@ void RaceGUIOverworld::drawEnergyMeter(int x, int y, const AbstractKart *kart,
const core::recti &viewport,
const core::vector2df &scaling)
{
- float state = (float)(kart->getEnergy()) / MAX_NITRO;
+ float state = (float)(kart->getEnergy())
+ / kart->getKartProperties()->getNitroMax();
if (state < 0.0f) state = 0.0f;
else if (state > 1.0f) state = 1.0f;
@@ -488,7 +489,8 @@ void RaceGUIOverworld::drawEnergyMeter(int x, int y, const AbstractKart *kart,
// Target
if (race_manager->getCoinTarget() > 0)
{
- float coin_target = (float)race_manager->getCoinTarget() / MAX_NITRO;
+ float coin_target = (float)race_manager->getCoinTarget()
+ / kart->getKartProperties()->getNitroMax();
const int EMPTY_TOP_PIXELS = 4;
const int EMPTY_BOTTOM_PIXELS = 3;