Пример #1
0
    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
Пример #2
0
 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()
Пример #3
0
    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
Пример #4
0
 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 = []
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
    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)
Пример #8
0
 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
Пример #9
0
    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))
Пример #10
0
 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
Пример #11
0
    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)
Пример #12
0
 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
Пример #13
0
    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)
Пример #14
0
 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
Пример #15
0
 def onStartScroll(self):
     self.reseted = True
     self.onStopScroll()
     ScrollAnimBase.onStartScroll(self)
     self.startTime = koan.GetTime()