|
3 | 3 |
|
4 | 4 | ////////////////////////////////////////////////////////////////////////// |
5 | 5 |
|
6 | | -// read distance in meters (m) or map units (u) |
7 | | -// @param output_value: Always in meters |
8 | | -inline bool ParseMetersOrMapUnits(cxx::json_document_node parentNode, const std::string& attribute_name, float& output_value) |
| 6 | +// read distance in map units and convert it to meters |
| 7 | +inline bool ParseMapUnits(cxx::json_document_node node, const std::string& attribute, float& output) |
9 | 8 | { |
10 | | - cxx::json_document_node attribute_node = parentNode[attribute_name]; |
11 | | - if (cxx::json_node_string string_node = attribute_node) |
12 | | - { |
13 | | - std::string string_value = string_node.get_value(); |
14 | | - bool mapUnits = cxx::has_suffix(string_value.c_str(), "u"); |
15 | | - |
16 | | - if (::sscanf(string_value.c_str(), "%f", &output_value) > 0) |
17 | | - { |
18 | | - if (mapUnits) |
19 | | - { |
20 | | - output_value = Convert::MapUnitsToMeters(output_value); |
21 | | - } |
22 | | - return true; |
23 | | - } |
24 | | - debug_assert(false); |
25 | | - return false; |
26 | | - } |
27 | | - // meters |
| 9 | + cxx::json_document_node attribute_node = node[attribute]; |
28 | 10 | if (cxx::json_node_numeric numeric_node = attribute_node) |
29 | 11 | { |
30 | | - output_value = numeric_node.get_value_float(); |
| 12 | + output = Convert::MapUnitsToMeters(numeric_node.get_value_float()); |
31 | 13 | return true; |
32 | 14 | } |
33 | 15 | return false; |
@@ -1046,11 +1028,11 @@ void StyleData::InitProjectiles(cxx::json_document_node configNode) |
1046 | 1028 | cxx::json_get_attribute(currentNode, "anim_loop", projectile.mAnimLoop); |
1047 | 1029 |
|
1048 | 1030 | // distances |
1049 | | - ParseMetersOrMapUnits(currentNode, "radius", projectile.mProjectileRadius); |
1050 | | - ParseMetersOrMapUnits(currentNode, "base_distance", projectile.mBaseDistance); |
1051 | | - ParseMetersOrMapUnits(currentNode, "base_primary_damage_radius", projectile.mBasePrimaryDamageRadius); |
1052 | | - ParseMetersOrMapUnits(currentNode, "base_secondary_damage_radius", projectile.mBaseSecondaryDamageRadius); |
1053 | | - ParseMetersOrMapUnits(currentNode, "speed", projectile.mSpeed); |
| 1031 | + ParseMapUnits(currentNode, "radius", projectile.mProjectileRadius); |
| 1032 | + ParseMapUnits(currentNode, "base_distance", projectile.mBaseDistance); |
| 1033 | + ParseMapUnits(currentNode, "base_primary_damage_radius", projectile.mBasePrimaryDamageRadius); |
| 1034 | + ParseMapUnits(currentNode, "base_secondary_damage_radius", projectile.mBaseSecondaryDamageRadius); |
| 1035 | + ParseMapUnits(currentNode, "speed", projectile.mSpeed); |
1054 | 1036 | } |
1055 | 1037 | } |
1056 | 1038 |
|
@@ -1083,6 +1065,6 @@ void StyleData::InitWeapons(cxx::json_document_node configNode) |
1083 | 1065 | cxx::json_get_attribute(currentNode, "base_ammo_limit", weapon.mBaseAmmoLimit); |
1084 | 1066 |
|
1085 | 1067 | // distances |
1086 | | - ParseMetersOrMapUnits(currentNode, "base_melee_hit_distance", weapon.mBaseMeleeHitDistance); |
| 1068 | + ParseMapUnits(currentNode, "base_melee_hit_distance", weapon.mBaseMeleeHitDistance); |
1087 | 1069 | } |
1088 | 1070 | } |
0 commit comments