Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2011-03-27 15:19:19 +0000
committerStijn Buys <ingar@osirion.org>2011-03-27 15:19:19 +0000
commit6c2075993d68dbacf011756508f957cea1bde845 (patch)
treec97f2707eb5d36ee33a785139f6ce9e1eb8272a1 /src/model/mapfile.cc
parentbf84493becfe1a08e9cb906fb85c7268c3a6c910 (diff)
Corrected rotating fragmentgroups imported from submodels.
Diffstat (limited to 'src/model/mapfile.cc')
-rw-r--r--src/model/mapfile.cc52
1 files changed, 31 insertions, 21 deletions
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);
}