Add a script that automates the code replacements
Various other things: - Try to use newer c++ features - Rename travelcm - Remove wheel radius
This commit is contained in:
parent
ec3083827d
commit
acbc629610
@ -113,7 +113,7 @@
|
|||||||
position of the physics raycast wheels relative to the center of
|
position of the physics raycast wheels relative to the center of
|
||||||
gravity. Default is to use the corners of the chassis to attach
|
gravity. Default is to use the corners of the chassis to attach
|
||||||
the wheels to. -->
|
the wheels to. -->
|
||||||
<wheels damping-relaxation="35" damping-compression="5" radius="0.25">
|
<wheels damping-relaxation="35" damping-compression="5">
|
||||||
<front-right position="0.38 0 0.6" />
|
<front-right position="0.38 0 0.6" />
|
||||||
<front-left position="-0.38 0 0.6" />
|
<front-left position="-0.38 0 0.6" />
|
||||||
<rear-right position="0.38 0 -0.6" />
|
<rear-right position="0.38 0 -0.6" />
|
||||||
|
@ -45,7 +45,11 @@ AbstractCharacteristic::ValueType AbstractCharacteristic::getType(Characteristic
|
|||||||
case CHARACTERISTIC_COUNT:
|
case CHARACTERISTIC_COUNT:
|
||||||
Log::fatal("AbstractCharacteristic::getType", "Can't get type of COUNT");
|
Log::fatal("AbstractCharacteristic::getType", "Can't get type of COUNT");
|
||||||
break;
|
break;
|
||||||
// Script-generated content get-prop first part
|
// Script-generated content generated by tools/create_kart_properties.py getProp1
|
||||||
|
// Please don't change the following tag. It will be automatically detected
|
||||||
|
// by the script and replace the contained content.
|
||||||
|
// To update the code, use tools/update_characteristics.py
|
||||||
|
/* <characteristics-start getProp1> */
|
||||||
case SUSPENSION_STIFFNESS:
|
case SUSPENSION_STIFFNESS:
|
||||||
return TYPE_FLOAT;
|
return TYPE_FLOAT;
|
||||||
case SUSPENSION_REST:
|
case SUSPENSION_REST:
|
||||||
@ -218,6 +222,7 @@ AbstractCharacteristic::ValueType AbstractCharacteristic::getType(Characteristic
|
|||||||
return TYPE_FLOAT;
|
return TYPE_FLOAT;
|
||||||
case SLIPSTREAM_FADE_OUT_TIME:
|
case SLIPSTREAM_FADE_OUT_TIME:
|
||||||
return TYPE_FLOAT;
|
return TYPE_FLOAT;
|
||||||
|
/* <characteristics-start getProp1> */
|
||||||
}
|
}
|
||||||
Log::fatal("AbstractCharacteristic::getType", "Unknown type");
|
Log::fatal("AbstractCharacteristic::getType", "Unknown type");
|
||||||
return TYPE_FLOAT;
|
return TYPE_FLOAT;
|
||||||
@ -229,13 +234,17 @@ std::string AbstractCharacteristic::getName(CharacteristicType type)
|
|||||||
{
|
{
|
||||||
case CHARACTERISTIC_COUNT:
|
case CHARACTERISTIC_COUNT:
|
||||||
return "CHARACTERISTIC_COUNT";
|
return "CHARACTERISTIC_COUNT";
|
||||||
// Script-generated content get-prop second part
|
// Script-generated content generated by tools/create_kart_properties.py getProp2
|
||||||
|
// Please don't change the following tag. It will be automatically detected
|
||||||
|
// by the script and replace the contained content.
|
||||||
|
// To update the code, use tools/update_characteristics.py
|
||||||
|
/* <characteristics-start getProp2> */
|
||||||
case SUSPENSION_STIFFNESS:
|
case SUSPENSION_STIFFNESS:
|
||||||
return "SUSPENSION_STIFFNESS";
|
return "SUSPENSION_STIFFNESS";
|
||||||
case SUSPENSION_REST:
|
case SUSPENSION_REST:
|
||||||
return "SUSPENSION_REST";
|
return "SUSPENSION_REST";
|
||||||
case SUSPENSION_TRAVEL_CM:
|
case SUSPENSION_TRAVEL:
|
||||||
return "SUSPENSION_TRAVEL_CM";
|
return "SUSPENSION_TRAVEL";
|
||||||
case SUSPENSION_EXP_SPRING_RESPONSE:
|
case SUSPENSION_EXP_SPRING_RESPONSE:
|
||||||
return "SUSPENSION_EXP_SPRING_RESPONSE";
|
return "SUSPENSION_EXP_SPRING_RESPONSE";
|
||||||
case SUSPENSION_MAX_FORCE:
|
case SUSPENSION_MAX_FORCE:
|
||||||
@ -278,8 +287,6 @@ std::string AbstractCharacteristic::getName(CharacteristicType type)
|
|||||||
return "WHEELS_DAMPING_RELAXATION";
|
return "WHEELS_DAMPING_RELAXATION";
|
||||||
case WHEELS_DAMPING_COMPRESSION:
|
case WHEELS_DAMPING_COMPRESSION:
|
||||||
return "WHEELS_DAMPING_COMPRESSION";
|
return "WHEELS_DAMPING_COMPRESSION";
|
||||||
case WHEELS_RADIUS:
|
|
||||||
return "WHEELS_RADIUS";
|
|
||||||
case WHEELS_POSITION:
|
case WHEELS_POSITION:
|
||||||
return "WHEELS_POSITION";
|
return "WHEELS_POSITION";
|
||||||
case CAMERA_DISTANCE:
|
case CAMERA_DISTANCE:
|
||||||
@ -402,12 +409,18 @@ std::string AbstractCharacteristic::getName(CharacteristicType type)
|
|||||||
return "SLIPSTREAM_MAX_SPEED_INCREASE";
|
return "SLIPSTREAM_MAX_SPEED_INCREASE";
|
||||||
case SLIPSTREAM_FADE_OUT_TIME:
|
case SLIPSTREAM_FADE_OUT_TIME:
|
||||||
return "SLIPSTREAM_FADE_OUT_TIME";
|
return "SLIPSTREAM_FADE_OUT_TIME";
|
||||||
|
|
||||||
|
/* <characteristics-end getProp2> */
|
||||||
}
|
}
|
||||||
Log::error("AbstractCharacteristic::getName", "Unknown type");
|
Log::error("AbstractCharacteristic::getName", "Unknown type");
|
||||||
return "Unknown type";
|
return "Unknown type";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Script-generated getter
|
// Script-generated content generated by tools/create_kart_properties.py getter
|
||||||
|
// Please don't change the following tag. It will be automatically detected
|
||||||
|
// by the script and replace the contained content.
|
||||||
|
// To update the code, use tools/update_characteristics.py
|
||||||
|
/* <characteristics-start getter> */
|
||||||
float AbstractCharacteristic::getSuspensionStiffness() const
|
float AbstractCharacteristic::getSuspensionStiffness() const
|
||||||
{
|
{
|
||||||
float result;
|
float result;
|
||||||
@ -428,13 +441,13 @@ float AbstractCharacteristic::getSuspensionRest() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
float AbstractCharacteristic::getSuspensionTravelCm() const
|
float AbstractCharacteristic::getSuspensionTravel() const
|
||||||
{
|
{
|
||||||
float result;
|
float result;
|
||||||
bool is_set = false;
|
bool is_set = false;
|
||||||
process(SUSPENSION_TRAVEL_CM, &result, &is_set);
|
process(SUSPENSION_TRAVEL, &result, &is_set);
|
||||||
if (!is_set)
|
if (!is_set)
|
||||||
Log::fatal("AbstractCharacteristic", "Can't get characteristic %s", getName(SUSPENSION_TRAVEL_CM).c_str());
|
Log::fatal("AbstractCharacteristic", "Can't get characteristic %s", getName(SUSPENSION_TRAVEL).c_str());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -648,16 +661,6 @@ float AbstractCharacteristic::getWheelsDampingCompression() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
float AbstractCharacteristic::getWheelsRadius() const
|
|
||||||
{
|
|
||||||
float result;
|
|
||||||
bool is_set = false;
|
|
||||||
process(WHEELS_RADIUS, &result, &is_set);
|
|
||||||
if (!is_set)
|
|
||||||
Log::fatal("AbstractCharacteristic", "Can't get characteristic %s", getName(WHEELS_RADIUS).c_str());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<float> AbstractCharacteristic::getWheelsPosition() const
|
std::vector<float> AbstractCharacteristic::getWheelsPosition() const
|
||||||
{
|
{
|
||||||
std::vector<float> result;
|
std::vector<float> result;
|
||||||
@ -1268,3 +1271,6 @@ float AbstractCharacteristic::getSlipstreamFadeOutTime() const
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* <characteristics-end getter> */
|
||||||
|
|
||||||
|
@ -66,11 +66,16 @@ public:
|
|||||||
|
|
||||||
enum CharacteristicType
|
enum CharacteristicType
|
||||||
{
|
{
|
||||||
// Script-generated content
|
// Script-generated content generated by tools/create_kart_properties.py enum
|
||||||
|
// Please don't change the following tag. It will be automatically detected
|
||||||
|
// by the script and replace the contained content.
|
||||||
|
// To update the code, use tools/update_characteristics.py
|
||||||
|
/* <characteristics-start enum> */
|
||||||
|
|
||||||
// Suspension
|
// Suspension
|
||||||
SUSPENSION_STIFFNESS,
|
SUSPENSION_STIFFNESS,
|
||||||
SUSPENSION_REST,
|
SUSPENSION_REST,
|
||||||
SUSPENSION_TRAVEL_CM,
|
SUSPENSION_TRAVEL,
|
||||||
SUSPENSION_EXP_SPRING_RESPONSE,
|
SUSPENSION_EXP_SPRING_RESPONSE,
|
||||||
SUSPENSION_MAX_FORCE,
|
SUSPENSION_MAX_FORCE,
|
||||||
|
|
||||||
@ -104,7 +109,6 @@ public:
|
|||||||
// Wheels
|
// Wheels
|
||||||
WHEELS_DAMPING_RELAXATION,
|
WHEELS_DAMPING_RELAXATION,
|
||||||
WHEELS_DAMPING_COMPRESSION,
|
WHEELS_DAMPING_COMPRESSION,
|
||||||
WHEELS_RADIUS,
|
|
||||||
WHEELS_POSITION,
|
WHEELS_POSITION,
|
||||||
|
|
||||||
// Camera
|
// Camera
|
||||||
@ -195,6 +199,8 @@ public:
|
|||||||
SLIPSTREAM_MAX_SPEED_INCREASE,
|
SLIPSTREAM_MAX_SPEED_INCREASE,
|
||||||
SLIPSTREAM_FADE_OUT_TIME,
|
SLIPSTREAM_FADE_OUT_TIME,
|
||||||
|
|
||||||
|
/* <characteristics-end enum> */
|
||||||
|
|
||||||
|
|
||||||
// Count
|
// Count
|
||||||
CHARACTERISTIC_COUNT
|
CHARACTERISTIC_COUNT
|
||||||
@ -228,10 +234,15 @@ public:
|
|||||||
static ValueType getType(CharacteristicType type);
|
static ValueType getType(CharacteristicType type);
|
||||||
static std::string getName(CharacteristicType type);
|
static std::string getName(CharacteristicType type);
|
||||||
|
|
||||||
// Script-generated content
|
// Script-generated content generated by tools/create_kart_properties.py defs
|
||||||
|
// Please don't change the following tag. It will be automatically detected
|
||||||
|
// by the script and replace the contained content.
|
||||||
|
// To update the code, use tools/update_characteristics.py
|
||||||
|
/* <characteristics-start defs> */
|
||||||
|
|
||||||
float getSuspensionStiffness() const;
|
float getSuspensionStiffness() const;
|
||||||
float getSuspensionRest() const;
|
float getSuspensionRest() const;
|
||||||
float getSuspensionTravelCm() const;
|
float getSuspensionTravel() const;
|
||||||
bool getSuspensionExpSpringResponse() const;
|
bool getSuspensionExpSpringResponse() const;
|
||||||
float getSuspensionMaxForce() const;
|
float getSuspensionMaxForce() const;
|
||||||
|
|
||||||
@ -259,7 +270,6 @@ public:
|
|||||||
|
|
||||||
float getWheelsDampingRelaxation() const;
|
float getWheelsDampingRelaxation() const;
|
||||||
float getWheelsDampingCompression() const;
|
float getWheelsDampingCompression() const;
|
||||||
float getWheelsRadius() const;
|
|
||||||
std::vector<float> getWheelsPosition() const;
|
std::vector<float> getWheelsPosition() const;
|
||||||
|
|
||||||
float getCameraDistance() const;
|
float getCameraDistance() const;
|
||||||
@ -335,6 +345,8 @@ public:
|
|||||||
float getSlipstreamMinSpeed() const;
|
float getSlipstreamMinSpeed() const;
|
||||||
float getSlipstreamMaxSpeedIncrease() const;
|
float getSlipstreamMaxSpeedIncrease() const;
|
||||||
float getSlipstreamFadeOutTime() const;
|
float getSlipstreamFadeOutTime() const;
|
||||||
|
|
||||||
|
/* <characteristics-end defs> */
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -101,7 +101,7 @@ void AbstractKart::reset()
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
const AbstractCharacteristic* AbstractKart::getCharacteristic() const
|
const AbstractCharacteristic* AbstractKart::getCharacteristic() const
|
||||||
{
|
{
|
||||||
return &(*m_characteristic);
|
return m_characteristic.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -36,8 +36,7 @@ const SkiddingProperties* CombinedCharacteristic::getSkiddingProperties() const
|
|||||||
|
|
||||||
void CombinedCharacteristic::process(CharacteristicType type, Value value, bool *is_set) const
|
void CombinedCharacteristic::process(CharacteristicType type, Value value, bool *is_set) const
|
||||||
{
|
{
|
||||||
for (std::vector<const AbstractCharacteristic*>::const_iterator it = m_childs.cbegin();
|
for (const AbstractCharacteristic *characteristic : m_childs)
|
||||||
it != m_childs.cend(); it++)
|
characteristic->process(type, value, is_set);
|
||||||
(*it)->process(type, value, is_set);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,14 +186,13 @@ void KartPropertiesManager::loadCharacteristics(const XMLNode *root)
|
|||||||
root->getNodes("characteristic", nodes);
|
root->getNodes("characteristic", nodes);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
std::string name;
|
std::string name;
|
||||||
for (std::vector<XMLNode*>::const_iterator baseNode = nodes.cbegin();
|
for (const XMLNode *baseNode : nodes)
|
||||||
baseNode != nodes.cend(); baseNode++)
|
|
||||||
{
|
{
|
||||||
(*baseNode)->get("name", &name);
|
baseNode->get("name", &name);
|
||||||
if (name == "base")
|
if (name == "base")
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
m_base_characteristic.reset(new XmlCharacteristic(*baseNode));
|
m_base_characteristic.reset(new XmlCharacteristic(baseNode));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,35 +202,32 @@ void KartPropertiesManager::loadCharacteristics(const XMLNode *root)
|
|||||||
// Load difficulties
|
// Load difficulties
|
||||||
nodes.clear();
|
nodes.clear();
|
||||||
root->getNode("difficulties")->getNodes("characteristic", nodes);
|
root->getNode("difficulties")->getNodes("characteristic", nodes);
|
||||||
for (std::vector<XMLNode*>::const_iterator type = nodes.cbegin();
|
for (const XMLNode *type : nodes)
|
||||||
type != nodes.cend(); type++)
|
|
||||||
{
|
{
|
||||||
(*type)->get("name", &name);
|
type->get("name", &name);
|
||||||
m_difficulty_characteristics.insert(std::pair<const std::string,
|
m_difficulty_characteristics.insert(std::pair<const std::string,
|
||||||
std::unique_ptr<AbstractCharacteristic> >(name,
|
std::unique_ptr<AbstractCharacteristic> >(name,
|
||||||
std::unique_ptr<AbstractCharacteristic>(new XmlCharacteristic(*type))));
|
std::unique_ptr<AbstractCharacteristic>(new XmlCharacteristic(type))));
|
||||||
}
|
}
|
||||||
// Load kart type characteristics
|
// Load kart type characteristics
|
||||||
nodes.clear();
|
nodes.clear();
|
||||||
root->getNode("kart-types")->getNodes("characteristic", nodes);
|
root->getNode("kart-types")->getNodes("characteristic", nodes);
|
||||||
for (std::vector<XMLNode*>::const_iterator type = nodes.cbegin();
|
for (const XMLNode *type : nodes)
|
||||||
type != nodes.cend(); type++)
|
|
||||||
{
|
{
|
||||||
(*type)->get("name", &name);
|
type->get("name", &name);
|
||||||
m_kart_type_characteristics.insert(std::pair<const std::string,
|
m_kart_type_characteristics.insert(std::pair<const std::string,
|
||||||
std::unique_ptr<AbstractCharacteristic> >(name,
|
std::unique_ptr<AbstractCharacteristic> >(name,
|
||||||
std::unique_ptr<AbstractCharacteristic>(new XmlCharacteristic(*type))));
|
std::unique_ptr<AbstractCharacteristic>(new XmlCharacteristic(type))));
|
||||||
}
|
}
|
||||||
// Load player difficulties
|
// Load player difficulties
|
||||||
nodes.clear();
|
nodes.clear();
|
||||||
root->getNode("player-characteristics")->getNodes("characteristic", nodes);
|
root->getNode("player-characteristics")->getNodes("characteristic", nodes);
|
||||||
for (std::vector<XMLNode*>::const_iterator type = nodes.cbegin();
|
for (const XMLNode *type : nodes)
|
||||||
type != nodes.cend(); type++)
|
|
||||||
{
|
{
|
||||||
(*type)->get("name", &name);
|
type->get("name", &name);
|
||||||
m_player_characteristics.insert(std::pair<const std::string,
|
m_player_characteristics.insert(std::pair<const std::string,
|
||||||
std::unique_ptr<AbstractCharacteristic> >(name,
|
std::unique_ptr<AbstractCharacteristic> >(name,
|
||||||
std::unique_ptr<AbstractCharacteristic>(new XmlCharacteristic(*type))));
|
std::unique_ptr<AbstractCharacteristic>(new XmlCharacteristic(type))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +299,7 @@ const AbstractCharacteristic* KartPropertiesManager::getDifficultyCharacteristic
|
|||||||
it = m_difficulty_characteristics.find(type);
|
it = m_difficulty_characteristics.find(type);
|
||||||
if (it == m_difficulty_characteristics.cend())
|
if (it == m_difficulty_characteristics.cend())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return &(*it->second);
|
return it->second.get();
|
||||||
} // getDifficultyCharacteristic
|
} // getDifficultyCharacteristic
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -313,7 +309,7 @@ const AbstractCharacteristic* KartPropertiesManager::getKartTypeCharacteristic(c
|
|||||||
it = m_kart_type_characteristics.find(type);
|
it = m_kart_type_characteristics.find(type);
|
||||||
if (it == m_kart_type_characteristics.cend())
|
if (it == m_kart_type_characteristics.cend())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return &(*it->second);
|
return it->second.get();
|
||||||
} // getKartTypeCharacteristic
|
} // getKartTypeCharacteristic
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -323,7 +319,7 @@ const AbstractCharacteristic* KartPropertiesManager::getPlayerCharacteristic(con
|
|||||||
it = m_player_characteristics.find(type);
|
it = m_player_characteristics.find(type);
|
||||||
if (it == m_player_characteristics.cend())
|
if (it == m_player_characteristics.cend())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return &(*it->second);
|
return it->second.get();
|
||||||
} // getPlayerCharacteristic
|
} // getPlayerCharacteristic
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -99,7 +99,7 @@ public:
|
|||||||
void setHatMeshName(const std::string &hat_name);
|
void setHatMeshName(const std::string &hat_name);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
/** Get the characteristic that holds the base values. */
|
/** Get the characteristic that holds the base values. */
|
||||||
const AbstractCharacteristic* getBaseCharacteristic() const { return &(*m_base_characteristic); }
|
const AbstractCharacteristic* getBaseCharacteristic() const { return m_base_characteristic.get(); }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
/** Get a characteristic that holds the values for a certain difficulty. */
|
/** Get a characteristic that holds the values for a certain difficulty. */
|
||||||
const AbstractCharacteristic* getDifficultyCharacteristic(const std::string &type) const;
|
const AbstractCharacteristic* getDifficultyCharacteristic(const std::string &type) const;
|
||||||
|
@ -59,17 +59,17 @@ void XmlCharacteristic::process(CharacteristicType type, Value value, bool *is_s
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::vector<float>::iterator fit = value.fv->begin();
|
std::vector<float>::iterator fit = value.fv->begin();
|
||||||
for (std::vector<std::string>::const_iterator it = processors.begin();
|
for (const std::string &processor : processors)
|
||||||
it != processors.end(); it++, fit++)
|
|
||||||
{
|
{
|
||||||
processFloat(*it, &*fit, is_set);
|
processFloat(processor, &*fit, is_set);
|
||||||
if (!*is_set)
|
if (!*is_set)
|
||||||
{
|
{
|
||||||
Log::error("XmlCharacteristic::process", "Can't process %s",
|
Log::error("XmlCharacteristic::process", "Can't process %s",
|
||||||
it->c_str());
|
processor.c_str());
|
||||||
value.fv->clear();
|
value.fv->clear();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
fit++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,11 +80,10 @@ void XmlCharacteristic::process(CharacteristicType type, Value value, bool *is_s
|
|||||||
{
|
{
|
||||||
value.fv->resize(processors.size());
|
value.fv->resize(processors.size());
|
||||||
std::vector<float>::iterator fit = value.fv->begin();
|
std::vector<float>::iterator fit = value.fv->begin();
|
||||||
for (std::vector<std::string>::const_iterator it = processors.begin();
|
for (const std::string &processor : processors)
|
||||||
it != processors.end(); it++, fit++)
|
|
||||||
{
|
{
|
||||||
*is_set = false;
|
*is_set = false;
|
||||||
processFloat(*it, &*fit, is_set);
|
processFloat(processor, &*fit, is_set);
|
||||||
|
|
||||||
if (!*is_set)
|
if (!*is_set)
|
||||||
{
|
{
|
||||||
@ -93,6 +92,7 @@ void XmlCharacteristic::process(CharacteristicType type, Value value, bool *is_s
|
|||||||
value.fv->clear();
|
value.fv->clear();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
fit++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -110,10 +110,9 @@ void XmlCharacteristic::process(CharacteristicType type, Value value, bool *is_s
|
|||||||
shouldReplace = true;
|
shouldReplace = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (std::vector<std::string>::const_iterator it = processors.begin();
|
for (const std::string &processor : processors)
|
||||||
it != processors.end(); it++)
|
|
||||||
{
|
{
|
||||||
std::vector<std::string> pair = StringUtils::split(*it, ':');
|
std::vector<std::string> pair = StringUtils::split(processor, ':');
|
||||||
if (pair.size() != 2)
|
if (pair.size() != 2)
|
||||||
Log::error("XmlCharacteristic::process",
|
Log::error("XmlCharacteristic::process",
|
||||||
"Can't process %s: Wrong format", getName(type).c_str());
|
"Can't process %s: Wrong format", getName(type).c_str());
|
||||||
@ -162,10 +161,9 @@ void XmlCharacteristic::process(CharacteristicType type, Value value, bool *is_s
|
|||||||
if (shouldReplace)
|
if (shouldReplace)
|
||||||
{
|
{
|
||||||
// Replace all values
|
// Replace all values
|
||||||
for (std::vector<std::string>::const_iterator it = processors.begin();
|
for (const std::string &processor : processors)
|
||||||
it != processors.end(); it++)
|
|
||||||
{
|
{
|
||||||
std::vector<std::string> pair = StringUtils::split(*it,':');
|
std::vector<std::string> pair = StringUtils::split(processor,':');
|
||||||
if (pair.size() != 2)
|
if (pair.size() != 2)
|
||||||
Log::error("XmlCharacteristic::process",
|
Log::error("XmlCharacteristic::process",
|
||||||
"Can't process %s: Wrong format", getName(type).c_str());
|
"Can't process %s: Wrong format", getName(type).c_str());
|
||||||
@ -289,12 +287,16 @@ void XmlCharacteristic::processBool(const std::string &processor, bool *value, b
|
|||||||
|
|
||||||
void XmlCharacteristic::load(const XMLNode *node)
|
void XmlCharacteristic::load(const XMLNode *node)
|
||||||
{
|
{
|
||||||
// Script-generated content getXml
|
// Script-generated content generated by tools/create_kart_properties.py getXml
|
||||||
|
// Please don't change the following tag. It will be automatically detected
|
||||||
|
// by the script and replace the contained content.
|
||||||
|
// To update the code, use tools/update_characteristics.py
|
||||||
|
/* <characteristics-start getXml> */
|
||||||
if (const XMLNode *sub_node = node->getNode("suspension"))
|
if (const XMLNode *sub_node = node->getNode("suspension"))
|
||||||
{
|
{
|
||||||
sub_node->get("stiffness", &m_values[SUSPENSION_STIFFNESS]);
|
sub_node->get("stiffness", &m_values[SUSPENSION_STIFFNESS]);
|
||||||
sub_node->get("rest", &m_values[SUSPENSION_REST]);
|
sub_node->get("rest", &m_values[SUSPENSION_REST]);
|
||||||
sub_node->get("travel-cm", &m_values[SUSPENSION_TRAVEL_CM]);
|
sub_node->get("travel", &m_values[SUSPENSION_TRAVEL]);
|
||||||
sub_node->get("exp-spring-response", &m_values[SUSPENSION_EXP_SPRING_RESPONSE]);
|
sub_node->get("exp-spring-response", &m_values[SUSPENSION_EXP_SPRING_RESPONSE]);
|
||||||
sub_node->get("max-force", &m_values[SUSPENSION_MAX_FORCE]);
|
sub_node->get("max-force", &m_values[SUSPENSION_MAX_FORCE]);
|
||||||
}
|
}
|
||||||
@ -340,7 +342,6 @@ void XmlCharacteristic::load(const XMLNode *node)
|
|||||||
{
|
{
|
||||||
sub_node->get("damping-relaxation", &m_values[WHEELS_DAMPING_RELAXATION]);
|
sub_node->get("damping-relaxation", &m_values[WHEELS_DAMPING_RELAXATION]);
|
||||||
sub_node->get("damping-compression", &m_values[WHEELS_DAMPING_COMPRESSION]);
|
sub_node->get("damping-compression", &m_values[WHEELS_DAMPING_COMPRESSION]);
|
||||||
sub_node->get("radius", &m_values[WHEELS_RADIUS]);
|
|
||||||
sub_node->get("position", &m_values[WHEELS_POSITION]);
|
sub_node->get("position", &m_values[WHEELS_POSITION]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,5 +460,8 @@ void XmlCharacteristic::load(const XMLNode *node)
|
|||||||
sub_node->get("max-speed-increase", &m_values[SLIPSTREAM_MAX_SPEED_INCREASE]);
|
sub_node->get("max-speed-increase", &m_values[SLIPSTREAM_MAX_SPEED_INCREASE]);
|
||||||
sub_node->get("fade-out-time", &m_values[SLIPSTREAM_FADE_OUT_TIME]);
|
sub_node->get("fade-out-time", &m_values[SLIPSTREAM_FADE_OUT_TIME]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* <characteristics-end getXml> */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,21 +17,20 @@
|
|||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
# This script creates the output for the AbstractCharacteristics
|
# This script creates code for the characteristics.
|
||||||
# It takes an argument that specifies what the output of the script should be.
|
# It takes an argument that specifies what the output of the script should be.
|
||||||
# The output options can be seen by running this script without arguments.
|
# The output options can be seen by running this script without arguments.
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Input data
|
# Input data
|
||||||
#FIXME is wheelPosition needed?
|
characteristics = """Suspension: stiffness, rest, travel, expSpringResponse(bool), maxForce
|
||||||
characteristics = """Suspension: stiffness, rest, travelCm, expSpringResponse(bool), maxForce
|
|
||||||
Stability: rollInfluence, chassisLinearDamping, chassisAngularDamping, downwardImpulseFactor, trackConnectionAccel, smoothFlyingImpulse
|
Stability: rollInfluence, chassisLinearDamping, chassisAngularDamping, downwardImpulseFactor, trackConnectionAccel, smoothFlyingImpulse
|
||||||
Turn: radius(InterpolationArray), timeResetSteer, timeFullSteer(InterpolationArray)
|
Turn: radius(InterpolationArray), timeResetSteer, timeFullSteer(InterpolationArray)
|
||||||
Engine: power, maxSpeed, brakeFactor, brakeTimeIncrease, maxSpeedReverseRatio
|
Engine: power, maxSpeed, brakeFactor, brakeTimeIncrease, maxSpeedReverseRatio
|
||||||
Gear: switchRatio(std::vector<float>/floatVector), powerIncrease(std::vector<float>/floatVector)
|
Gear: switchRatio(std::vector<float>/floatVector), powerIncrease(std::vector<float>/floatVector)
|
||||||
Mass
|
Mass
|
||||||
Wheels: dampingRelaxation, dampingCompression, radius, position(std::vector<float>/floatVector)
|
Wheels: dampingRelaxation, dampingCompression, position(std::vector<float>/floatVector)
|
||||||
Camera: distance, forwardUpAngle, backwardUpAngle
|
Camera: distance, forwardUpAngle, backwardUpAngle
|
||||||
Jump: animationTime
|
Jump: animationTime
|
||||||
Lean: max, speed
|
Lean: max, speed
|
||||||
@ -58,12 +57,12 @@ class GroupMember:
|
|||||||
self.typeC = typeC
|
self.typeC = typeC
|
||||||
self.typeStr = typeStr
|
self.typeStr = typeStr
|
||||||
|
|
||||||
"""E.g. power(std::vector<float>/floatVector)
|
""" E.g. power(std::vector<float>/floatVector)
|
||||||
or speed(InterpolationArray)
|
or speed(InterpolationArray)
|
||||||
The default type is float
|
The default type is float
|
||||||
The name 'value' is special: Only the group name will be used to access
|
The name 'value' is special: Only the group name will be used to access
|
||||||
the member but in the xml file it will be still value (because we
|
the member but in the xml file it will be still value (because we
|
||||||
need a name)."""
|
need a name). """
|
||||||
def parse(content):
|
def parse(content):
|
||||||
typeC = "float"
|
typeC = "float"
|
||||||
typeStr = typeC
|
typeStr = typeC
|
||||||
@ -93,8 +92,8 @@ class Group:
|
|||||||
def getBaseName(self):
|
def getBaseName(self):
|
||||||
return self.baseName
|
return self.baseName
|
||||||
|
|
||||||
"""E.g. engine: power, gears(std::vector<Gear>/Gears)
|
""" E.g. engine: power, gears(std::vector<Gear>/Gears)
|
||||||
or mass(float) or only mass"""
|
or mass(float) or only mass """
|
||||||
def parse(content):
|
def parse(content):
|
||||||
pos = content.find(":")
|
pos = content.find(":")
|
||||||
if pos == -1:
|
if pos == -1:
|
||||||
@ -107,7 +106,7 @@ class Group:
|
|||||||
group.addMember(m)
|
group.addMember(m)
|
||||||
return group
|
return group
|
||||||
|
|
||||||
"""Creates a list of words from a titlecase string"""
|
""" Creates a list of words from a titlecase string """
|
||||||
def toList(name):
|
def toList(name):
|
||||||
result = []
|
result = []
|
||||||
cur = ""
|
cur = ""
|
||||||
@ -120,8 +119,8 @@ def toList(name):
|
|||||||
result.append(cur)
|
result.append(cur)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
"""titleCase: true = result is titlecase
|
""" titleCase: true = result is titlecase
|
||||||
false = result has underscores"""
|
false = result has underscores """
|
||||||
def joinSubName(group, member, titleCase):
|
def joinSubName(group, member, titleCase):
|
||||||
words = toList(group.baseName) + toList(member.getName)
|
words = toList(group.baseName) + toList(member.getName)
|
||||||
first = True
|
first = True
|
||||||
@ -134,7 +133,14 @@ def joinSubName(group, member, titleCase):
|
|||||||
def main():
|
def main():
|
||||||
# Find out what to do
|
# Find out what to do
|
||||||
if len(sys.argv) == 1:
|
if len(sys.argv) == 1:
|
||||||
print("Please specify what you want to know [enum|defs|getter|getProp|getXml]")
|
print("""Usage: ./create_kart_properties.py <operation>
|
||||||
|
Operations:
|
||||||
|
enum List the enum values for all characteristics in abstract_characteristic.hpp
|
||||||
|
defs Create the headers in abstract_characteristic.hpp
|
||||||
|
getter The getter implementations in abstract_characteristic.cpp
|
||||||
|
getProp1 Creates the getType function in abstract_characteristic.cpp
|
||||||
|
getProp2 Creates the getName funciton in abstract_characteristic.cpp
|
||||||
|
getXml Used to load the characteristics from an xml file in xml_characteristic.cpp""")
|
||||||
return
|
return
|
||||||
task = sys.argv[1]
|
task = sys.argv[1]
|
||||||
|
|
||||||
@ -187,14 +193,14 @@ def main():
|
|||||||
return {4};
|
return {4};
|
||||||
}}
|
}}
|
||||||
""".format(m.typeC, nameTitle, nameUnderscore.upper(), typeC, result))
|
""".format(m.typeC, nameTitle, nameUnderscore.upper(), typeC, result))
|
||||||
elif task == "getProp":
|
elif task == "getProp1":
|
||||||
for g in groups:
|
for g in groups:
|
||||||
for m in g.members:
|
for m in g.members:
|
||||||
nameTitle = joinSubName(g, m, True)
|
nameTitle = joinSubName(g, m, True)
|
||||||
nameUnderscore = joinSubName(g, m, False)
|
nameUnderscore = joinSubName(g, m, False)
|
||||||
print(" case {0}:\n return TYPE_{1};".
|
print(" case {0}:\n return TYPE_{1};".
|
||||||
format(nameUnderscore.upper(), "_".join(toList(m.typeStr)).upper()))
|
format(nameUnderscore.upper(), "_".join(toList(m.typeStr)).upper()))
|
||||||
print("\n\n-------------------- END --------------------\n")
|
elif task == "getProp2":
|
||||||
for g in groups:
|
for g in groups:
|
||||||
for m in g.members:
|
for m in g.members:
|
||||||
nameTitle = joinSubName(g, m, True)
|
nameTitle = joinSubName(g, m, True)
|
||||||
@ -214,24 +220,6 @@ def main():
|
|||||||
else:
|
else:
|
||||||
print("Unknown task")
|
print("Unknown task")
|
||||||
|
|
||||||
#print("Constructor ****************************************")
|
|
||||||
#lineLength = 4;
|
|
||||||
#line = " "
|
|
||||||
#for g in groups:
|
|
||||||
# for n in g.subNames:
|
|
||||||
# name = "m_{0} = ".format(joinSubName(g, n, False))
|
|
||||||
# l = len(name)
|
|
||||||
# if lineLength + l > 80 and lineLength > 4:
|
|
||||||
# print(line)
|
|
||||||
# line = " " + name
|
|
||||||
# lineLength = l + 4
|
|
||||||
# else:
|
|
||||||
# line += name
|
|
||||||
# lineLength += l
|
|
||||||
#if lineLength > 4:
|
|
||||||
# line += "1;"
|
|
||||||
# print(line)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
57
tools/update_characteristics.py
Executable file
57
tools/update_characteristics.py
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
#
|
||||||
|
# SuperTuxKart - a fun racing game with go-kart
|
||||||
|
# Copyright (C) 2006-2015 SuperTuxKart-Team
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# This script uses create_kart_properties.py to create code and then replaces
|
||||||
|
# the code in the source files. The parts in the source are marked with tags, that
|
||||||
|
# contain the argument that has to be passed to create_kart_properties.py.
|
||||||
|
# The script has to be run from the root directory of this project.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# Where and what should be replaced
|
||||||
|
replacements = [
|
||||||
|
["enum", "karts/abstract_characteristic.hpp"],
|
||||||
|
["defs", "karts/abstract_characteristic.hpp"],
|
||||||
|
["getter", "karts/abstract_characteristic.cpp"],
|
||||||
|
["getProp1", "karts/abstract_characteristic.cpp"],
|
||||||
|
["getProp2", "karts/abstract_characteristic.cpp"],
|
||||||
|
["getXml", "karts/xml_characteristic.cpp"]]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Check, if it runs in the root directory
|
||||||
|
if not os.path.isfile("tools/update_characteristics.py"):
|
||||||
|
print("Please run this script in the root directory of the project.")
|
||||||
|
exit(1)
|
||||||
|
for replacement in replacements:
|
||||||
|
result = subprocess.Popen("tools/create_kart_properties.py " +
|
||||||
|
replacement[0] + " 2> /dev/null", shell = True,
|
||||||
|
stdout = subprocess.PIPE).stdout.read().decode('UTF-8')
|
||||||
|
with open("src/" + replacement[1], "r") as f:
|
||||||
|
text = f.read()
|
||||||
|
# Replace the text by using look behinds and look forwards
|
||||||
|
text = re.sub("(?<=/\* \<characteristics-start " + replacement[0] +
|
||||||
|
"\> \*/\\n)(.|\n)*(?=\\n\s*/\* <characteristics-end " + replacement[0] + "> \*/)", result, text)
|
||||||
|
with open("src/" + replacement[1], "w") as f:
|
||||||
|
f.write(text)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user