mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-27 23:34:57 -04:00
direct: Add base.clock
, deprecate globalClock
This commit is contained in:
parent
a0c2f2ff3b
commit
eefcae7b05
@ -122,9 +122,10 @@ class ClusterClient(DirectObject.DirectObject):
|
||||
taskMgr.add(self.synchronizeTimeTask, "synchronizeTimeTask", -40)
|
||||
|
||||
def synchronizeTimeTask(self, task):
|
||||
frameCount = globalClock.getFrameCount()
|
||||
frameTime = globalClock.getFrameTime()
|
||||
dt = globalClock.getDt()
|
||||
clock = ClockObject.getGlobalClock()
|
||||
frameCount = clock.getFrameCount()
|
||||
frameTime = clock.getFrameTime()
|
||||
dt = clock.dt
|
||||
for server in self.serverList:
|
||||
server.sendTimeData(frameCount, frameTime, dt)
|
||||
return Task.cont
|
||||
|
@ -52,7 +52,7 @@ class ClusterServer(DirectObject.DirectObject):
|
||||
self.startSwapCoordinator()
|
||||
base.graphicsEngine.setAutoFlip(0)
|
||||
# Set global clock mode to slave mode
|
||||
globalClock.setMode(ClockObject.MSlave)
|
||||
ClockObject.getGlobalClock().setMode(ClockObject.MSlave)
|
||||
# Send verification of startup to client
|
||||
self.daemon = DirectD()
|
||||
|
||||
@ -335,9 +335,10 @@ class ClusterServer(DirectObject.DirectObject):
|
||||
""" Update cameraJig position to reflect latest position """
|
||||
(frameCount, frameTime, dt) = self.msgHandler.parseTimeDataDatagram(dgi)
|
||||
# Use frame time from client for both real and frame time
|
||||
globalClock.setFrameCount(frameCount)
|
||||
globalClock.setFrameTime(frameTime)
|
||||
globalClock.setDt(dt)
|
||||
clock = ClockObject.getGlobalClock()
|
||||
clock.setFrameCount(frameCount)
|
||||
clock.setFrameTime(frameTime)
|
||||
clock.dt = dt
|
||||
|
||||
def handleCommandString(self, dgi):
|
||||
""" Handle arbitrary command string from client """
|
||||
|
@ -13,7 +13,7 @@ base.camera.setPosHpr(0, -10.0, 0, 0, 0, 0)
|
||||
base.camLens.setFov(52.0)
|
||||
base.camLens.setNearFar(1.0, 10000.0)
|
||||
|
||||
globalClock.setMaxDt(0.2)
|
||||
base.clock.setMaxDt(0.2)
|
||||
base.enableParticles()
|
||||
|
||||
# Force the screen to update:
|
||||
|
@ -15,7 +15,7 @@ base.camera.setPosHpr(0, -10.0, 0, 0, 0, 0)
|
||||
base.camLens.setFov(52.0)
|
||||
base.camLens.setNearFar(1.0, 10000.0)
|
||||
|
||||
globalClock.setMaxDt(0.2)
|
||||
base.clock.setMaxDt(0.2)
|
||||
base.enableParticles()
|
||||
base.addAngularIntegrator()
|
||||
|
||||
|
@ -5,6 +5,8 @@ from direct.directtools.DirectUtil import *
|
||||
from direct.gui import OnscreenText
|
||||
from direct.task import Task
|
||||
from direct.task.TaskManagerGlobal import taskMgr
|
||||
from panda3d.core import ClockObject
|
||||
|
||||
import math
|
||||
|
||||
#TODO: Handle interaction between widget, followSelectedTask and updateTask
|
||||
@ -58,7 +60,7 @@ class DirectJoybox(DirectObject):
|
||||
R_TWIST, L_TWIST, NULL_AXIS]
|
||||
self.modifier = [1, 1, 1, -1, -1, 0]
|
||||
# Initialize time
|
||||
self.lastTime = globalClock.getFrameTime()
|
||||
self.lastTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
# Record node path
|
||||
self.nodePath = nodePath
|
||||
self.headingNP = headingNP
|
||||
@ -148,7 +150,7 @@ class DirectJoybox(DirectObject):
|
||||
|
||||
def updateVals(self):
|
||||
# Update delta time
|
||||
cTime = globalClock.getFrameTime()
|
||||
cTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
self.deltaTime = cTime - self.lastTime
|
||||
self.lastTime = cTime
|
||||
# Update analogs
|
||||
@ -164,7 +166,7 @@ class DirectJoybox(DirectObject):
|
||||
|
||||
def updateValsUnrolled(self):
|
||||
# Update delta time
|
||||
cTime = globalClock.getFrameTime()
|
||||
cTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
self.deltaTime = cTime - self.lastTime
|
||||
self.lastTime = cTime
|
||||
# Update analogs
|
||||
|
@ -129,8 +129,8 @@ class DirectCameraControl(DirectObject):
|
||||
# Hide the marker for this kind of motion
|
||||
self.coaMarker.hide()
|
||||
# Record time of start of mouse interaction
|
||||
self.startT= globalClock.getFrameTime()
|
||||
self.startF = globalClock.getFrameCount()
|
||||
self.startT = base.clock.getFrameTime()
|
||||
self.startF = base.clock.getFrameCount()
|
||||
# If the cam is orthogonal, spawn differentTask
|
||||
if hasattr(base.direct, "manipulationControl") and base.direct.manipulationControl.fMultiView and\
|
||||
base.direct.camera.getName() != 'persp':
|
||||
@ -169,8 +169,8 @@ class DirectCameraControl(DirectObject):
|
||||
# Hide the marker for this kind of motion
|
||||
self.coaMarker.hide()
|
||||
# Record time of start of mouse interaction
|
||||
self.startT= globalClock.getFrameTime()
|
||||
self.startF = globalClock.getFrameCount()
|
||||
self.startT = base.clock.getFrameTime()
|
||||
self.startF = base.clock.getFrameCount()
|
||||
# Start manipulation
|
||||
# If the cam is orthogonal, spawn differentTask
|
||||
if hasattr(base.direct, "manipulationControl") and base.direct.manipulationControl.fMultiView and\
|
||||
@ -186,8 +186,8 @@ class DirectCameraControl(DirectObject):
|
||||
# Hide the marker for this kind of motion
|
||||
self.coaMarker.hide()
|
||||
# Record time of start of mouse interaction
|
||||
self.startT= globalClock.getFrameTime()
|
||||
self.startF = globalClock.getFrameCount()
|
||||
self.startT = base.clock.getFrameTime()
|
||||
self.startF = base.clock.getFrameCount()
|
||||
# Start manipulation
|
||||
self.spawnXZTranslateOrHPanYZoom()
|
||||
# END MOUSE IN CENTRAL REGION
|
||||
@ -204,9 +204,9 @@ class DirectCameraControl(DirectObject):
|
||||
|
||||
def mouseFlyStop(self):
|
||||
self.__stopManipulateCamera()
|
||||
stopT = globalClock.getFrameTime()
|
||||
stopT = base.clock.getFrameTime()
|
||||
deltaT = stopT - self.startT
|
||||
stopF = globalClock.getFrameCount()
|
||||
stopF = base.clock.getFrameCount()
|
||||
deltaF = stopF - self.startF
|
||||
## No reason this shouldn't work with Maya cam on
|
||||
# if not self.useMayaCamControls and (deltaT <= 0.25) or (deltaF <= 1):
|
||||
|
@ -36,7 +36,7 @@ def lerpBackgroundColor(r, g, b, duration):
|
||||
Function to lerp background color to a new value
|
||||
"""
|
||||
def lerpColor(state):
|
||||
dt = globalClock.getDt()
|
||||
dt = base.clock.getDt()
|
||||
state.time += dt
|
||||
sf = state.time / state.duration
|
||||
if sf >= 1.0:
|
||||
|
@ -2,7 +2,8 @@ from direct.showbase.DirectObject import DirectObject
|
||||
from direct.showbase.MessengerGlobal import messenger
|
||||
from direct.directtools.DirectGeometry import *
|
||||
|
||||
from panda3d.core import NodePath, LineSegs
|
||||
from panda3d.core import NodePath, LineSegs, ClockObject
|
||||
|
||||
|
||||
class Mopath(DirectObject):
|
||||
|
||||
@ -152,13 +153,13 @@ class Mopath(DirectObject):
|
||||
self.stop()
|
||||
t = taskMgr.add(self.__playTask, self.name + '-play')
|
||||
t.currentTime = time
|
||||
t.lastTime = globalClock.getFrameTime()
|
||||
t.lastTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
|
||||
def stop(self):
|
||||
taskMgr.remove(self.name + '-play')
|
||||
|
||||
def __playTask(self, task):
|
||||
time = globalClock.getFrameTime()
|
||||
time = ClockObject.getGlobalClock().getFrameTime()
|
||||
dTime = time - task.lastTime
|
||||
task.lastTime = time
|
||||
if self.loop:
|
||||
|
@ -6,7 +6,7 @@ from direct.showbase.MessengerGlobal import messenger
|
||||
from .MsgTypesCMU import *
|
||||
from .PyDatagram import PyDatagram
|
||||
from .PyDatagramIterator import PyDatagramIterator
|
||||
from panda3d.core import UniqueIdAllocator, Notify
|
||||
from panda3d.core import UniqueIdAllocator, Notify, ClockObject
|
||||
|
||||
|
||||
class ClientRepository(ClientRepositoryBase):
|
||||
@ -281,7 +281,7 @@ class ClientRepository(ClientRepositoryBase):
|
||||
datagram.addUint16(CLIENT_HEARTBEAT_CMU)
|
||||
# Send it!
|
||||
self.send(datagram)
|
||||
self.lastHeartbeat = globalClock.getRealTime()
|
||||
self.lastHeartbeat = ClockObject.getGlobalClock().getRealTime()
|
||||
# This is important enough to consider flushing immediately
|
||||
# (particularly if we haven't run readerPollTask recently).
|
||||
self.considerFlush()
|
||||
|
@ -186,7 +186,7 @@ class ClientRepositoryBase(ConnectionRepository):
|
||||
self.doGenerate(*args)
|
||||
|
||||
if deferrable:
|
||||
self.lastGenerate = globalClock.getFrameTime()
|
||||
self.lastGenerate = ClockObject.getGlobalClock().getFrameTime()
|
||||
|
||||
for dg, di in updates:
|
||||
# non-DC updates that need to be played back in-order are
|
||||
@ -207,7 +207,7 @@ class ClientRepositoryBase(ConnectionRepository):
|
||||
""" This is the task that generates an object on the deferred
|
||||
queue. """
|
||||
|
||||
now = globalClock.getFrameTime()
|
||||
now = ClockObject.getGlobalClock().getFrameTime()
|
||||
while self.deferredGenerates:
|
||||
if now - self.lastGenerate < self.deferInterval:
|
||||
# Come back later.
|
||||
@ -539,7 +539,7 @@ class ClientRepositoryBase(ConnectionRepository):
|
||||
self.notify.debug("Heartbeats not started; not sending.")
|
||||
return
|
||||
|
||||
elapsed = globalClock.getRealTime() - self.lastHeartbeat
|
||||
elapsed = ClockObject.getGlobalClock().getRealTime() - self.lastHeartbeat
|
||||
if elapsed < 0 or elapsed > self.heartbeatInterval:
|
||||
# It's time to send the heartbeat again (or maybe someone
|
||||
# reset the clock back).
|
||||
|
@ -187,7 +187,7 @@ class DistributedSmoothNode(DistributedNode.DistributedNode,
|
||||
reflect the node's current position
|
||||
"""
|
||||
if self.stopped:
|
||||
currTime = globalClock.getFrameTime()
|
||||
currTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
now = currTime - self.smoother.getExpectedBroadcastPeriod()
|
||||
last = self.smoother.getMostRecentTimestamp()
|
||||
if now > last:
|
||||
@ -348,6 +348,7 @@ class DistributedSmoothNode(DistributedNode.DistributedNode,
|
||||
self.smoother.setPhonyTimestamp()
|
||||
self.smoother.markPosition()
|
||||
else:
|
||||
globalClock = ClockObject.getGlobalClock()
|
||||
now = globalClock.getFrameTime()
|
||||
local = globalClockDelta.networkToLocalTime(timestamp, now)
|
||||
realTime = globalClock.getRealTime()
|
||||
|
@ -157,7 +157,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
||||
"""
|
||||
assert DoInterestManager.notify.debugCall()
|
||||
handle = self._getNextHandle()
|
||||
# print 'base.cr.addInterest(',description,',',handle,'):',globalClock.getFrameCount()
|
||||
# print 'base.cr.addInterest(',description,',',handle,'):',base.clock.getFrameCount()
|
||||
if self._noNewInterests:
|
||||
DoInterestManager.notify.warning(
|
||||
"addInterest: addingInterests on delete: %s" % (handle))
|
||||
@ -229,7 +229,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
||||
"""
|
||||
Stop looking in a (set of) zone(s)
|
||||
"""
|
||||
# print 'base.cr.removeInterest(',handle,'):',globalClock.getFrameCount()
|
||||
# print 'base.cr.removeInterest(',handle,'):',base.clock.getFrameCount()
|
||||
|
||||
assert DoInterestManager.notify.debugCall()
|
||||
assert isinstance(handle, InterestHandle)
|
||||
@ -567,7 +567,7 @@ class DoInterestManager(DirectObject.DirectObject):
|
||||
def checkMoreInterests():
|
||||
# if there are new interests, cancel this delayed callback, another
|
||||
# will automatically be scheduled when all interests complete
|
||||
# print 'checkMoreInterests(',self._completeEventCount.num,'):',globalClock.getFrameCount()
|
||||
# print 'checkMoreInterests(',self._completeEventCount.num,'):',base.clock.getFrameCount()
|
||||
return self._completeEventCount.num > 0
|
||||
def sendEvent():
|
||||
messenger.send(self.getAllInterestsCompleteEvent())
|
||||
|
@ -6,6 +6,7 @@ from direct.distributed import DistributedObject
|
||||
from direct.directnotify import DirectNotifyGlobal
|
||||
from direct.distributed.ClockDelta import globalClockDelta
|
||||
|
||||
|
||||
class TimeManager(DistributedObject.DistributedObject):
|
||||
"""
|
||||
This DistributedObject lives on the AI and on the client side, and
|
||||
@ -128,7 +129,7 @@ class TimeManager(DistributedObject.DistributedObject):
|
||||
The return value is true if the attempt is made, or false if
|
||||
it is too soon since the last attempt.
|
||||
"""
|
||||
now = globalClock.getRealTime()
|
||||
now = ClockObject.getGlobalClock().getRealTime()
|
||||
|
||||
if now - self.lastAttempt < self.minWait:
|
||||
self.notify.debug("Not resyncing (too soon): %s" % (description))
|
||||
@ -157,7 +158,8 @@ class TimeManager(DistributedObject.DistributedObject):
|
||||
determine the clock delta between the AI and the client
|
||||
machines.
|
||||
"""
|
||||
end = globalClock.getRealTime()
|
||||
clock = ClockObject.getGlobalClock()
|
||||
end = clock.getRealTime()
|
||||
|
||||
if context != self.thisContext:
|
||||
self.notify.info("Ignoring TimeManager response for old context %d" % (context))
|
||||
@ -177,7 +179,7 @@ class TimeManager(DistributedObject.DistributedObject):
|
||||
if globalClockDelta.getUncertainty() > self.maxUncertainty:
|
||||
if self.attemptCount < self.maxAttempts:
|
||||
self.notify.info("Uncertainty is too high, trying again.")
|
||||
self.start = globalClock.getRealTime()
|
||||
self.start = clock.getRealTime()
|
||||
self.sendUpdate("requestServerTime", [self.thisContext])
|
||||
return
|
||||
self.notify.info("Giving up on uncertainty requirement.")
|
||||
|
@ -137,22 +137,22 @@ if __name__ == "__main__":
|
||||
startTime = 0.0
|
||||
def printStart():
|
||||
global startTime
|
||||
startTime = globalClock.getFrameTime()
|
||||
startTime = base.clock.getFrameTime()
|
||||
print('Start')
|
||||
|
||||
def printPreviousStart():
|
||||
global startTime
|
||||
currTime = globalClock.getFrameTime()
|
||||
currTime = base.clock.getFrameTime()
|
||||
print('PREVIOUS_END %0.2f' % (currTime - startTime))
|
||||
|
||||
def printPreviousEnd():
|
||||
global startTime
|
||||
currTime = globalClock.getFrameTime()
|
||||
currTime = base.clock.getFrameTime()
|
||||
print('PREVIOUS_END %0.2f' % (currTime - startTime))
|
||||
|
||||
def printTrackStart():
|
||||
global startTime
|
||||
currTime = globalClock.getFrameTime()
|
||||
currTime = base.clock.getFrameTime()
|
||||
print('TRACK_START %0.2f' % (currTime - startTime))
|
||||
|
||||
def printArguments(a, b, c):
|
||||
|
@ -8,6 +8,7 @@ Refer LevelEditor.py for example.
|
||||
from direct.showbase.DirectObject import *
|
||||
from direct.directtools.DirectUtil import *
|
||||
from direct.gui.DirectGui import *
|
||||
from panda3d.core import ClockObject
|
||||
|
||||
from .CurveEditor import *
|
||||
from .FileMgr import *
|
||||
@ -385,7 +386,7 @@ class LevelEditorBase(DirectObject):
|
||||
alreadyExists = True
|
||||
break
|
||||
if not alreadyExists:
|
||||
time = globalClock.getRealTime() + 15
|
||||
time = ClockObject.getGlobalClock().getRealTime() + 15
|
||||
self.statusLines.append([time,status,color])
|
||||
|
||||
# update display of new status lines
|
||||
@ -407,7 +408,7 @@ class LevelEditorBase(DirectObject):
|
||||
def updateStatusReadoutTimeouts(self,task=None):
|
||||
removalList = []
|
||||
for currLine in self.statusLines:
|
||||
if globalClock.getRealTime() >= currLine[0]:
|
||||
if ClockObject.getGlobalClock().getRealTime() >= currLine[0]:
|
||||
removalList.append(currLine)
|
||||
for currRemoval in removalList:
|
||||
self.statusLines.remove(currRemoval)
|
||||
|
@ -150,9 +150,10 @@ class JobManager:
|
||||
self._useOverflowTime = ConfigVariableBool('job-use-overflow-time', 1).value
|
||||
|
||||
if len(self._pri2jobId2job) > 0:
|
||||
clock = ClockObject.getGlobalClock()
|
||||
#assert self.notify.debugCall()
|
||||
# figure out how long we can run
|
||||
endT = globalClock.getRealTime() + (self.getTimeslice() * .9)
|
||||
endT = clock.getRealTime() + (self.getTimeslice() * .9)
|
||||
while True:
|
||||
if self._jobIdGenerator is None:
|
||||
# round-robin the jobs, giving high-priority jobs more timeslices
|
||||
@ -173,7 +174,7 @@ class JobManager:
|
||||
# check if there's overflow time that we need to make up for
|
||||
if self._useOverflowTime:
|
||||
overflowTime = self._jobId2overflowTime[jobId]
|
||||
timeLeft = endT - globalClock.getRealTime()
|
||||
timeLeft = endT - clock.getRealTime()
|
||||
if overflowTime >= timeLeft:
|
||||
self._jobId2overflowTime[jobId] = max(0., overflowTime-timeLeft)
|
||||
# don't run any more jobs this frame, this makes up
|
||||
@ -184,7 +185,7 @@ class JobManager:
|
||||
if __debug__:
|
||||
job._pstats.start()
|
||||
job.resume()
|
||||
while globalClock.getRealTime() < endT:
|
||||
while clock.getRealTime() < endT:
|
||||
try:
|
||||
result = next(gen)
|
||||
except StopIteration:
|
||||
@ -210,9 +211,9 @@ class JobManager:
|
||||
break
|
||||
else:
|
||||
# we've run out of time
|
||||
#assert self.notify.debug('timeslice end: %s, %s' % (endT, globalClock.getRealTime()))
|
||||
#assert self.notify.debug('timeslice end: %s, %s' % (endT, clock.getRealTime()))
|
||||
job.suspend()
|
||||
overflowTime = globalClock.getRealTime() - endT
|
||||
overflowTime = clock.getRealTime() - endT
|
||||
if overflowTime > self.getTimeslice():
|
||||
self._jobId2overflowTime[jobId] += overflowTime
|
||||
if __debug__:
|
||||
|
@ -43,7 +43,7 @@ import functools
|
||||
|
||||
__report_indent = 3
|
||||
|
||||
from panda3d.core import ConfigVariableBool
|
||||
from panda3d.core import ConfigVariableBool, ClockObject
|
||||
|
||||
|
||||
## with one integer positional arg, this uses about 4/5 of the memory of the Functor class below
|
||||
@ -2053,6 +2053,7 @@ def report(types = [], prefix = '', xform = None, notifyFunc = None, dConfigPara
|
||||
if prefixes:
|
||||
outStr = '%%s %s' % (outStr,)
|
||||
|
||||
globalClock = ClockObject.getGlobalClock()
|
||||
|
||||
if 'module' in types:
|
||||
outStr = '%s {M:%s}' % (outStr, f.__module__.split('.')[-1])
|
||||
@ -2264,9 +2265,10 @@ if __debug__:
|
||||
# at the time that PythonUtil is loaded
|
||||
if not ConfigVariableBool("profile-debug", False):
|
||||
#dumb timings
|
||||
st=globalClock.getRealTime()
|
||||
f(*args,**kArgs)
|
||||
s=globalClock.getRealTime()-st
|
||||
clock = ClockObject.getGlobalClock()
|
||||
st = clock.getRealTime()
|
||||
f(*args, **kArgs)
|
||||
s = clock.getRealTime() - st
|
||||
print("Function %s.%s took %s seconds"%(f.__module__, f.__name__,s))
|
||||
else:
|
||||
import profile as prof, pstats
|
||||
|
@ -384,18 +384,19 @@ class ShowBase(DirectObject.DirectObject):
|
||||
|
||||
# Get a pointer to Panda's global ClockObject, used for
|
||||
# synchronizing events between Python and C.
|
||||
globalClock = ClockObject.getGlobalClock()
|
||||
clock = ClockObject.getGlobalClock()
|
||||
self.clock = clock
|
||||
|
||||
# Since we have already started up a TaskManager, and probably
|
||||
# a number of tasks; and since the TaskManager had to use the
|
||||
# TrueClock to tell time until this moment, make sure the
|
||||
# globalClock object is exactly in sync with the TrueClock.
|
||||
trueClock = TrueClock.getGlobalPtr()
|
||||
globalClock.setRealTime(trueClock.getShortTime())
|
||||
globalClock.tick()
|
||||
clock.setRealTime(trueClock.getShortTime())
|
||||
clock.tick()
|
||||
|
||||
# Now we can make the TaskManager start using the new globalClock.
|
||||
taskMgr.globalClock = globalClock
|
||||
# Now we can make the TaskManager start using the new clock.
|
||||
taskMgr.globalClock = clock
|
||||
|
||||
# client CPU affinity is determined by, in order:
|
||||
# - client-cpu-affinity-mask config
|
||||
@ -444,7 +445,7 @@ class ShowBase(DirectObject.DirectObject):
|
||||
builtins.ostream = Notify.out()
|
||||
builtins.directNotify = directNotify
|
||||
builtins.giveNotify = giveNotify
|
||||
builtins.globalClock = globalClock
|
||||
builtins.globalClock = clock
|
||||
builtins.vfs = vfs
|
||||
builtins.cpMgr = ConfigPageManager.getGlobalPtr()
|
||||
builtins.cvMgr = ConfigVariableManager.getGlobalPtr()
|
||||
@ -1899,7 +1900,7 @@ class ShowBase(DirectObject.DirectObject):
|
||||
return self.physicsMgrEnabled
|
||||
|
||||
def updateManagers(self, state):
|
||||
dt = globalClock.getDt()
|
||||
dt = self.clock.dt
|
||||
if self.particleMgrEnabled:
|
||||
self.particleMgr.doParticles(dt)
|
||||
if self.physicsMgrEnabled:
|
||||
@ -2927,14 +2928,15 @@ class ShowBase(DirectObject.DirectObject):
|
||||
Returns:
|
||||
A `~direct.task.Task` that can be awaited.
|
||||
"""
|
||||
globalClock.setMode(ClockObject.MNonRealTime)
|
||||
globalClock.setDt(1.0/float(fps))
|
||||
clock = self.clock
|
||||
clock.mode = ClockObject.MNonRealTime
|
||||
clock.dt = 1.0 / fps
|
||||
t = self.taskMgr.add(self._movieTask, namePrefix + '_task')
|
||||
t.frameIndex = 0 # Frame 0 is not captured.
|
||||
t.numFrames = int(duration * fps)
|
||||
t.source = source
|
||||
t.outputString = namePrefix + '_%0' + repr(sd) + 'd.' + format
|
||||
t.setUponDeath(lambda state: globalClock.setMode(ClockObject.MNormal))
|
||||
t.setUponDeath(lambda state: clock.setMode(ClockObject.MNormal))
|
||||
return t
|
||||
|
||||
def _movieTask(self, state):
|
||||
|
@ -33,6 +33,7 @@ ostream = Notify.out()
|
||||
|
||||
#: The clock object used by default for rendering and animation, obtained using
|
||||
#: :meth:`panda3d.core.ClockObject.getGlobalClock()`.
|
||||
#: @deprecated Use `base.clock` instead.
|
||||
globalClock = ClockObject.getGlobalClock()
|
||||
|
||||
#: See :meth:`panda3d.core.ConfigPageManager.getGlobalPtr()`.
|
||||
|
@ -5,6 +5,7 @@ __all__ = ['TaskThreaded', 'TaskThread']
|
||||
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||||
from direct.task import Task
|
||||
from direct.task.TaskManagerGlobal import taskMgr
|
||||
from panda3d.core import ClockObject
|
||||
|
||||
from .PythonUtil import SerialNumGen, Functor
|
||||
|
||||
@ -89,14 +90,14 @@ class TaskThreaded:
|
||||
def _doCallback(self, callback, taskName, task):
|
||||
assert self.notify.debugCall()
|
||||
self.__taskNames.remove(taskName)
|
||||
self._taskStartTime = globalClock.getRealTime()
|
||||
self._taskStartTime = ClockObject.getGlobalClock().getRealTime()
|
||||
callback()
|
||||
self._taskStartTime = None
|
||||
return Task.done
|
||||
|
||||
def _doThreadCallback(self, thread, taskName, task):
|
||||
assert self.notify.debugCall()
|
||||
self._taskStartTime = globalClock.getRealTime()
|
||||
self._taskStartTime = ClockObject.getGlobalClock().getRealTime()
|
||||
thread.run()
|
||||
self._taskStartTime = None
|
||||
if thread.isFinished():
|
||||
@ -114,7 +115,7 @@ class TaskThreaded:
|
||||
# we must not be in a task callback, we must be running in non-threaded
|
||||
# mode
|
||||
return True
|
||||
return (globalClock.getRealTime() - self._taskStartTime) < self.__timeslice
|
||||
return (ClockObject.getGlobalClock().getRealTime() - self._taskStartTime) < self.__timeslice
|
||||
|
||||
class TaskThread:
|
||||
# derive and override these four funcs
|
||||
|
@ -1,4 +1,4 @@
|
||||
from panda3d.core import ConfigVariableBool
|
||||
from panda3d.core import ConfigVariableBool, ClockObject
|
||||
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||||
from direct.fsm.StatePush import FunctionCall
|
||||
from direct.showbase.PythonUtil import formatTimeExact, normalDistrib, serialNum
|
||||
@ -59,7 +59,7 @@ class FrameProfiler:
|
||||
def _setEnabled(self, enabled):
|
||||
if enabled:
|
||||
self.notify.info('frame profiler started')
|
||||
self._startTime = globalClock.getFrameTime()
|
||||
self._startTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
self._profileCounter = 0
|
||||
self._jitter = None
|
||||
self._period2aggregateProfile = {}
|
||||
@ -110,7 +110,7 @@ class FrameProfiler:
|
||||
self._analyzeResults, sessionId))
|
||||
|
||||
# schedule the next profile
|
||||
delay = max(time - globalClock.getFrameTime(), 0.)
|
||||
delay = max(time - ClockObject.getGlobalClock().getFrameTime(), 0.)
|
||||
self._task = taskMgr.doMethodLater(delay, self._scheduleNextProfileDoLater,
|
||||
'FrameProfiler-%s' % serialNum())
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
__all__ = ['Timer']
|
||||
|
||||
from panda3d.core import ClockObject
|
||||
|
||||
from . import Task
|
||||
from .TaskManagerGlobal import taskMgr
|
||||
|
||||
@ -25,7 +27,7 @@ class Timer:
|
||||
self.callback = None
|
||||
self.finalT = t
|
||||
self.name = name
|
||||
self.startT = globalClock.getFrameTime()
|
||||
self.startT = ClockObject.getGlobalClock().getFrameTime()
|
||||
self.currT = 0.0
|
||||
taskMgr.add(self.__timerTask, self.name + '-run')
|
||||
self.started = 1
|
||||
@ -35,7 +37,7 @@ class Timer:
|
||||
self.stop()
|
||||
self.callback = callback
|
||||
self.finalT = t
|
||||
self.startT = globalClock.getFrameTime()
|
||||
self.startT = ClockObject.getGlobalClock().getFrameTime()
|
||||
self.currT = 0.0
|
||||
taskMgr.add(self.__timerTask, self.name + '-run')
|
||||
self.started = 1
|
||||
@ -71,7 +73,7 @@ class Timer:
|
||||
return self.finalT - self.currT
|
||||
|
||||
def __timerTask(self, task):
|
||||
t = globalClock.getFrameTime()
|
||||
t = ClockObject.getGlobalClock().getFrameTime()
|
||||
te = t - self.startT
|
||||
self.currT = te
|
||||
if te >= self.finalT:
|
||||
|
@ -5,7 +5,7 @@ __all__ = ['AnimPanel', 'ActorControl']
|
||||
### SEE END OF FILE FOR EXAMPLE USEAGE ###
|
||||
|
||||
# Import Tkinter, Pmw, and the floater code from this directory tree.
|
||||
from panda3d.core import Filename, getModelPath
|
||||
from panda3d.core import Filename, getModelPath, ClockObject
|
||||
from direct.tkwidgets.AppShell import *
|
||||
from direct.showbase.TkGlobal import *
|
||||
from direct.task import Task
|
||||
@ -294,7 +294,7 @@ class AnimPanel(AppShell):
|
||||
|
||||
def playActorControls(self):
|
||||
self.stopActorControls()
|
||||
self.lastT = globalClock.getFrameTime()
|
||||
self.lastT = ClockObject.getGlobalClock().getFrameTime()
|
||||
self.playList = self.actorControlList[:]
|
||||
taskMgr.add(self.play, self.id + '_UpdateTask')
|
||||
|
||||
@ -302,7 +302,7 @@ class AnimPanel(AppShell):
|
||||
if not self.playList:
|
||||
return Task.done
|
||||
fLoop = self.loopVar.get()
|
||||
currT = globalClock.getFrameTime()
|
||||
currT = ClockObject.getGlobalClock().getFrameTime()
|
||||
deltaT = currT - self.lastT
|
||||
self.lastT = currT
|
||||
for actorControl in self.playList:
|
||||
|
@ -983,7 +983,7 @@ class MopathRecorder(AppShell, DirectObject):
|
||||
# Start new task
|
||||
t = taskMgr.add(
|
||||
self.recordTask, self.name + '-recordTask')
|
||||
t.startTime = globalClock.getFrameTime()
|
||||
t.startTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
else:
|
||||
if self.samplingMode == 'Continuous':
|
||||
# Kill old task
|
||||
@ -1016,7 +1016,7 @@ class MopathRecorder(AppShell, DirectObject):
|
||||
def recordTask(self, state):
|
||||
# Record raw data point
|
||||
time = self.recordStart + (
|
||||
globalClock.getFrameTime() - state.startTime)
|
||||
ClockObject.getGlobalClock().getFrameTime() - state.startTime)
|
||||
self.recordPoint(time)
|
||||
return Task.cont
|
||||
|
||||
@ -1281,7 +1281,7 @@ class MopathRecorder(AppShell, DirectObject):
|
||||
t = taskMgr.add(
|
||||
self.playbackTask, self.name + '-playbackTask')
|
||||
t.currentTime = self.playbackTime
|
||||
t.lastTime = globalClock.getFrameTime()
|
||||
t.lastTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
|
||||
def setSpeedScale(self, value):
|
||||
self.speedScale.set(math.log10(value))
|
||||
@ -1291,7 +1291,7 @@ class MopathRecorder(AppShell, DirectObject):
|
||||
self.speedVar.set('%0.2f' % self.playbackSF)
|
||||
|
||||
def playbackTask(self, state):
|
||||
time = globalClock.getFrameTime()
|
||||
time = ClockObject.getGlobalClock().getFrameTime()
|
||||
dTime = self.playbackSF * (time - state.lastTime)
|
||||
state.lastTime = time
|
||||
if self.loopPlayback:
|
||||
|
@ -8,6 +8,7 @@ __all__ = ['Dial', 'AngleDial', 'DialWidget']
|
||||
from direct.showbase.TkGlobal import *
|
||||
from .Valuator import Valuator, VALUATOR_MINI, VALUATOR_FULL
|
||||
from direct.task import Task
|
||||
from panda3d.core import ClockObject
|
||||
import math
|
||||
import operator
|
||||
import Pmw
|
||||
@ -335,11 +336,11 @@ class DialWidget(Pmw.MegaWidget):
|
||||
self._onButtonPress()
|
||||
self.knobSF = 0.0
|
||||
self.updateTask = taskMgr.add(self.updateDialTask, 'updateDial')
|
||||
self.updateTask.lastTime = globalClock.getFrameTime()
|
||||
self.updateTask.lastTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
|
||||
def updateDialTask(self, state):
|
||||
# Update value
|
||||
currT = globalClock.getFrameTime()
|
||||
currT = ClockObject.getGlobalClock().getFrameTime()
|
||||
dt = currT - state.lastTime
|
||||
self.set(self.value + self.knobSF * dt)
|
||||
state.lastTime = currT
|
||||
|
@ -8,6 +8,7 @@ __all__ = ['Floater', 'FloaterWidget', 'FloaterGroup']
|
||||
from direct.showbase.TkGlobal import *
|
||||
from .Valuator import Valuator, VALUATOR_MINI, VALUATOR_FULL
|
||||
from direct.task import Task
|
||||
from panda3d.core import ClockObject
|
||||
import math
|
||||
import Pmw
|
||||
|
||||
@ -149,14 +150,14 @@ class FloaterWidget(Pmw.MegaWidget):
|
||||
self.velocitySF = 0.0
|
||||
self.updateTask = taskMgr.add(self.updateFloaterTask,
|
||||
'updateFloater')
|
||||
self.updateTask.lastTime = globalClock.getFrameTime()
|
||||
self.updateTask.lastTime = ClockObject.getGlobalClock().getFrameTime()
|
||||
|
||||
def updateFloaterTask(self, state):
|
||||
"""
|
||||
Update floaterWidget value based on current scaleFactor
|
||||
Adjust for time to compensate for fluctuating frame rates
|
||||
"""
|
||||
currT = globalClock.getFrameTime()
|
||||
currT = ClockObject.getGlobalClock().getFrameTime()
|
||||
dt = currT - state.lastTime
|
||||
self.set(self.value + self.velocitySF * dt)
|
||||
state.lastTime = currT
|
||||
|
Loading…
x
Reference in New Issue
Block a user