Browse Source

*** empty log message ***

Mark Mine 24 years ago
parent
commit
61d882ddd4
1 changed files with 18 additions and 6 deletions
  1. 18 6
      direct/src/directutil/Mopath.py

+ 18 - 6
direct/src/directutil/Mopath.py

@@ -12,21 +12,23 @@ class Mopath(PandaObject):
             name = 'mopath%d' % self.nameIndex
             self.nameIndex = self.nameIndex + 1
         self.name = name
+        self.tPoint = Point3(0)
         self.reset()
 
     def getMaxT(self):
         return self.maxT
 
     def loadFile(self, filename):
+        self.reset()
         nodePath = loader.loadModel(filename)
         if nodePath:
             self.__extractCurves(nodePath)
-            if (self.xyzNurbsCurve != None):
+            if (self.tNurbsCurve != None):
+                self.maxT = self.tNurbsCurve[-1].getMaxT()
+            elif (self.xyzNurbsCurve != None):
                 self.maxT = self.xyzNurbsCurve.getMaxT()
             elif (self.hprNurbsCurve != None):
                 self.maxT = self.hprNurbsCurve.getMaxT()
-            elif (self.tNurbsCurve != None):
-                self.maxT = self.tNurbsCurve.getMaxT()
             else:
                 print 'Mopath: no valid curves in file: %s' % filename
 
@@ -40,7 +42,7 @@ class Mopath(PandaObject):
         self.loop = 0
         self.xyzNurbsCurve = None
         self.hprNurbsCurve = None
-        self.tNurbsCurve = None
+        self.tNurbsCurve = []
         self.node = None
 
     def __extractCurves(self, nodePath):
@@ -56,12 +58,22 @@ class Mopath(PandaObject):
                 else:
                     print 'Mopath: got a PCT_NONE curve and an XYZ Curve!'
             elif (node.getCurveType() == PCTT):
-                self.tNurbsCurve = node
+                self.tNurbsCurve.append(node)
         else:
             # Iterate over children if any
             for child in nodePath.getChildrenAsList():
                 self.__extractCurves(child)
 
+    def calcTime(self, tIn):
+        return self.__calcTime(tIn, self.tNurbsCurve)
+
+    def __calcTime(self, tIn, tCurveList):
+        if tCurveList:
+            tCurveList[-1].getPoint(tIn, self.tPoint)
+            return self.__calcTime(self.tPoint[0], tCurveList[:-1])
+        else:
+            return tIn
+
     def getFinalState(self):
         """ getFinalState()
         """
@@ -77,7 +89,7 @@ class Mopath(PandaObject):
         if (self.xyzNurbsCurve == None) and (self.hprNurbsCurve == None):
             print 'Mopath: Mopath has no curves'
             return
-        self.playbackTime = CLAMP(time, 0.0, self.maxT)
+        self.playbackTime = self.calcTime(CLAMP(time, 0.0, self.maxT))
         if (self.xyzNurbsCurve != None):
             pos = Point3(0)
             self.xyzNurbsCurve.getPoint(self.playbackTime, pos)