diff --git a/addons/vehicledamage/functions/fnc_debug_drawFace.sqf b/addons/vehicledamage/functions/fnc_debug_drawFace.sqf index 3609908189..5c6fdfc5c3 100644 --- a/addons/vehicledamage/functions/fnc_debug_drawFace.sqf +++ b/addons/vehicledamage/functions/fnc_debug_drawFace.sqf @@ -19,6 +19,6 @@ for [{_i=0}, {_i<(count _this)-1}, {_i=_i+3}] do { ]); }; //TRACE_1("", _points); -GVAR(debug_lines) pushBack [(ASLToATL (_points select 0)), (ASLToATL (_points select 1))]; -GVAR(debug_lines) pushBack [(ASLToATL (_points select 1)), (ASLToATL (_points select 2))]; -GVAR(debug_lines) pushBack [(ASLToATL (_points select 2)), (ASLToATL (_points select 0))]; \ No newline at end of file +GVAR(debug_lines) pushBack [((_points select 0)), ((_points select 1))]; +GVAR(debug_lines) pushBack [((_points select 1)), ((_points select 2))]; +GVAR(debug_lines) pushBack [((_points select 2)), ((_points select 0))]; \ No newline at end of file diff --git a/extensions/common/simulation/object.cpp b/extensions/common/simulation/object.cpp index 63b357b2f7..89d72774cc 100644 --- a/extensions/common/simulation/object.cpp +++ b/extensions/common/simulation/object.cpp @@ -110,17 +110,17 @@ void ace::simulation::named_selection::animate(const glm::mat4 &matrix) ace::simulation::vertex_table::vertex_table(const ace::p3d::vertex_table_p p3d_vertex_table, const ace::p3d::lod_p p3d_lod, const ace::p3d::model_p p3d, bool reversed) : animated(false) { this->vertices.resize(p3d_vertex_table->points.size); - ace::vector3 center_off = p3d->info->cog_offset;//p3d->info->center_of_gravity + p3d->info->offset_2 + p3d->info->cog_offset; - center_off.y(center_off.y() * 2); - center_off.x(0); - center_off.z(0); + ace::vector3 center_off = p3d_lod->autocenter_pos;//p3d->info->cog_offset;//p3d->info->center_of_gravity + p3d->info->offset_2 + p3d->info->cog_offset; + //center_off.y(center_off.y() * 2); + //center_off.x(0); + //center_off.z(0); if (reversed) { center_off.x(center_off.x()*-1); center_off.z(center_off.z()*-1); } for (uint32_t i = 0; i <= p3d_vertex_table->points.size - 1; ++i) { if (p3d->info->autocenter) { - ace::vector3 new_vertex = p3d_vertex_table->points[i] + center_off; + ace::vector3 new_vertex = p3d_vertex_table->points[i]; this->vertices[i] = std::make_shared(*this, new_vertex, i, reversed); } else { @@ -137,10 +137,10 @@ ace::simulation::lod::lod(const ace::p3d::lod_p p3d_lod, const ace::p3d::model_p { this->id = p3d_lod->id; this->vertices = vertex_table(p3d_lod->vertices, p3d_lod, p3d, reversed); - this->autocenter_pos = p3d->info->cog_offset;//p3d->info->center_of_gravity + p3d->info->offset_2 + p3d->info->cog_offset; - autocenter_pos.y(autocenter_pos.y() * 2); - autocenter_pos.x(0); - autocenter_pos.z(0); + this->autocenter_pos = p3d_lod->autocenter_pos;//p3d->info->center_of_gravity + p3d->info->offset_2 + p3d->info->cog_offset; + //autocenter_pos.y(autocenter_pos.y() * 2); + //autocenter_pos.x(0); + //autocenter_pos.z(0); if (reversed) { this->autocenter_pos.x(this->autocenter_pos.x()*-1); this->autocenter_pos.z(this->autocenter_pos.z()*-1); @@ -178,15 +178,15 @@ ace::simulation::lod_animation_info::lod_animation_info( { this->index = p3d_animate_bone->index; if (p3d->info->autocenter) { - ace::vector3 center_off = p3d->info->cog_offset;//p3d->info->center_of_gravity + p3d->info->offset_2 + p3d->info->cog_offset; - center_off.y(center_off.y() * 2); - center_off.x(0); - center_off.z(0); + ace::vector3 center_off = _lod->autocenter_pos;//p3d->info->cog_offset;//p3d->info->center_of_gravity + p3d->info->offset_2 + p3d->info->cog_offset; + //center_off.y(center_off.y() * 2); + //center_off.x(0); + //center_off.z(0); if (reversed) { center_off.x(center_off.x()*-1); center_off.z(center_off.z()*-1); } - this->axis_position = p3d_animate_bone->axis_position + center_off; + this->axis_position = p3d_animate_bone->axis_position; this->axis_direction = p3d_animate_bone->axis_direction; } else { diff --git a/extensions/tests/AT_01.txt b/extensions/tests/AT_01.txt index 31ceceadf8..02254cd3ea 100644 --- a/extensions/tests/AT_01.txt +++ b/extensions/tests/AT_01.txt @@ -1,6 +1,6 @@ #c:\arma\arma3\addons\static_f_gamma.pbo C:\dev\ace3\extensions\tests\AT_01.txt init: debug_render: -register_vehicle:\x\nou\addons\anim_test\anim_test.p3d,0,4050.18;3802.55;5.075 +register_vehicle:\x\nou\addons\anim_test\anim_test.p3d,0,0,4050.18;3802.55;5.075 set_animation_state:0, turret, 1.0, rotation_drum, 0.5, barrel_recoil, -4, barrel_hide, 0 #set_animation_state:0, turret, 0.500 \ No newline at end of file diff --git a/extensions/vd/base_vehicle.cpp b/extensions/vd/base_vehicle.cpp index 2279c3621c..a7d5c11896 100644 --- a/extensions/vd/base_vehicle.cpp +++ b/extensions/vd/base_vehicle.cpp @@ -19,8 +19,24 @@ namespace ace { break; } } - if (fire_lod == -1) // @TODO: fallback on geo LOD - fire_lod = 0; + if (fire_lod == -1) { + for (int x = 0; x < object_->lods.size(); x++) { + if (object_->lods[x]->type == LOD_TYPE_GEOMETRY) { + fire_lod = x; + break; + } + } + } + if (fire_lod == -1) { + for (int x = 0; x < object_->lods.size(); x++) { + if (object_->lods[x]->type == LOD_TYPE_GEOMETRY_VIEW) { + fire_lod = x; + break; + } + } + } + // if (fire_lod == -1) // @TODO: fallback on geo LOD + // fire_lod = 0; //fire_lod = 0; assert(fire_lod != -1); diff --git a/extensions/vd/controller.cpp b/extensions/vd/controller.cpp index efaafc5702..148fa0203d 100644 --- a/extensions/vd/controller.cpp +++ b/extensions/vd/controller.cpp @@ -125,9 +125,9 @@ namespace ace { if (model_str[0] == '\\') { model_str.erase(model_str.begin()); } - - if (ace::model_collection::get().load_model(model_str)) { - std::shared_ptr _object = std::make_shared(model_collection::get().models[model_str].model, (static_cast(_args[2]) != 0 ? true : false)); + std::string model_key = ""; + if (ace::model_collection::get().load_model(model_str, model_key)) { + std::shared_ptr _object = std::make_shared(model_collection::get().models[model_key].model, (static_cast(_args[2]) != 0 ? true : false)); vehicle_p _vehicle = std::make_shared(static_cast(_args[1]), _object, false, _args[3]); vehicles[static_cast(_args[1])] = _vehicle; diff --git a/extensions/vd/model_collection.cpp b/extensions/vd/model_collection.cpp index 6ff727842e..2b9245045e 100644 --- a/extensions/vd/model_collection.cpp +++ b/extensions/vd/model_collection.cpp @@ -71,7 +71,7 @@ namespace ace { return true; } - bool model_collection::load_model(const std::string & p3d_path) { + bool model_collection::load_model(const std::string & p3d_path, std::string &key_name) { std::string working_path = p3d_path; // Flag ourselves as unready, because we are loading a model @@ -91,6 +91,7 @@ namespace ace { auto iter = _pbo_searcher->file_index().find(working_path); if (iter != _pbo_searcher->file_index().end()) { + key_name = working_path; return _load_model(iter->first, iter->second); } diff --git a/extensions/vd/model_collection.hpp b/extensions/vd/model_collection.hpp index d77381641f..12eb478441 100644 --- a/extensions/vd/model_collection.hpp +++ b/extensions/vd/model_collection.hpp @@ -19,7 +19,7 @@ namespace ace { class model_collection : public singleton { public: model_collection(); - bool load_model(const std::string & p3d_path); + bool load_model(const std::string & p3d_path, std::string & key_name); bool init(); bool reset();