]> git.mxchange.org Git - flightgear.git/commitdiff
Make an animation with no object name apply to the model as a whole.
authordavid <david>
Sat, 20 Apr 2002 17:07:47 +0000 (17:07 +0000)
committerdavid <david>
Sat, 20 Apr 2002 17:07:47 +0000 (17:07 +0000)
This replaces the old "range" subtree with something more general.

src/Model/model.cxx
src/Model/model.hxx

index d8cea383f0d7719eb6074a3e22ab4d209efaa99a..01f0c2e8c826773fd861b6e0345f8ba70965a8f3 100644 (file)
@@ -162,12 +162,9 @@ FG3DModel::~FG3DModel ()
   // since the nodes are attached to the scene graph, they'll be
   // deleted automatically
 
-  for (int i = 0; i < _animations.size(); i++) {
-    Animation * tmp = _animations[i];
-    _animations[i] = 0;
-    delete tmp;
-  }
-
+  int i;
+  for (i = 0; i < _animations.size(); i++)
+    delete _animations[i];
 }
 
 void 
@@ -194,39 +191,13 @@ FG3DModel::init (const string &path)
                                 // Assume that textures are in
                                 // the same location as the XML file.
   ssgTexturePath((char *)xmlpath.dir().c_str());
-  _model = ssgLoad((char *)modelpath.c_str());
+  _model = (ssgBranch *)ssgLoad((char *)modelpath.c_str());
   if (_model == 0)
     throw sg_exception("Failed to load 3D model");
 
-                                // Load animations
-  vector<SGPropertyNode *> animation_nodes = props.getChildren("animation");
-  for (unsigned int i = 0; i < animation_nodes.size(); i++) {
-    vector<SGPropertyNode *> name_nodes =
-      animation_nodes[i]->getChildren("object-name");
-    if (name_nodes.size() < 1) {
-      SG_LOG(SG_INPUT, SG_ALERT, "No object-name given for transformation");
-    } else {
-      for (unsigned int j = 0; j < name_nodes.size(); j++) {
-        Animation * animation =
-          make_animation(name_nodes[j]->getStringValue(), animation_nodes[i]);
-        if (animation != 0)
-          _animations.push_back(animation);
-      }
-    }
-  }
-
-                                // Set up the range selector node
-  float ranges[2];
-  ssgRangeSelector * lod = new ssgRangeSelector;
-  lod->addKid(_model);
-  ranges[0] = props.getFloatValue("range/min-m", 0);
-  ranges[1] = props.getFloatValue("range/max-m", 5000);
-  lod->setRanges(ranges, 2);
-
-
                                 // Set up the alignment node
   ssgTransform * align = new ssgTransform;
-  align->addKid(lod);
+  align->addKid(_model);
   sgMat4 rot_matrix;
   sgMat4 off_matrix;
   sgMat4 res_matrix;
@@ -251,6 +222,23 @@ FG3DModel::init (const string &path)
                                 // Set up a location class
   _location = (FGLocation *) new FGLocation;
 
+                                // Load animations
+  vector<SGPropertyNode *> animation_nodes = props.getChildren("animation");
+  unsigned int i;
+  for (i = 0; i < animation_nodes.size(); i++) {
+    vector<SGPropertyNode *> name_nodes =
+      animation_nodes[i]->getChildren("object-name");
+    if (name_nodes.size() < 1) {
+      Animation * animation = make_animation(0, animation_nodes[i]);
+    } else {
+      for (unsigned int j = 0; j < name_nodes.size(); j++) {
+        Animation * animation =
+          make_animation(name_nodes[j]->getStringValue(), animation_nodes[i]);
+        if (animation != 0)
+          _animations.push_back(animation);
+      }
+    }
+  }
 }
 
 void
@@ -367,15 +355,19 @@ FG3DModel::make_animation (const char * object_name,
     SG_LOG(SG_INPUT, SG_WARN, "Unknown animation type " << type);
   }
 
-  ssgEntity * object = find_named_node(_model, object_name);
-  if (object == 0) {
-    SG_LOG(SG_INPUT, SG_WARN, "Object " << object_name << " not found");
-    delete animation;
-    animation = 0;
+  ssgEntity * object;
+  if (object_name != 0) {
+    object = find_named_node(_model, object_name);
+    if (object == 0) {
+      SG_LOG(SG_INPUT, SG_WARN, "Object " << object_name << " not found");
+      delete animation;
+      animation = 0;
+    }
   } else {
-    animation->init(object, node);
+    object = _model;
   }
 
+  animation->init(object, node);
   return animation;
 }
 
index 82f7891c4db4249518f0e719bf56d18a67adb1ee..86ceb019fbfc2dd8ad03a5d60ac54fb0744fda4e 100644 (file)
@@ -18,6 +18,7 @@ SG_USING_STD(vector);
 
 
 // Don't pull in the headers, since we don't need them here.
+class ssgBranch;
 class ssgEntity;
 class ssgRangeSelector;
 class ssgSelector;
@@ -89,12 +90,10 @@ private:
   double _heading_deg;
 
                                // Animations
-
   vector <Animation *> _animations;
 
-
                                // Scene graph
-  ssgEntity * _model;
+  ssgBranch * _model;
   ssgSelector * _selector;
   ssgTransform * _position;