From 1b93c89c282bd25ad81d9051131f63ec2becfd51 Mon Sep 17 00:00:00 2001 From: jaynus Date: Fri, 15 May 2015 22:51:23 -0700 Subject: [PATCH] Pass and register reversed model. More scientific notation float limitation handling. --- .../fnc_registerVehicleWithExtension.sqf | 5 +++-- extensions/common/arguments.hpp | 16 ++++++++-------- extensions/common/simulation/object.cpp | 2 +- extensions/common/simulation/object.hpp | 2 ++ extensions/vd/base_vehicle.cpp | 2 +- extensions/vd/controller.cpp | 2 ++ 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/addons/vehicledamage/functions/fnc_registerVehicleWithExtension.sqf b/addons/vehicledamage/functions/fnc_registerVehicleWithExtension.sqf index 4749cd252b..d4b7be86b8 100644 --- a/addons/vehicledamage/functions/fnc_registerVehicleWithExtension.sqf +++ b/addons/vehicledamage/functions/fnc_registerVehicleWithExtension.sqf @@ -2,16 +2,17 @@ #include "script_component.hpp" PARAMS_1(_vehicle); -private["_id", "_model","_vehicleData"]; +private["_id", "_model","_vehicleData", "_reversed"]; if(GVAR(Enabled) < 1) exitWith {}; _id = GVAR(vehicle_id); GVAR(vehicle_id) = _id + 1; _model = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "model"); +_reversed = getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "reversed"); if(_model != "") then { - _value = format["register_vehicle:%1,%2,%3",_model,_id,VECTOR_TEXT(getPosASL _vehicle)]; + _value = format["register_vehicle:%1,%2,%3,%4",_model,_id,_reversed,VECTOR_TEXT(getPosASL _vehicle)]; TRACE_1("", _value); _result = _value call FUNC(callExtension); _vehicle setVariable[QGVAR(id), _id, false]; diff --git a/extensions/common/arguments.hpp b/extensions/common/arguments.hpp index 3540ff2f8b..136f1e5c9e 100644 --- a/extensions/common/arguments.hpp +++ b/extensions/common/arguments.hpp @@ -14,7 +14,8 @@ namespace ace { const std::string & as_string() const { return _args[_index]; } operator const std::string &() const { return as_string(); } - float as_float() const { float res = 0.0f; std::istringstream iss(_args[_index]); iss >> res; return res; } + float to_float(const std::string & val) const { float res = 0.0f; std::istringstream iss(val); iss >> res; return res; } + float as_float() const { return to_float(_args[_index]); } operator float() const { return as_float(); } int as_int() const { return atoi(_args[_index].c_str()); } @@ -25,9 +26,9 @@ namespace ace { ace::vector3 as_vector() const { std::vector t = ace::split(_args[_index], ';'); - return ace::vector3(atof(t[0].c_str()), - atof(t[1].c_str()), - atof(t[2].c_str())); + return ace::vector3(to_float(t[0]), + to_float(t[1]), + to_float(t[2])); } operator ace::vector3() const { return as_vector(); } @@ -49,15 +50,14 @@ namespace ace { const argument_accessor operator[] (int index) const { return argument_accessor(index, _args); } + float to_float(const std::string & val) const { float res = 0.0f; std::istringstream iss(val); iss >> res; return res; } const std::string & as_string(uint32_t _index) const { return _args[_index]; } - float as_float(uint32_t _index) const { return atof(_args[_index].c_str()); } + float as_float(uint32_t _index) const { return to_float(_args[_index]); } int as_int(uint32_t _index) const { return atoi(_args[_index].c_str()); } int as_uint32(uint32_t _index) const { return (uint32_t)atoi(_args[_index].c_str()); } ace::vector3 as_vector(uint32_t _index) const { std::vector t = ace::split(_args[_index], ';'); - return ace::vector3(atof(t[0].c_str()), - atof(t[1].c_str()), - atof(t[2].c_str())); + return ace::vector3(to_float(t[0]), to_float(t[1]), to_float(t[3])); } const std::string & get() const { diff --git a/extensions/common/simulation/object.cpp b/extensions/common/simulation/object.cpp index a5b2c2b125..b9bdd7ed8e 100644 --- a/extensions/common/simulation/object.cpp +++ b/extensions/common/simulation/object.cpp @@ -387,7 +387,7 @@ ace::simulation::object::object() { } -ace::simulation::object::object(const ace::p3d::model_p model) +ace::simulation::object::object(const ace::p3d::model_p model) : reversed(false) { for (ace::p3d::lod_p p3d_lod : model->lods) { lod_p new_lod = std::make_shared(p3d_lod, model); diff --git a/extensions/common/simulation/object.hpp b/extensions/common/simulation/object.hpp index 0a7c414b80..68faddbd13 100644 --- a/extensions/common/simulation/object.hpp +++ b/extensions/common/simulation/object.hpp @@ -205,6 +205,8 @@ namespace ace { object(const ace::p3d::model_p); ~object(); + bool reversed; + std::vector lods; std::vector animations; diff --git a/extensions/vd/base_vehicle.cpp b/extensions/vd/base_vehicle.cpp index ff145e0486..2279c3621c 100644 --- a/extensions/vd/base_vehicle.cpp +++ b/extensions/vd/base_vehicle.cpp @@ -8,7 +8,7 @@ using namespace ace::simulation; namespace ace { namespace vehicledamage { - base_vehicle::base_vehicle(uint32_t id, ace::simulation::object_p object_, ace::vector3 position_) : id(id), object(object_) { + base_vehicle::base_vehicle(uint32_t id, ace::simulation::object_p object_, bool reversed, ace::vector3 position_) : id(id), object(object_) { bt_mesh = std::make_shared(); fire_lod = -1; diff --git a/extensions/vd/controller.cpp b/extensions/vd/controller.cpp index 6cca39502d..11325d5c5c 100644 --- a/extensions/vd/controller.cpp +++ b/extensions/vd/controller.cpp @@ -114,6 +114,8 @@ namespace ace { vehicle_p _vehicle = std::make_shared(static_cast(_args[1]), _object, _args[2]); vehicles[static_cast(_args[1])] = _vehicle; + _vehicle->object->reversed = (static_cast(_args[2]) != 0 ? true : false); + // For results on a valid vehicle registration, we return its animation names for that given vehicle std::stringstream _animationNames; _animationNames << _vehicle->id;