From a6cdf3d9e6ef16922913b155efbb2ce23ae183f0 Mon Sep 17 00:00:00 2001 From: Joe Shochet Date: Mon, 19 Feb 2001 07:24:13 +0000 Subject: [PATCH] *** empty log message *** --- direct/src/gui/ScrollingLabel.py | 32 ++++++++++----------- direct/src/showbase/Loader.py | 7 ++--- direct/src/showbase/PythonUtil.py | 15 ++++++++++ direct/src/task/Task.py | 46 ++++++++++++++++++++++++++----- 4 files changed, 73 insertions(+), 27 deletions(-) diff --git a/direct/src/gui/ScrollingLabel.py b/direct/src/gui/ScrollingLabel.py index 087f3c6589..ef706c661d 100644 --- a/direct/src/gui/ScrollingLabel.py +++ b/direct/src/gui/ScrollingLabel.py @@ -51,18 +51,18 @@ class ScrollingLabel(PandaObject.PandaObject): self.frame.makeWideAsWidest() # 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.packItem(self.leftButton, GuiFrame.GuiFrame.UNDER, self.title) self.frame.packItem(self.leftButton, GuiFrame.GuiFrame.LEFT, 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") - self.rightButton.getGuiItem().setUpRolloverEvent(self.name + "-rollover") + self.rightButton.getGuiItem().setUpRolloverEvent(self.eventName + "-rollover") self.frame.addItem(self.rightButton) self.frame.packItem(self.rightButton, GuiFrame.GuiFrame.UNDER, self.title) @@ -70,8 +70,8 @@ class ScrollingLabel(PandaObject.PandaObject): self.title) # 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 #self.setKeyFocus(0) @@ -87,9 +87,9 @@ class ScrollingLabel(PandaObject.PandaObject): """cleanup(self) """ # 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) # remove gui items @@ -160,8 +160,8 @@ class ScrollingLabel(PandaObject.PandaObject): def manage(self): # 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.setKeyFocus(0) @@ -174,9 +174,9 @@ class ScrollingLabel(PandaObject.PandaObject): self.ignore("right-up") # 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.frame.unmanage() diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index 262664fffc..007a4b7092 100644 --- a/direct/src/showbase/Loader.py +++ b/direct/src/showbase/Loader.py @@ -49,10 +49,9 @@ class Loader: then attempt to load it from disk. Return a nodepath to a copy of the model if successful or None otherwise""" 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: return None diff --git a/direct/src/showbase/PythonUtil.py b/direct/src/showbase/PythonUtil.py index 73c054de30..975c2b3f78 100644 --- a/direct/src/showbase/PythonUtil.py +++ b/direct/src/showbase/PythonUtil.py @@ -1,5 +1,6 @@ import types import re +import math def ifAbsentPut(dict, key, newValue): """ @@ -165,3 +166,17 @@ def intersection(a, b): if (i not in d): d.append(i) 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)))) diff --git a/direct/src/task/Task.py b/direct/src/task/Task.py index 649f4eba77..515d5d1936 100644 --- a/direct/src/task/Task.py +++ b/direct/src/task/Task.py @@ -33,6 +33,10 @@ class Task: self.__call__ = callback self._priority = priority self.uponDeath = None + self.dt = 0.0 + self.maxDt = 0.0 + self.avgDt = 0.0 + self.runningTotal = 0.0 def getPriority(self): return self._priority @@ -322,7 +326,6 @@ class TaskManager: standard shell globbing characters like *, ?, and []. """ - TaskManager.notify.debug('removing tasks matching: ' + taskPattern) removedTasks = [] @@ -343,13 +346,28 @@ class TaskManager: self.currentTime, self.currentFrame = getTimeFrame() for task in self.taskList: task.setCurrentTimeFrame(self.currentTime, self.currentFrame) + # Run the task and check the return value - # Record the dt - startTime = globalClock.getTime() + startTime = time.clock() ret = task(task) - endTime = globalClock.getTime() + endTime = time.clock() + + # Record the dt dt = endTime - startTime 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): continue elif (ret == done): @@ -403,19 +421,33 @@ class TaskManager: return 0 def __repr__(self): + import fpformat taskNameWidth = 32 - dtWidth = 6 + dtWidth = 7 priorityWidth = 10 + totalDt = 0 + totalAvgDt = 0 str = ('taskList'.ljust(taskNameWidth) + 'dt(ms)'.rjust(dtWidth) + + 'avg'.rjust(dtWidth) + + 'max'.rjust(dtWidth) + 'priority'.rjust(priorityWidth) + '\n') - str = str + '------------------------------------------------\n' + str = str + '---------------------------------------------------------------\n' for task in self.taskList: + totalDt = totalDt + task.dt + totalAvgDt = totalAvgDt + task.avgDt 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) + '\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