Browse Source

*** empty log message ***

Joe Shochet 25 years ago
parent
commit
a6cdf3d9e6

+ 16 - 16
direct/src/gui/ScrollingLabel.py

@@ -51,18 +51,18 @@ class ScrollingLabel(PandaObject.PandaObject):
         self.frame.makeWideAsWidest()
         self.frame.makeWideAsWidest()
         
         
         # create the scroll buttons
         # create the scroll buttons
-        self.leftButton = Button.Button(self.name + "-left", " < ")
-        self.leftButton.getGuiItem().setDownRolloverEvent(self.name + "-left")
-        self.leftButton.getGuiItem().setUpRolloverEvent(self.name + "-rollover")
+        self.leftButton = Button.Button(self.eventName + "-left", " < ")
+        self.leftButton.getGuiItem().setDownRolloverEvent(self.eventName + "-left")
+        self.leftButton.getGuiItem().setUpRolloverEvent(self.eventName + "-rollover")
         self.frame.addItem(self.leftButton)
         self.frame.addItem(self.leftButton)
         self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.UNDER,
         self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.UNDER,
                             self.title)
                             self.title)
         self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.LEFT,
         self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.LEFT,
                             self.title)        
                             self.title)        
-        self.rightButton = Button.Button(self.name + "-right", " > ")
-        self.rightButton.getGuiItem().setDownRolloverEvent(self.name +
+        self.rightButton = Button.Button(self.eventName + "-right", " > ")
+        self.rightButton.getGuiItem().setDownRolloverEvent(self.eventName +
                                                            "-right")    
                                                            "-right")    
-        self.rightButton.getGuiItem().setUpRolloverEvent(self.name + "-rollover")
+        self.rightButton.getGuiItem().setUpRolloverEvent(self.eventName + "-rollover")
         self.frame.addItem(self.rightButton)
         self.frame.addItem(self.rightButton)
         self.frame.packItem(self.rightButton, GuiFrame.GuiFrame.UNDER,
         self.frame.packItem(self.rightButton, GuiFrame.GuiFrame.UNDER,
                             self.title)
                             self.title)
@@ -70,8 +70,8 @@ class ScrollingLabel(PandaObject.PandaObject):
                             self.title)        
                             self.title)        
 
 
         # listen for the scroll buttons
         # listen for the scroll buttons
-        #self.accept(self.name + "-left", self.handleLeftButton)
-        #self.accept(self.name + "-right", self.handleRightButton)
+        #self.accept(self.eventName + "-left", self.handleLeftButton)
+        #self.accept(self.eventName + "-right", self.handleRightButton)
         
         
         # listen for keyboard hits
         # listen for keyboard hits
         #self.setKeyFocus(0)
         #self.setKeyFocus(0)
@@ -87,9 +87,9 @@ class ScrollingLabel(PandaObject.PandaObject):
 	"""cleanup(self)
 	"""cleanup(self)
 	"""
 	"""
         # ignore events
         # ignore events
-        self.ignore(self.name + "-left")
-        self.ignore(self.name + "-right")
-	self.ignore(self.name + "-rollover")
+        self.ignore(self.eventName + "-left")
+        self.ignore(self.eventName + "-right")
+	self.ignore(self.eventName + "-rollover")
         self.setKeyFocus(0)
         self.setKeyFocus(0)
 
 
         # remove gui items
         # remove gui items
@@ -160,8 +160,8 @@ class ScrollingLabel(PandaObject.PandaObject):
         
         
     def manage(self):
     def manage(self):
         # listen for the scroll buttons
         # listen for the scroll buttons
-        self.accept(self.name + "-left", self.handleLeftButton)
-        self.accept(self.name + "-right", self.handleRightButton)
+        self.accept(self.eventName + "-left", self.handleLeftButton)
+        self.accept(self.eventName + "-right", self.handleRightButton)
 
 
         self.frame.manage()
         self.frame.manage()
         self.setKeyFocus(0)
         self.setKeyFocus(0)
@@ -174,9 +174,9 @@ class ScrollingLabel(PandaObject.PandaObject):
         self.ignore("right-up")            
         self.ignore("right-up")            
 
 
         # ignore events
         # ignore events
-        self.ignore(self.name + "-left")
-        self.ignore(self.name + "-right")
-	self.ignore(self.name + "-rollover")
+        self.ignore(self.eventName + "-left")
+        self.ignore(self.eventName + "-right")
+	self.ignore(self.eventName + "-rollover")
         self.setKeyFocus(0)
         self.setKeyFocus(0)
 
 
         self.frame.unmanage()
         self.frame.unmanage()

+ 3 - 4
direct/src/showbase/Loader.py

@@ -49,10 +49,9 @@ class Loader:
         then attempt to load it from disk. Return a nodepath to
         then attempt to load it from disk. Return a nodepath to
         a copy of the model if successful or None otherwise"""
         a copy of the model if successful or None otherwise"""
         Loader.notify.info("Loading model copy: %s" % (modelPath))
         Loader.notify.info("Loading model copy: %s" % (modelPath))
-        # utilize load once goodness
-        nodePath = self.loadModelOnce(modelPath)
-        if (nodePath != None):
-            return (nodePath.copyTo(self.base.hidden))
+        node = ModelPool.loadModel(modelPath)
+        if (node != None):
+            return (NodePath(node).copyTo(self.base.hidden))
         else:
         else:
             return None
             return None
 
 

+ 15 - 0
direct/src/showbase/PythonUtil.py

@@ -1,5 +1,6 @@
 import types
 import types
 import re
 import re
+import math
 
 
 def ifAbsentPut(dict, key, newValue):
 def ifAbsentPut(dict, key, newValue):
     """
     """
@@ -165,3 +166,17 @@ def intersection(a, b):
             if (i not in d):
             if (i not in d):
                 d.append(i)
                 d.append(i)
     return d   
     return d   
+
+def reduceAngle(deg):
+    """
+    Reduces an angle (in degrees) to a value between -180. and 180.
+    """
+    return (math.fmod((deg + 180.0), 360.0) - 180.0)
+
+def shortestDestAngle(src, dest):
+    """
+    Returns a version of dest that is numerically closest to src. It is
+    assumed that src is between -180. and 180.
+    Example: (shortest-dest-angle 50. -170.) --> 190.
+    """
+    return (src + (reduceAngle(reduceAngle(dest) - reduceAngle(src))))

+ 39 - 7
direct/src/task/Task.py

@@ -33,6 +33,10 @@ class Task:
         self.__call__ = callback
         self.__call__ = callback
         self._priority = priority
         self._priority = priority
         self.uponDeath = None
         self.uponDeath = None
+        self.dt = 0.0
+        self.maxDt = 0.0
+        self.avgDt = 0.0
+        self.runningTotal = 0.0
 
 
     def getPriority(self):
     def getPriority(self):
         return self._priority
         return self._priority
@@ -322,7 +326,6 @@ class TaskManager:
         standard shell globbing characters like *, ?, and [].
         standard shell globbing characters like *, ?, and [].
 
 
         """
         """
-        
         TaskManager.notify.debug('removing tasks matching: ' + taskPattern)
         TaskManager.notify.debug('removing tasks matching: ' + taskPattern)
         removedTasks = []
         removedTasks = []
 
 
@@ -343,13 +346,28 @@ class TaskManager:
         self.currentTime, self.currentFrame = getTimeFrame()
         self.currentTime, self.currentFrame = getTimeFrame()
         for task in self.taskList:
         for task in self.taskList:
             task.setCurrentTimeFrame(self.currentTime, self.currentFrame)
             task.setCurrentTimeFrame(self.currentTime, self.currentFrame)
+
             # Run the task and check the return value
             # Run the task and check the return value
-            # Record the dt
-            startTime = globalClock.getTime()
+            startTime = time.clock()
             ret = task(task)
             ret = task(task)
-            endTime = globalClock.getTime()
+            endTime = time.clock()
+
+            # Record the dt
             dt = endTime - startTime
             dt = endTime - startTime
             task.dt = dt
             task.dt = dt
+            
+            # See if this is the new max
+            if dt > task.maxDt:
+                task.maxDt = dt
+            
+            # Record the running total of all dts so we can compute an average
+            task.runningTotal = task.runningTotal + dt
+            if (task.frame > 0):
+                task.avgDt = (task.runningTotal / task.frame)
+            else:
+                task.avgDt = 0
+
+            # See if the task is done
             if (ret == cont):
             if (ret == cont):
                 continue
                 continue
             elif (ret == done):
             elif (ret == done):
@@ -403,19 +421,33 @@ class TaskManager:
         return 0
         return 0
 
 
     def __repr__(self):
     def __repr__(self):
+        import fpformat
         taskNameWidth = 32
         taskNameWidth = 32
-        dtWidth = 6
+        dtWidth = 7
         priorityWidth = 10
         priorityWidth = 10
+        totalDt = 0
+        totalAvgDt = 0
         str = ('taskList'.ljust(taskNameWidth)
         str = ('taskList'.ljust(taskNameWidth)
                + 'dt(ms)'.rjust(dtWidth)
                + 'dt(ms)'.rjust(dtWidth)
+               + 'avg'.rjust(dtWidth)
+               + 'max'.rjust(dtWidth)
                + 'priority'.rjust(priorityWidth)
                + 'priority'.rjust(priorityWidth)
                + '\n')
                + '\n')
-        str = str + '------------------------------------------------\n'
+        str = str + '---------------------------------------------------------------\n'
         for task in self.taskList:
         for task in self.taskList:
+            totalDt = totalDt + task.dt
+            totalAvgDt = totalAvgDt + task.avgDt
             str = str + (task.name.ljust(taskNameWidth)
             str = str + (task.name.ljust(taskNameWidth)
-                         + `int(round(task.dt * 1000))`.rjust(dtWidth)
+                         + fpformat.fix(task.dt*1000, 2).rjust(dtWidth)
+                         + fpformat.fix(task.avgDt*1000, 2).rjust(dtWidth)
+                         + fpformat.fix(task.maxDt*1000, 2).rjust(dtWidth)
                          + `task.getPriority()`.rjust(priorityWidth)
                          + `task.getPriority()`.rjust(priorityWidth)
                          + '\n')
                          + '\n')
+        str = str + '---------------------------------------------------------------\n'
+        str = str + ('total'.ljust(taskNameWidth)
+                     + fpformat.fix(totalDt*1000, 2).rjust(dtWidth)
+                     + fpformat.fix(totalAvgDt*1000, 2).rjust(dtWidth)
+                     + '\n')
         return str
         return str