def executeAnimTasks(self): t0 = koan.GetTime() next = [] t = koan.GetTime() for i in self.animtasks: if i.step(t): next.append(i) self.animtasks = next d = koan.GetTime() - t0 if d > self.taketime: self.taketime = d
def ForceReset(self, t, target): self.const = float(target) if koan.useAnimation: self.animObj.ResetTargetNow(t, target, koan.GetTime()) else: self.animObj.ForceAssignValue(target) self.Dirty()
def gc(self): gcTime = 1.1 gcMax = 3 gcCount = 0 curFrame = self.window.frameNumber curPaint = self.window.render.GetPaintNumber() t = koan.GetTime() if t - self.lastClear > gcTime: self.lastClear = koan.GetTime() for item in self.resMap.keys(): dummy, ft, f = self.resMap[item] if t - ft > 15 and curFrame - f > 30 and ( not dummy or curPaint > dummy.GetPaintNumber()): del self.resMap[item] gcCount += 1 if gcCount >= gcMax: break
def fireExecuteTasks(self): #if koan.render: # t0 = koan.render.GetRenderTime() #else: if self.noReadyTasks: t0 = koan.GetTime() for i in self.noReadyTasks: i.start(t0) self.tasks.append(i) self.noReadyTasks = []
def GetAnimatedTexture(self, *key): if self.resMap.has_key(key): txt = self.resMap[key][0] else: try: txt = self.LoadAnimatedTexture(*key) except: txt = None self.resMap[key] = txt, koan.GetTime(), self.window.frameNumber return txt
def GetTextureEx(self, *key, **argd): if self.resMap.has_key(key): txt = self.resMap[key][0] else: txt = self.LoadTextureEx(*key, **argd) if not txt: if not argd.get('errorcache', True): return None self.resMap[key] = txt, koan.GetTime(), self.window.frameNumber return txt
def add(self, t, **argd): """ add a new task @type t: a Task object @rtype: None """ if argd.get('startnow', False): t.start(koan.GetTime()) self.tasks.append(t) else: self.noReadyTasks.append(t)
def GetTexture(self, *key, **argd): if self.resMap.has_key(key): txt = self.resMap[key][0] else: try: txt = self.LoadTexture(*key, **argd) except: txt = None traceback.print_exc() print '[texmng.py] LoadTexture ' + str(key) + ' Failed !!!' self.resMap[key] = txt, koan.GetTime(), self.window.frameNumber return txt
def __init__(self, window, **argd): koan.EventManager.__init__(self) ResourceManager.mgrs.append(weakref.ref(self)) self.window = window self.resMap = {} self.lastClear = koan.GetTime() self.autoRemove(self.window.bind("Device Lost", self.onDeviceLost)) self.autoRemove( self.window.bind("Device Restore", self.onDeviceRestore)) self.autoRemove( self.window.bind("Free Unused Resource", self.freeUnused))
def GetResource(self, *key): if self.resMap.has_key(key): res = self.resMap[key][0] else: try: res = self.LoadResource(*key) except: #import traceback #traceback.print_exc() res = None if res: self.resMap[key] = res, koan.GetTime(), self.window.frameNumber return res
def executeTasks(self): if self.processingTasks: self.tasks += self.processingTasks print '[koan.anim] processingTasks is not empty' self.processingTasks = self.tasks self.tasks = [] #if koan.render: # t0 = koan.render.GetRenderTime() #else: t0 = koan.GetTime() while self.processingTasks: e = self.processingTasks.pop() if e.step(t0): self.tasks.append(e)
def onCalc(self, diffWidth, totalWidth): if self.run: if not koan.useAnimation: return self.onCalcForGDI(diffWidth, totalWidth) if self.reseted == True: self.currTime = koan.GetTime() - self.startTime self.reseted = False aniTime = float(diffWidth) / self.speed offsetTime = self.offsetTime stopTime = self.offsetTime + aniTime fadeTime = stopTime + self.restTime totalTime = fadeTime + self.restTime + self.offsetTime posKey = (0, offsetTime/totalTime, stopTime/totalTime, fadeTime/totalTime, fadeTime/totalTime + 0.000001, 1) posValue = (0, 0, -diffWidth, -diffWidth, 0, 0) self.posAnim = koan.anim.AnimLinear(totalTime, posKey, posValue, loop=True) alphaKey = (0, offsetTime/totalTime, stopTime/totalTime, fadeTime/totalTime, 1) alphaValue = (1, 1, 1, 0, 1) self.alphaAnim = koan.anim.AnimLinear(totalTime, alphaKey, alphaValue, loop=True) return self.posAnim, self.alphaAnim
def __set(self, tlen, mapping): """ set the task's duration and relation between the changed field value and time @param tlen: the duration of this task @param mapping: the mapping from time to target field value """ if self.autoCancel: GetAnimManager().cancel(self.obj, self.attr) if tlen == 0: raise ValueError self.mapping = mapping self.isContinue = True self.len = tlen self.beginTime = koan.GetTime() + self.delay koan.animManager.addAnim(self)
def onCalcForGDI(self, diffWidth, totalWidth): self.currTime = koan.GetTime() - self.startTime anitime = float(diffWidth) / self.speed stop = self.offsetTime + anitime fade = stop + self.restTime total = fade + self.restTime + self.offsetTime t = math.fmod(self.currTime, total) pos = self.speed * max(0.0, t - self.offsetTime) if t > stop: if t < fade: a = 1.0 - float(t - stop ) / (self.restTime) pos = diffWidth else: if t < fade + self.restTime: a = float(t - fade) / self.restTime else: a = 1.0 pos = 0 else: a = 1.0 return -pos, a
def onStartScroll(self): self.reseted = True self.onStopScroll() ScrollAnimBase.onStartScroll(self) self.startTime = koan.GetTime()