From 6c2075993d68dbacf011756508f957cea1bde845 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 27 Mar 2011 15:19:19 +0000 Subject: Corrected rotating fragmentgroups imported from submodels. --- src/model/mapfile.cc | 52 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 21 deletions(-) (limited to 'src/model/mapfile.cc') diff --git a/src/model/mapfile.cc b/src/model/mapfile.cc index 698a0f6..8f8e87c 100644 --- a/src/model/mapfile.cc +++ b/src/model/mapfile.cc @@ -1160,34 +1160,45 @@ void MapFile::load_fragmentgroup(Model *model, const FragmentGroup::Type class_t { if (!map_materials.size()) return; - - FragmentGroup *group = new FragmentGroup(); - - if (class_type == FragmentGroup::Rotate) { - if (class_speed == 0) { - // default rotation speed 45 degrees per second - class_speed = 45.0f; - } - group->set_speed(class_speed); - group->set_engine(class_engine); - } else if (class_type == FragmentGroup::Move) { - group->set_speed(class_speed); - group->set_distance(class_distance); - group->set_engine(class_engine); - } - // expand bounding box map_box.expand(class_box); // special groups like func_door and func_group are re-centered math::Vector3f translation((class_box.min() + class_box.max()) * 0.5f); - group->set_transform(true); + FragmentGroup *group = new FragmentGroup(); group->set_location(translation); group->set_type(class_type); - group->set_axis(class_axis); - group->set_speed(class_speed); + + // these fragmentgroups are on the same level as worldspawn (no submodels) + // their axis is always the default + + switch (class_type) { + case FragmentGroup::None: + break; + + case FragmentGroup::Rotate: + if (class_speed == 0) { + // default rotation speed 45 degrees per second + class_speed = 45.0f; + } + group->set_speed(class_speed); + group->set_engine(class_engine); + group->set_movement(class_axis.forward()); + break; + + case FragmentGroup::Move: + group->set_speed(class_speed); + group->set_distance(class_distance); + group->set_engine(class_engine); + group->set_movement(class_axis.forward()); + break; + + case FragmentGroup::Door: + group->set_speed(class_speed); + break; + } for (Materials::iterator mit = map_materials.begin(); mit != map_materials.end(); mit++) { // split the Primitives with this material into fragments @@ -1795,7 +1806,7 @@ Model * MapFile::load(std::string const &name) FragmentGroup *groupsrc = (*git); FragmentGroup *groupdst = new FragmentGroup(); - groupdst->set_transform(true); + groupdst->set_movement(groupsrc->movement()); groupdst->set_type(groupsrc->type()); groupdst->set_scale(groupsrc->scale() * tag_submodel->scale()); groupdst->set_engine(groupsrc->engine()); @@ -1881,7 +1892,6 @@ Model * MapFile::load(std::string const &name) // translate transformed vertex groups for (Model::Groups::iterator git = model->groups().begin(); git != model->groups().end(); git++) { FragmentGroup *fragmentgroup = (*git); - fragmentgroup->set_transform(true); fragmentgroup->set_location(fragmentgroup->location() - map_center); } -- cgit v1.2.3