Ejemplo n.º 1
0
    def fadeIn(self, t=0.5, block=0):
        """
        Play a fade in transition over t seconds.
        Places a polygon on the aspect2d plane then lerps the color
        from black to transparent. When the color lerp is finished, it
        parents the fade polygon to hidden. If block is set, return the
        sequence instead of spawning it.
        """
        self.noTransitions()

        self.loadFade()
        self.fade.reparentTo(aspect2d, FADE_SORT_INDEX)

        if (t == 0):
            # Fade in immediately with no lerp
            self.fade.reparentTo(hidden)
        else:
            # Create a sequence that lerps the color out, then
            # parents the fade to hidden
            r = self.fadeColor[0]
            g = self.fadeColor[1]
            b = self.fadeColor[2]
            task = Task.sequence(
                self.fade.lerpColor(r, g, b, 1, r, g, b, 0, t),
                Task.Task(self.__fadeInLerpDone))
            # Spawn the sequence
            if not block:
                taskMgr.add(task, self.fadeTaskName)
            else:
                return task
Ejemplo n.º 2
0
 def showHpString(self, text, duration=0.85, scale=0.7):
     if self.HpTextEnabled and not self.ghostMode:
         if text != '':
             if self.hpText:
                 self.hideHpText()
             self.HpTextGenerator.setFont(OTPGlobals.getSignFont())
             self.HpTextGenerator.setText(text)
             self.HpTextGenerator.clearShadow()
             self.HpTextGenerator.setAlign(TextNode.ACenter)
             r = a = 1.0
             g = b = 0.0
             self.HpTextGenerator.setTextColor(r, g, b, a)
             self.hpTextNode = self.HpTextGenerator.generate()
             self.hpText = self.attachNewNode(self.hpTextNode)
             self.hpText.setScale(scale)
             self.hpText.setBillboardAxis()
             self.hpText.setPos(0, 0, self.height / 2)
             seq = Task.sequence(
                 self.hpText.lerpPos(Point3(0, 0, self.height + 1.5),
                                     1.0,
                                     blendType='easeOut'),
                 Task.pause(duration),
                 self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0),
                                       0.1), Task.Task(self.hideHpTextTask))
             taskMgr.add(seq, self.uniqueName('hpText'))
Ejemplo n.º 3
0
    def irisIn(self, t=0.5, block=0):
        """
        Play an iris in transition over t seconds.
        Places a polygon on the aspect2d plane then lerps the scale
        of the iris polygon up so it looks like we iris in. When the
        scale lerp is finished, it parents the iris polygon to hidden.
        If block is true, does not execute lerp, but returns the sequence.
        """
        self.noTransitions()

        self.loadIris()
        if (t == 0):
            self.iris.reparentTo(hidden)
        else:
            self.iris.reparentTo(aspect2d, FADE_SORT_INDEX)
            self.iris.setScale(0.015)
            # Create a sequence that scales the iris up,
            # then parents the fade to hidden
            task = Task.sequence(
                self.iris.lerpScale(0.18, 0.18, 0.18, t, blendType="noBlend"),
                Task.Task(self.__irisInLerpDone))
            # Spawn the sequence
            if not block:
                taskMgr.add(task, self.irisTaskName)
            else:
                return task
Ejemplo n.º 4
0
    def irisOut(self, t=0.5, block=0):
        """
        Play an iris out transition over t seconds.
        Places a polygon on the aspect2d plane then lerps the scale
        of the iris down so it looks like we iris out. When the scale
        lerp is finished, it leaves the iris polygon covering the
        aspect2d plane until you irisIn or call noIris.
        """
        self.noTransitions()

        self.loadIris()
        self.loadFade()  # we need this to cover up the hole.
        if (t == 0):
            self.iris.reparentTo(hidden)
        else:
            self.iris.reparentTo(aspect2d, FADE_SORT_INDEX)
            self.iris.setScale(0.18)
            # Create a sequence that scales the iris up,
            # then parents the fade to hidden
            task = Task.sequence(
                self.iris.lerpScale(0.015,
                                    0.015,
                                    0.015,
                                    t,
                                    blendType="noBlend"),
                Task.Task(self.irisOutLerpDone))
            # Spawn the sequence
            if not block:
                taskMgr.add(task, self.irisTaskName)
            else:
                return task
Ejemplo n.º 5
0
    def spawnTitleText(self):
        def getDescription(zoneNum, self=self):
            ent = self.entities.get(zoneNum)
            if ent and hasattr(ent, "description"):
                return ent.description

        description = getDescription(self.lastCamZone)
        if description and description != "":
            taskMgr.remove(self.uniqueName("titleText"))
            self.smallTitleText.setText(description)
            self.titleText.setText(description)
            self.titleText.setColor(Vec4(*self.titleColor))
            self.titleText.setFg(self.titleColor)
            titleSeq = None
            if self.lastCamZone not in self.zonesEnteredList:
                self.zonesEnteredList.append(self.lastCamZone)
                titleSeq = Task.sequence(
                    Task.Task(self.hideSmallTitleTextTask),
                    Task.Task(self.showTitleTextTask),
                    Task.pause(0.10000000000000001),
                    Task.pause(6.0),
                    self.titleText.lerpColor(
                        Vec4(self.titleColor[0], self.titleColor[1], self.titleColor[2], self.titleColor[3]),
                        Vec4(self.titleColor[0], self.titleColor[1], self.titleColor[2], 0.0),
                        0.5,
                    ),
                )

            smallTitleSeq = Task.sequence(Task.Task(self.hideTitleTextTask), Task.Task(self.showSmallTitleTask))
            if titleSeq:
                seq = Task.sequence(titleSeq, smallTitleSeq)
            else:
                seq = smallTitleSeq
            taskMgr.add(seq, self.uniqueName("titleText"))
    def showHpString(self, text, duration=0.84999999999999998, scale=0.69999999999999996):
        if self.HpTextEnabled and not (self.ghostMode):
            if text != "":
                if self.hpText:
                    self.hideHpText()

                self.HpTextGenerator.setFont(OTPGlobals.getSignFont())
                self.HpTextGenerator.setText(text)
                self.HpTextGenerator.clearShadow()
                self.HpTextGenerator.setAlign(TextNode.ACenter)
                r = 1.0
                a = 1.0
                g = 0.0
                b = 0.0
                self.HpTextGenerator.setTextColor(r, g, b, a)
                self.hpTextNode = self.HpTextGenerator.generate()
                self.hpText = self.attachNewNode(self.hpTextNode)
                self.hpText.setScale(scale)
                self.hpText.setBillboardAxis()
                self.hpText.setPos(0, 0, self.height / 2)
                seq = Task.sequence(
                    self.hpText.lerpPos(Point3(0, 0, self.height + 1.5), 1.0, blendType="easeOut"),
                    Task.pause(duration),
                    self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0), 0.10000000000000001),
                    Task.Task(self.hideHpTextTask),
                )
                taskMgr.add(seq, self.uniqueName("hpText"))
Ejemplo n.º 7
0
 def showHitScore(self, number, scale=1):
     if number <= 0:
         return
     if self.hpText:
         self.hideHitScore()
     self.HpTextGenerator.setFont(ToontownGlobals.getSignFont())
     if number < 0:
         self.HpTextGenerator.setText(str(number))
     else:
         self.HpTextGenerator.setText('+' + str(number))
     self.HpTextGenerator.clearShadow()
     self.HpTextGenerator.setAlign(TextNode.ACenter)
     r = 1
     g = 1
     b = 0
     a = 1
     self.HpTextGenerator.setTextColor(r, g, b, a)
     self.hpTextNode = self.HpTextGenerator.generate()
     self.hpText = render.attachNewNode(self.hpTextNode)
     self.hpText.setScale(scale)
     self.hpText.setBillboardPointEye()
     self.hpText.setBin('fixed', 100)
     self.hpText.setPos(self.root, 0, 0, self.height / 2)
     seq = Task.sequence(
         self.hpText.lerpPos(Point3(
             self.root.getX(render), self.root.getY(render),
             self.root.getZ(render) + self.height + 1.0),
                             0.25,
                             blendType='easeOut'), Task.pause(0.25),
         self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0), 0.1),
         Task.Task(self.__hideHitScoreTask))
     taskMgr.add(seq, 'PartyCogHpText' + str(self.id))
Ejemplo n.º 8
0
    def _MakeAToon__handleNameShopDone(self):
        self.guiLastButton.hide()
        self.guiCheckButton.hide()
        if self.ns.getDoneStatus() == 'last':
            self.ns.hideAll()
            self.hostTrack = Parallel(
                self.charRunToLeft(char=self.host, comm=self.goToLastShop),
                self.charRunToLeft(char=self.toon))
            self.hostTrack.start()
        elif self.ns.getDoneStatus() == 'paynow':
            self.doneStatus = 'paynow'

            def sendDoneTask(self):
                messenger.send(self.doneEvent)
                return Task.done

            sdt = Task.Task(sendDoneTask)
            sdt.doneEvent = self.doneEvent
            base.transitions.fadeOut(finishIval=EventInterval(self.doneEvent))
        else:
            self.doneStatus = 'created'

            def sendDoneTask(self):
                messenger.send(self.doneEvent)
                return Task.done

            sdt = Task.Task(sendDoneTask)
            sdt.doneEvent = self.doneEvent
            base.transitions.fadeOut(finishIval=EventInterval(self.doneEvent))
Ejemplo n.º 9
0
    def run(self):
        """Starts the main loop of the application."""

        if PandaSystem.getPlatform() == 'emscripten':
            return

        # Set the clock to have last frame's time in case we were
        # Paused at the prompt for a long time
        t = self.globalClock.getFrameTime()
        timeDelta = t - self.globalClock.getRealTime()
        self.globalClock.setRealTime(t)
        self.messenger.send("resetClock", [timeDelta])

        if self.taskMgr.resumeFunc != None:
            self.taskMgr.resumeFunc()

        if self.taskMgr.stepping:
            self.doRunFrame()
        else:
            self.taskMgr.running = True
            while self.taskMgr.running:
                try:
                    self.doRunFrame()
                except KeyboardInterrupt:
                    self.taskMgr.stop()
                except SystemError:
                    self.taskMgr.stop()
                    raise
                except IOError as ioError:
                    code, _ = self.taskMgr.unpackIOError(ioError)
                    # Since upgrading to Python 2.4.1, pausing the execution
                    # often gives this IOError during the sleep function:
                    #     IOError: [Errno 4] Interrupted function call
                    # So, let's just handle that specific exception and stop.
                    # All other IOErrors should still get raised.
                    # Only problem: legit IOError 4s will be obfuscated.
                    if code == 4:
                        self.taskMgr.stop()
                    else:
                        raise
                except Exception as e:
                    if self.taskMgr.extendedExceptions:
                        self.taskMgr.stop()
                        Task.print_exc_plus()
                    else:
                        if (ExceptionVarDump.wantStackDumpLog
                                and ExceptionVarDump.dumpOnExceptionInit):
                            ExceptionVarDump._varDump__print(e)
                        raise
                except:
                    if self.taskMgr.extendedExceptions:
                        self.taskMgr.stop()
                        Task.print_exc_plus()
                    else:
                        raise

        self.taskMgr.mgr.stopThreads()
Ejemplo n.º 10
0
    def spawnTitleText(self):
        def getDescription(zoneNum, self=self):
            ent = self.entities.get(zoneNum)
            if ent and hasattr(ent, 'description'):
                return ent.description
            return None

        description = getDescription(self.lastCamZone)
        if description and description != '':
            taskMgr.remove(self.uniqueName('titleText'))
            self.smallTitleText.setText(description)
            self.titleText.setText(description)
            self.titleText.setColor(Vec4(*self.titleColor))
            self.titleText.setFg(self.titleColor)
            titleSeq = None
            if self.lastCamZone not in self.zonesEnteredList:
                self.zonesEnteredList.append(self.lastCamZone)
                titleSeq = Task.sequence(
                    Task.Task(self.hideSmallTitleTextTask),
                    Task.Task(self.showTitleTextTask), Task.pause(0.1),
                    Task.pause(6.0),
                    self.titleText.lerpColor(
                        Vec4(self.titleColor[0], self.titleColor[1],
                             self.titleColor[2], self.titleColor[3]),
                        Vec4(self.titleColor[0], self.titleColor[1],
                             self.titleColor[2], 0.0), 0.5))
            smallTitleSeq = Task.sequence(Task.Task(self.hideTitleTextTask),
                                          Task.Task(self.showSmallTitleTask))
            if titleSeq:
                seq = Task.sequence(titleSeq, smallTitleSeq)
            else:
                seq = smallTitleSeq
            taskMgr.add(seq, self.uniqueName('titleText'))
        return
    def showHpString(self, text, duration=0.85, scale=0.7):
        if self.HpTextEnabled and not self.ghostMode:
            # We don't show empty strings
            if text != '':
                # Get rid of text if it is already there.
                if self.hpText:
                    self.hideHpText()
                # Set the font
                self.HpTextGenerator.setFont(OTPGlobals.getSignFont())
                # Write the text
                self.HpTextGenerator.setText(text)
                # No shadow
                self.HpTextGenerator.clearShadow()
                # Put a shadow on there
                #self.HpTextGenerator.setShadow(0.05, 0.05)
                #self.HpTextGenerator.setShadowColor(0, 0, 0, 1)
                # Center the text
                self.HpTextGenerator.setAlign(TextNode.ACenter)
                # Set the color and alpha scale (a)
                r = a = 1.0
                g = b = 0.0

                self.HpTextGenerator.setTextColor(r, g, b, a)

                self.hpTextNode = self.HpTextGenerator.generate()

                # Put the hpText over the head of the avatar
                self.hpText = self.attachNewNode(self.hpTextNode)
                # Set its scale
                self.hpText.setScale(scale)
                # Make sure it is a billboard
                self.hpText.setBillboardAxis()

                # Initial position ... Center of the body... the "tan tien"
                self.hpText.setPos(0, 0, self.height / 2)
                seq = Task.sequence(
                    # Fly the number out of the character
                    self.hpText.lerpPos(Point3(0, 0, self.height + 1.5),
                                        1.0,
                                        blendType='easeOut'),
                    # Wait 2 seconds
                    Task.pause(duration),
                    # Fade the number
                    self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0),
                                          0.1),
                    # Get rid of the number
                    Task.Task(self.hideHpTextTask))
                taskMgr.add(seq, self.uniqueName("hpText"))
        else:
            # Just play the sound effect.
            # TODO: Put in the sound effect!
            pass
 def showInfoText(self, text = 'hello world'):
     description = text
     if description and description != '':
         taskMgr.remove(self.uniqueName('titleText'))
         self.smallTitleText.setText(description)
         self.titleText.setText(description)
         self.titleText.setColor(Vec4(*self.titleColor))
         self.titleText.setFg(self.titleColor)
         titleSeq = None
         titleSeq = Task.sequence(Task.Task(self.hideSmallTitleTextTask), Task.Task(self.showTitleTextTask), Task.pause(0.10000000000000001), Task.pause(3.0), self.titleText.lerpColor(Vec4(self.titleColor[0], self.titleColor[1], self.titleColor[2], self.titleColor[3]), Vec4(self.titleColor[0], self.titleColor[1], self.titleColor[2], 0.0), 0.5))
         if titleSeq:
             seq = Task.sequence(titleSeq)
         
         taskMgr.add(seq, self.uniqueName('titleText'))
Ejemplo n.º 13
0
    def showHpText(self, number, bonus=0, scale=1):
        if self.HpTextEnabled and not (self.ghostMode):
            if number != 0:
                if self.hpText:
                    self.hideHpText()

                self.HpTextGenerator.setFont(OTPGlobals.getSignFont())
                if number < 0:
                    self.HpTextGenerator.setText(str(number))
                else:
                    self.HpTextGenerator.setText('+' + str(number))
                self.HpTextGenerator.clearShadow()
                self.HpTextGenerator.setAlign(TextNode.ACenter)
                if bonus == 1:
                    r = 1.0
                    g = 1.0
                    b = 0
                    a = 1
                elif bonus == 2:
                    r = 1.0
                    g = 0.5
                    b = 0
                    a = 1
                elif number < 0:
                    r = 0.90000000000000002
                    g = 0
                    b = 0
                    a = 1
                else:
                    r = 0
                    g = 0.90000000000000002
                    b = 0
                    a = 1
                self.HpTextGenerator.setTextColor(r, g, b, a)
                self.hpTextNode = self.HpTextGenerator.generate()
                self.hpText = self.attachNewNode(self.hpTextNode)
                self.hpText.setScale(scale)
                self.hpText.setBillboardPointEye()
                self.hpText.setBin('fixed', 100)
                self.hpText.setPos(0, 0, self.height / 2)
                seq = Task.sequence(
                    self.hpText.lerpPos(Point3(0, 0, self.height + 1.5),
                                        1.0,
                                        blendType='easeOut'),
                    Task.pause(0.84999999999999998),
                    self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0),
                                          0.10000000000000001),
                    Task.Task(self.hideHpTextTask))
                taskMgr.add(seq, self.uniqueName('hpText'))
Ejemplo n.º 14
0
 def showHitScore(self, number, scale = 1):
     if number <= 0:
         return
     if self.hpText:
         self.hideHitScore()
     self.HpTextGenerator.setFont(ToontownGlobals.getSignFont())
     if number < 0:
         self.HpTextGenerator.setText(str(number))
     else:
         self.HpTextGenerator.setText('+' + str(number))
     self.HpTextGenerator.clearShadow()
     self.HpTextGenerator.setAlign(TextNode.ACenter)
     r = 1
     g = 1
     b = 0
     a = 1
     self.HpTextGenerator.setTextColor(r, g, b, a)
     self.hpTextNode = self.HpTextGenerator.generate()
     self.hpText = render.attachNewNode(self.hpTextNode)
     self.hpText.setScale(scale)
     self.hpText.setBillboardPointEye()
     self.hpText.setBin('fixed', 100)
     self.hpText.setPos(self.root, 0, 0, self.height / 2)
     seq = Task.sequence(self.hpText.lerpPos(Point3(self.root.getX(render), self.root.getY(render), self.root.getZ(render) + self.height + 1.0), 0.25, blendType='easeOut'), Task.pause(0.25), self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0), 0.1), Task.Task(self.__hideHitScoreTask))
     taskMgr.add(seq, 'PartyCogHpText' + str(self.id))
 def countdown(self, duration, callback = None, extraArgs = []):
     self.countdownTask = Task.Task(self._timerTask)
     self.countdownTask.duration = duration
     self.countdownTask.callback = callback
     self.countdownTask.extraArgs = extraArgs
     taskMgr.remove('timerTask%s' % self.timerId)
     return taskMgr.add(self.countdownTask, 'timerTask%s' % self.timerId)
Ejemplo n.º 16
0
 def setCannonWillFire(self, cannonId, zRot, angle):
     self.notify.debug('setCannonWillFire: %d %d %d' %
                       (cannonId, zRot, angle))
     cannon = base.cr.doId2do.get(cannonId)
     if cannon is None:
         self.notify.warning(
             "Cannon has not been created, but we got this message. Don't show firing."
         )
         return
     if not cannon.getToonInside():
         self.notify.warning(
             "setCannonWillFire, but no toon insde. Don't show firing")
         return
     if self.isLocalToon(cannon.getToonInside()):
         self.localFlyingToon = base.localAvatar
         self.localFlyingToonId = base.localAvatar.doId
         self.localFiringCannon = cannon
         self.flyingToonCloudsHit = 0
     cannon.updateModel(zRot, angle)
     toonId = cannon.getToonInside().doId
     task = Task.Task(self.__fireCannonTask)
     task.toonId = toonId
     task.cannon = cannon
     taskMgr.add(task, self.taskNameFireCannon)
     self.toonIds.append(toonId)
     return
Ejemplo n.º 17
0
    def irisOut(self, t=0.5, block=0):
        """
        Play an iris out transition over t seconds.
        Places a polygon on the aspect2d plane then lerps the scale
        of the iris down so it looks like we iris out. When the scale
        lerp is finished, it leaves the iris polygon covering the
        aspect2d plane until you irisIn or call noIris.
        """
        self.noTransitions()

        self.loadIris()
        self.loadFade()  # we need this to cover up the hole.
        if (t == 0):
            self.iris.reparentTo(hidden)
        else:
            self.iris.reparentTo(aspect2d, FADE_SORT_INDEX)
            self.iris.setScale(0.18)
            # Create a sequence that scales the iris up,
            # then parents the fade to hidden
            task = Task.sequence(
                self.iris.lerpScale(0.015, 0.015, 0.015,
                                    t, blendType="noBlend"),
                Task.Task(self.irisOutLerpDone))
            # Spawn the sequence
            if not block:
                taskMgr.add(task, self.irisTaskName)
            else:
                return task
 def spawnHPanYZoom(self):
     # Kill any existing tasks
     taskMgr.remove('manipulateCamera')
     # Spawn new task
     t = Task.Task(self.HPanYZoomTask)
     t.zoomSF = Vec3(self.coaMarker.getPos(SEditor.camera)).length()
     taskMgr.add(t, 'manipulateCamera')
Ejemplo n.º 19
0
    def irisIn(self, t=0.5, block=0):
        """
        Play an iris in transition over t seconds.
        Places a polygon on the aspect2d plane then lerps the scale
        of the iris polygon up so it looks like we iris in. When the
        scale lerp is finished, it parents the iris polygon to hidden.
        If block is true, does not execute lerp, but returns the sequence.
        """
        self.noTransitions()

        self.loadIris()
        if (t == 0):
            self.iris.reparentTo(hidden)
        else:
            self.iris.reparentTo(aspect2d, FADE_SORT_INDEX)
            self.iris.setScale(0.015)
            # Create a sequence that scales the iris up,
            # then parents the fade to hidden
            task = Task.sequence(
                self.iris.lerpScale(0.18, 0.18, 0.18,
                                    t, blendType="noBlend"),
                Task.Task(self.__irisInLerpDone))
            # Spawn the sequence
            if not block:
                taskMgr.add(task, self.irisTaskName)
            else:
                return task
Ejemplo n.º 20
0
    def enterActive(self, startTime):
        self.root.setR(0.0)

        updateTask = Task.Task(self.updateTask)
        updateTask.startTime = startTime

        taskMgr.add(updateTask, "PartyCog.update-%d" % self.id)
Ejemplo n.º 21
0
 def spawnHPanYZoom(self):
     # Kill any existing tasks
     self.__stopManipulateCamera()
     # Spawn new task
     t = Task.Task(self.HPanYZoomTask)
     t.zoomSF = Vec3(self.coaMarker.getPos(base.direct.camera)).length()
     self.__startManipulateCamera(task=t)
Ejemplo n.º 22
0
    def __lerp(self, functorFunc, duration, blendType, taskName=None):
        """
        __lerp(self, functorFunc, float, string, string)
        Basic lerp functionality used by other lerps.
        Fire off a lerp. Make it a task if taskName given.
        """
        # functorFunc is a function which can be called to create a functor.
        # functor creation is defered so initial state (sampled in functorFunc)
        # will be appropriate for the time the lerp is spawned
        from direct.task import Task
        from direct.showbase import LerpBlendHelpers
        from direct.task.TaskManagerGlobal import taskMgr

        # upon death remove the functorFunc
        def lerpUponDeath(task):
            # Try to break circular references
            try:
                del task.functorFunc
            except:
                pass
            try:
                del task.lerp
            except:
                pass

        # make the task function
        def lerpTaskFunc(task):
            from pandac.Lerp import Lerp
            from pandac.ClockObject import ClockObject
            from direct.task.Task import Task, cont, done
            if task.init == 1:
                # make the lerp
                functor = task.functorFunc()
                task.lerp = Lerp(functor, task.duration, task.blendType)
                task.init = 0
            dt = globalClock.getDt()
            task.lerp.setStepSize(dt)
            task.lerp.step()
            if (task.lerp.isDone()):
                # Reset the init flag, in case the task gets re-used
                task.init = 1
                return(done)
            else:
                return(cont)

        # make the lerp task
        lerpTask = Task.Task(lerpTaskFunc)
        lerpTask.init = 1
        lerpTask.functorFunc = functorFunc
        lerpTask.duration = duration
        lerpTask.blendType = LerpBlendHelpers.getBlend(blendType)
        lerpTask.setUponDeath(lerpUponDeath)

        if (taskName == None):
            # don't spawn a task, return one instead
            return lerpTask
        else:
            # spawn the lerp task
            taskMgr.add(lerpTask, taskName)
            return lerpTask
Ejemplo n.º 23
0
    def spawnMouseRotateTask(self):
        taskMgr.remove('manipulateCamera')
        if self.perspCollPlane:
            iRay = SelectionRay(base.direct.camera)
            iRay.collider.setFromLens(base.direct.camNode, 0.0, 0.0)
            iRay.collideWithBitMask(1)
            if base.direct.camera.getPos().getZ() >= 0:
                iRay.ct.traverse(self.perspCollPlane)
            else:
                iRay.ct.traverse(self.perspCollPlane2)
            if iRay.getNumEntries() > 0:
                entry = iRay.getEntry(0)
                hitPt = entry.getSurfacePoint(entry.getFromNodePath())
                np = NodePath('temp')
                np.setPos(base.direct.camera, hitPt)
                self.coaMarkerPos = np.getPos()
                np.remove()
                self.coaMarker.setPos(self.coaMarkerPos)

            iRay.collisionNodePath.removeNode()
            del iRay

        self.camManipRef.setPos(self.coaMarkerPos)
        self.camManipRef.setHpr(base.direct.camera, ZERO_POINT)
        t = Task.Task(self.mouseRotateTask)
        if abs(base.direct.dr.mouseX) > 0.90000000000000002:
            t.constrainedDir = 'y'
        else:
            t.constrainedDir = 'x'
        taskMgr.add(t, 'manipulateCamera')
 def manipulationStart(self, modifiers):
     # Start out in select mode
     self.mode = 'select'
     # Check for a widget hit point
     entry = SEditor.iRay.pickWidget()
     # Did we hit a widget?
     if entry:
         # Yes!
         self.hitPt.assign(entry.getSurfacePoint(entry.getFromNodePath()))
         self.hitPtDist = Vec3(self.hitPt).length()
         # Constraint determined by nodes name
         self.constraint = entry.getIntoNodePath().getName()
     else:
         # Nope, off the widget, no constraint
         self.constraint = None
     # Check to see if we are moving the object
     # We are moving the object if we either wait long enough
     taskMgr.doMethodLater(MANIPULATION_MOVE_DELAY, self.switchToMoveMode,
                           'manip-move-wait')
     # Or we move far enough
     self.moveDir = None
     watchMouseTask = Task.Task(self.watchMouseTask)
     watchMouseTask.initX = SEditor.dr.mouseX
     watchMouseTask.initY = SEditor.dr.mouseY
     taskMgr.add(watchMouseTask, 'manip-watch-mouse')
Ejemplo n.º 25
0
def __lerp(self, functorFunc, duration, blendType, taskName=None):
    from direct.task import Task
    from direct.showbase import LerpBlendHelpers
    from direct.task.TaskManagerGlobal import taskMgr

    def lerpTaskFunc(task):
        from pandac.PandaModules import Lerp
        from pandac.PandaModules import ClockObject
        from direct.task.Task import Task, cont, done
        if task.init == 1:
            functor = task.functorFunc()
            task.lerp = Lerp(functor, task.duration, task.blendType)
            task.init = 0
        dt = globalClock.getDt()
        task.lerp.setStepSize(dt)
        task.lerp.step()
        if task.lerp.isDone():
            task.init = 1
            return done
        else:
            return cont

    lerpTask = Task.Task(lerpTaskFunc)
    lerpTask.init = 1
    lerpTask.functorFunc = functorFunc
    lerpTask.duration = duration
    lerpTask.blendType = LerpBlendHelpers.getBlend(blendType)
    if taskName == None:
        return lerpTask
    else:
        taskMgr.add(lerpTask, taskName)
        return lerpTask
    return
Ejemplo n.º 26
0
    def fadeIn(self, t=0.5, block=0):
        """
        Play a fade in transition over t seconds.
        Places a polygon on the aspect2d plane then lerps the color
        from black to transparent. When the color lerp is finished, it
        parents the fade polygon to hidden. If block is set, return the
        sequence instead of spawning it.
        """
        self.noTransitions()

        self.loadFade()
        self.fade.reparentTo(aspect2d, FADE_SORT_INDEX)

        if (t == 0):
            # Fade in immediately with no lerp
            self.fade.reparentTo(hidden)
        else:
            # Create a sequence that lerps the color out, then
            # parents the fade to hidden
            r = self.fadeColor[0]
            g = self.fadeColor[1]
            b = self.fadeColor[2]
            task = Task.sequence(
                self.fade.lerpColor(r,g,b,1,
                                    r,g,b,0,
                                    t),
                Task.Task(self.__fadeInLerpDone))
            # Spawn the sequence
            if not block:
                taskMgr.add(task, self.fadeTaskName)
            else:
                return task
Ejemplo n.º 27
0
    def __init__(self, host="localhost", port=5001, name="client"):
        self.name = name

        self.cManager = QueuedConnectionManager()
        self.cReader = QueuedConnectionReader(self.cManager, 0)
        self.cWriter = ConnectionWriter(self.cManager, 0)

        self.readerCallbacks = []

        taskMgr = Task.TaskManager()

        # how long until we give up trying to reach the server?
        timeout_in_miliseconds = 3000  # 3 seconds

        self.myConnection = self.cManager.openTCPClientConnection(
            host, port, timeout_in_miliseconds)
        if not self.myConnection:
            print("{}: Failed to connect to server!".format(self.name))
            return

        self.cReader.addConnection(
            self.myConnection)  # receive messages from server
        taskMgr.add(self.tskReaderPolling, "Poll the connection reader", -40)
        print("{}: Successfully connected to server {} at {}!".format(
            self.name, port, host))
    def showHpText(self, number, bonus=0, scale=1):
        if self.HpTextEnabled and not (self.ghostMode):
            if number != 0:
                if self.hpText:
                    self.hideHpText()

                self.HpTextGenerator.setFont(OTPGlobals.getSignFont())
                if number < 0:
                    self.HpTextGenerator.setText(str(number))
                else:
                    self.HpTextGenerator.setText("+" + str(number))
                self.HpTextGenerator.clearShadow()
                self.HpTextGenerator.setAlign(TextNode.ACenter)
                if bonus == 1:
                    r = 1.0
                    g = 1.0
                    b = 0
                    a = 1
                elif bonus == 2:
                    r = 1.0
                    g = 0.5
                    b = 0
                    a = 1
                elif number < 0:
                    r = 0.90000000000000002
                    g = 0
                    b = 0
                    a = 1
                else:
                    r = 0
                    g = 0.90000000000000002
                    b = 0
                    a = 1
                self.HpTextGenerator.setTextColor(r, g, b, a)
                self.hpTextNode = self.HpTextGenerator.generate()
                self.hpText = self.attachNewNode(self.hpTextNode)
                self.hpText.setScale(scale)
                self.hpText.setBillboardPointEye()
                self.hpText.setBin("fixed", 100)
                self.hpText.setPos(0, 0, self.height / 2)
                seq = Task.sequence(
                    self.hpText.lerpPos(Point3(0, 0, self.height + 1.5), 1.0, blendType="easeOut"),
                    Task.pause(0.84999999999999998),
                    self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0), 0.10000000000000001),
                    Task.Task(self.hideHpTextTask),
                )
                taskMgr.add(seq, self.uniqueName("hpText"))
Ejemplo n.º 29
0
    def __init__(self):
        self.loadDefaultConfig()
        self.loadLocalConfig()

        if ConfigVariableBool("want-pstats", False):
            PStatClient.connect()

        # Set up some global objects
        self.globalClock = ClockObject.getGlobalClock()
        # We will manually manage the clock
        self.globalClock.setMode(ClockObject.MSlave)
        builtins.globalClock = self.globalClock

        self.vfs = VirtualFileSystem.getGlobalPtr()

        # For tasks that run every application frame
        self.taskMgr = TaskManagerGlobal.taskMgr
        builtins.taskMgr = self.taskMgr

        # For tasks that run every simulation tick
        self.simTaskMgr = Task.TaskManager()
        self.simTaskMgr.mgr = AsyncTaskManager("sim")
        builtins.simTaskmgr = self.simTaskMgr

        self.eventMgr = EventManagerGlobal.eventMgr
        builtins.eventMgr = self.eventMgr

        self.messenger = MessengerGlobal.messenger
        builtins.messenger = self.messenger

        self.loader = Loader(self)
        builtins.loader = self.loader

        builtins.base = self

        # What is the current frame number?
        self.frameCount = 0
        # Time at beginning of current frame
        self.frameTime = self.globalClock.getRealTime()
        # How long did the last frame take.
        self.deltaTime = 0

        #
        # Variables pertaining to simulation ticks.
        #

        self.prevRemainder = 0
        self.remainder = 0
        # What is the current overall simulation tick?
        self.tickCount = 0
        # How many ticks are we going to run this frame?
        self.totalTicksThisFrame = 0
        # How many ticks have we run so far this frame?
        self.currentTicksThisFrame = 0
        # What tick are we currently on this frame?
        self.currentFrameTick = 0
        # How many simulations ticks are we running per-second?
        self.ticksPerSec = 60
        self.intervalPerTick = 1.0 / self.ticksPerSec
Ejemplo n.º 30
0
 def spawnXZTranslateOrHPanYZoom(self):
     # Kill any existing tasks
     taskMgr.remove('manipulateCamera')
     # Spawn the new task
     t = Task.Task(self.XZTranslateOrHPanYZoomTask)
     # For HPanYZoom
     t.zoomSF = Vec3(self.coaMarker.getPos(base.direct.camera)).length()
     taskMgr.add(t, 'manipulateCamera')
def spawnTask(self, name=None, callback=None, extraArgs=[]):
    if not name:
        name = str(self.getUrl())
    from direct.task import Task
    task = Task.Task(self.doTask)
    task.callback = callback
    task.callbackArgs = extraArgs
    return taskMgr.add(task, name)
Ejemplo n.º 32
0
 def __spawnTask(self):
     # Spawn task
     from direct.task import Task
     self.__removeTask()
     taskName = self.getName() + '-play'
     task = Task.Task(self.__playTask)
     task.interval = self
     taskMgr.add(task, taskName)
Ejemplo n.º 33
0
 def irisOutTask(self, task, time=0.5, noIris=1):
     """
     As a sequence: iris out, execute the given task, then do a noIris
     if requested
     """
     if noIris:
         def noIrisTask(task):
             task.noIris()
             return Task.done
         nit = Task.Task(noIrisTask)
         nit.noIris = self.noIris
         seq = Task.sequence(self.irisOut(time, block=1), task, nit)
     else:
         seq = Task.sequence(self.irisOut(time, block=1), task)
         
     # do it
     taskMgr.add(seq, 'irisOutTaskSeq')
Ejemplo n.º 34
0
 def fadeOutTask(self, task, time=0.3, noFade=1):
     """
     As a sequence: Fade out, execute the given task, then do a noFade
     if requested
     """
     if noFade:
         def noFadeTask(task):
             task.noFade()
             return Task.done
         nft = Task.Task(noFadeTask)
         nft.noFade = self.noFade
         seq = Task.sequence(self.fadeOut(time, block=1), task, nft)
     else:
         seq = Task.sequence(self.fadeOut(time, block=1), task)
         
     # do it
     taskMgr.add(seq, 'fadeOutTaskSeq')
Ejemplo n.º 35
0
    def spawnUpdateObjectUITask(self):
        if self.currNodePath is None:
            return

        taskMgr.remove('_le_updateObjectUITask')
        t = Task.Task(self.updateObjectUITask)
        t.np = self.currNodePath
        taskMgr.add(t, '_le_updateObjectUITask')
Ejemplo n.º 36
0
 def __decButtonDown(self, event):
     assert self.notify.debugStateCall(self)
     task = Task.Task(self.__scrollByTask)
     task.delayTime = (1.0 / self.scrollSpeed)
     task.prevTime = 0.0
     task.delta = -1
     self.scrollBy(task.delta)
     taskMgr.add(task, self.taskName("scroll"))
Ejemplo n.º 37
0
 def startSleepSwimTest(self):
     taskName = self.taskName('sleepSwimTest')
     taskMgr.remove(taskName)
     task = Task.Task(self.sleepSwimTest)
     self.lastMoved = globalClock.getFrameTime()
     self.lastState = None
     self.lastAction = None
     self.sleepSwimTest(task)
     taskMgr.add(self.sleepSwimTest, taskName, 35)
Ejemplo n.º 38
0
 def spawnMouseRollTask(self):
     taskMgr.remove('manipulateCamera')
     self.camManipRef.setPos(self.coaMarkerPos)
     self.camManipRef.setHpr(base.direct.camera, ZERO_POINT)
     t = Task.Task(self.mouseRollTask)
     t.coaCenter = getScreenXY(self.coaMarker)
     t.lastAngle = getCrankAngle(t.coaCenter)
     t.wrt = base.direct.camera.getTransform(self.camManipRef)
     taskMgr.add(t, 'manipulateCamera')
Ejemplo n.º 39
0
 def startTrackAnimToSpeed(self):
     taskName = self.taskName('trackAnimToSpeed')
     taskMgr.remove(taskName)
     task = Task.Task(self.trackAnimToSpeed)
     self.lastMoved = globalClock.getFrameTime()
     self.lastState = None
     self.lastAction = None
     self.trackAnimToSpeed(task)
     taskMgr.add(self.trackAnimToSpeed, taskName, 35)
Ejemplo n.º 40
0
 def __startManipulateCamera(self, func=None, task=None, ival=None):
     self.__stopManipulateCamera()
     if func:
         assert (task is None)
         task = Task.Task(func)
     if task:
         self.manipulateCameraTask = taskMgr.add(task, 'manipulateCamera')
     if ival:
         ival.start()
         self.manipulateCameraInterval = ival
    def __fireCannonTask(self, task):
        launchTime = 0.0
        toonId = task.toonId
        cannon = task.cannon
        toon = cannon.getToonInside()
        self.notify.debug(str(self.doId) + ' FIRING CANNON FOR TOON ' + str(toonId))
        if not cannon.isToonInside():
            return Task.done
        if self.isLocalToonId(toonId):
            self.inWater = 0
            startPos, startHpr, startVel, trajectory = self.__calcFlightResults(cannon, toonId, launchTime)

            self.notify.debug('start position: ' + str(startPos))
            self.notify.debug('start velocity: ' + str(startVel))
            self.notify.debug('time of launch: ' + str(launchTime))
        cannon.removeToonReadyToFire()
        shootTask = Task.Task(self.__shootTask, self.taskNameShoot)
        shootTask.info = {'toonId': toonId,
         'cannon': cannon}
        if self.isLocalToonId(toonId):
            self.flyingToonOffsetRotation = 0
            self.flyingToonOffsetAngle = 0
            self.flyingToonOffsetX = 0
            self.flyingToonOffsetY = 0
            self.hitCloud = 0
            self.initialFlyVel = INITIAL_VELOCITY
            self.camNode = NodePath(self.uniqueName('flyingCamera'))
            self.camNode.setScale(0.5)
            self.camNode.setPos(self.localFlyingToon.getPos())
            self.camNode.setHpr(self.localFlyingToon.getHpr())
            self.camNode.reparentTo(render)
            self.lastStartVel = startVel
            place = base.cr.playGame.getPlace()
            place.fsm.request('activity')
            toon.dropShadow.hide()
            self.localFlyingDropShadow = self.shadowNode.copyTo(hidden)
            vel = startVel
            toon.lookAt(toon.getPos() + Vec3(vel[0], vel[1], vel[2]))
            toon.setP(localAvatar, -90)
            hpr = toon.getHpr()
            toon.d_setPosHpr(startPos[0], startPos[1], startPos[2], hpr[0], hpr[1], hpr[2])
            self.localFlyingToon.wrtReparentTo(render)
            info = {}
            info['toonId'] = toonId
            info['trajectory'] = trajectory
            info['launchTime'] = launchTime
            info['toon'] = self.localFlyingToon
            info['hRot'] = cannon.getRotation()
            base.camera.wrtReparentTo(self.localFlyingToon)
            flyTask = Task.Task(self.__localFlyTask, self.taskNameFly)
            flyTask.info = info
            seqTask = Task.sequence(shootTask, flyTask)
            self.__startCollisionHandler()
            self.notify.debug('Disable standard local toon controls.')
            base.localAvatar.disableAvatarControls()
            frameTime = globalClock.getFrameTime()
            netLaunchTime = globalClockDelta.localToNetworkTime(launchTime + frameTime, bits=31)
            self.sendUpdate('setToonTrajectoryAi', [netLaunchTime,
             startPos[0],
             startPos[1],
             startPos[2],
             startHpr[0],
             startHpr[1],
             startHpr[2],
             startVel[0],
             startVel[1],
             startVel[2]])
        else:
            seqTask = shootTask
        taskMgr.add(seqTask, self.taskName('flyingToon') + '-' + str(toonId))
        toon.startSmooth()
        return Task.done
Ejemplo n.º 42
0
 def irisInTask(self, task, time=0.5):
     """
     As a sequence: iris in, execute the given task
     """
     seq = Task.sequence(self.irisIn(time, block=1), task)
     taskMgr.add(seq, 'irisInTaskSeq')
Ejemplo n.º 43
0
 def fadeInTask(self, task, time=0.5):
     """
     As a sequence: Fade in, execute the given task
     """
     seq = Task.sequence(self.fadeIn(time, block=1), task)
     taskMgr.add(seq, 'fadeInTaskSeq')
 def showHpText(self, number, bonus = 0, scale = 1, attackTrack = -1):
     if self.HpTextEnabled and not self.ghostMode:
         if number != 0:
             if self.hpText:
                 self.hideHpText()
             self.HpTextGenerator.setFont(OTPGlobals.getSignFont())
             if number < 0:
                 self.HpTextGenerator.setText(str(number))
                 if base.cr.newsManager.isHolidayRunning(ToontownGlobals.SILLY_SURGE_HOLIDAY):
                     self.sillySurgeText = True
                     absNum = abs(number)
                     if absNum > 0 and absNum <= 10:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[1])
                     elif absNum > 10 and absNum <= 20:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[2])
                     elif absNum > 20 and absNum <= 30:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[3])
                     elif absNum > 30 and absNum <= 40:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[4])
                     elif absNum > 40 and absNum <= 50:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[5])
                     elif absNum > 50 and absNum <= 60:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[6])
                     elif absNum > 60 and absNum <= 70:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[7])
                     elif absNum > 70 and absNum <= 80:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[8])
                     elif absNum > 80 and absNum <= 90:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[9])
                     elif absNum > 90 and absNum <= 100:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[10])
                     elif absNum > 100 and absNum <= 110:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[11])
                     else:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.SillySurgeTerms[12])
                 if self.interactivePropTrackBonus > -1 and self.interactivePropTrackBonus == attackTrack:
                     self.sillySurgeText = True
                     if attackTrack in TTLocalizer.InteractivePropTrackBonusTerms:
                         self.HpTextGenerator.setText(str(number) + '\n' + TTLocalizer.InteractivePropTrackBonusTerms[attackTrack])
             else:
                 self.HpTextGenerator.setText('+' + str(number))
             self.HpTextGenerator.clearShadow()
             self.HpTextGenerator.setAlign(TextNode.ACenter)
             if bonus == 1:
                 r = 1.0
                 g = 1.0
                 b = 0
                 a = 1
             elif bonus == 2:
                 r = 1.0
                 g = 0.5
                 b = 0
                 a = 1
             elif number < 0:
                 r = 0.9
                 g = 0
                 b = 0
                 a = 1
                 if self.interactivePropTrackBonus > -1 and self.interactivePropTrackBonus == attackTrack:
                     r = 0
                     g = 0
                     b = 1
                     a = 1
             else:
                 r = 0
                 g = 0.9
                 b = 0
                 a = 1
             self.HpTextGenerator.setTextColor(r, g, b, a)
             self.hpTextNode = self.HpTextGenerator.generate()
             self.hpText = self.attachNewNode(self.hpTextNode)
             self.hpText.setScale(scale)
             self.hpText.setBillboardPointEye()
             self.hpText.setBin('fixed', 100)
             if self.sillySurgeText:
                 self.nametag3d.setDepthTest(0)
                 self.nametag3d.setBin('fixed', 99)
             self.hpText.setPos(0, 0, self.height / 2)
             seq = Task.sequence(self.hpText.lerpPos(Point3(0, 0, self.height + 1.5), 1.0, blendType='easeOut'), Task.pause(0.85), self.hpText.lerpColor(Vec4(r, g, b, a), Vec4(r, g, b, 0), 0.1), Task.Task(self.hideHpTextTask))
             taskMgr.add(seq, self.uniqueName('hpText'))