stk-code_catmod/src/karts/skidding_properties.cpp
2015-03-30 11:42:50 +11:00

135 lines
6.0 KiB
C++

//
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2012-2015 Joerg Henrichs
//
// 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 "karts/skidding_properties.hpp"
#include "io/xml_node.hpp"
#include "utils/log.hpp"
#include <string.h>
float SkiddingProperties::UNDEFINED = -99.9f;
SkiddingProperties::SkiddingProperties()
{
m_skid_increase = UNDEFINED;
m_skid_decrease = UNDEFINED;
m_skid_max = UNDEFINED;
m_time_till_max_skid = UNDEFINED;
m_skid_visual = UNDEFINED;
m_skid_visual_time = UNDEFINED;
m_skid_revert_visual_time = UNDEFINED;
m_post_skid_rotate_factor = UNDEFINED;
m_skid_reduce_turn_min = UNDEFINED;
m_skid_reduce_turn_max = UNDEFINED;
m_physical_jump_time = UNDEFINED;
m_graphical_jump_time = UNDEFINED;
m_min_skid_speed = UNDEFINED;
m_has_skidmarks = true;
m_skid_bonus_time.clear();
m_skid_bonus_speed.clear();
m_skid_time_till_bonus.clear();
m_skid_bonus_force.clear();
} // SkiddingProperties
// ----------------------------------------------------------------------------
void SkiddingProperties::load(const XMLNode *skid_node)
{
skid_node->get("increase", &m_skid_increase );
skid_node->get("decrease", &m_skid_decrease );
skid_node->get("max", &m_skid_max );
skid_node->get("time-till-max", &m_time_till_max_skid );
skid_node->get("visual", &m_skid_visual );
skid_node->get("visual-time", &m_skid_visual_time );
skid_node->get("revert-visual-time", &m_skid_revert_visual_time);
skid_node->get("post-skid-rotate-factor",&m_post_skid_rotate_factor);
skid_node->get("reduce-turn-min", &m_skid_reduce_turn_min );
skid_node->get("reduce-turn-max", &m_skid_reduce_turn_max );
skid_node->get("enable", &m_has_skidmarks );
skid_node->get("bonus-time", &m_skid_bonus_time );
skid_node->get("bonus-speed", &m_skid_bonus_speed );
skid_node->get("time-till-bonus", &m_skid_time_till_bonus );
skid_node->get("bonus-force", &m_skid_bonus_force );
skid_node->get("physical-jump-time", &m_physical_jump_time );
skid_node->get("graphical-jump-time", &m_graphical_jump_time );
skid_node->get("min-speed", &m_min_skid_speed );
} // load
// ----------------------------------------------------------------------------
void SkiddingProperties::checkAllSet(const std::string &filename) const
{
#define CHECK_NEG( a,strA) if(a<=UNDEFINED) { \
Log::fatal("Skidding_Properties", "Missing default value for '%s'"\
"in '%s'.", \
strA,filename.c_str()); \
}
CHECK_NEG(m_skid_increase, "skid increase" );
CHECK_NEG(m_skid_decrease, "skid decrease" );
CHECK_NEG(m_skid_max, "skid max" );
CHECK_NEG(m_time_till_max_skid, "skid time-till-max" );
CHECK_NEG(m_skid_visual, "skid visual" );
CHECK_NEG(m_skid_visual_time, "skid visual-time" );
CHECK_NEG(m_skid_revert_visual_time, "skid revert-visual-time" );
CHECK_NEG(m_post_skid_rotate_factor, "skid post-skid-rotate-factor" );
CHECK_NEG(m_skid_reduce_turn_min, "skid reduce-turn-min" );
CHECK_NEG(m_skid_reduce_turn_max, "skid reduce-turn-max" );
CHECK_NEG(m_physical_jump_time, "skid physical-jump-time" );
CHECK_NEG(m_graphical_jump_time, "skid graphical-jump-time" );
CHECK_NEG(m_min_skid_speed, "skid min-speed" );
if(m_skid_time_till_bonus.size()==0)
Log::error("Skidding_Properties", "Warning: no skid time declared,"
"can be ignored.");
if(m_skid_time_till_bonus.size()!=m_skid_bonus_speed.size())
{
Log::fatal("Skidding_Properties", "Warning: skid time-till-bonus"
"and bonus-speed\n must have same number of elements.");
}
if(m_skid_time_till_bonus.size()!=m_skid_bonus_time.size())
{
Log::fatal("Skidding_Properties", "Warning: skid time-till-bonus"
"and bonus-time must\n have same number of elements.");
}
if(m_skid_time_till_bonus.size()!=m_skid_bonus_force.size())
{
Log::fatal("Skidding_Properties", "Warning: skid time-till-bonus"
"and bonus-force must\n have same number of elements.");
}
for(unsigned int i=0; i<m_skid_time_till_bonus.size()-1; i++)
{
if(m_skid_time_till_bonus[i]>=m_skid_time_till_bonus[i+1])
{
Log::fatal("Skidding_Properties", "Warning: skid time-till-bonus"
"not sorted.");
}
} // for i
} // check
// ----------------------------------------------------------------------------
void SkiddingProperties::copyFrom(const SkiddingProperties *destination)
{
*this = *destination;
} // copyFrom
// ----------------------------------------------------------------------------
/* EOF */