Exemple #1
0
    def ajouterTexteGagnant(self, message):
        textSize = len(message)
        espace = 0.02
        if textSize >= 30:
            startScale = 0.14
            espace = 0.09
        elif textSize >= 20:
            startScale = 0.17
            espace = 0.12
        elif textSize >= 10:
            startScale = 0.20
            espace = 0.14
        else:
            startScale = 0.30
            espace = 0.19

        i = 0
        sequence = []
        for index, caractere in enumerate(message):

            label = OnscreenText(text=caractere,
                                 pos=(-1.5 + espace * index, -0.75),
                                 scale=startScale,
                                 align=TextNode.ACenter,
                                 mayChange=False)
            # #les deux intervals opposés (monter et descendre)
            duree = 0.5
            intervalUp = label.posInterval(duree,
                                           Point3(0, 0, 0.2),
                                           startPos=Point3(0, 0, 0),
                                           blendType='easeIn')
            intervalDown = label.posInterval(duree,
                                             Point3(0, 0, 0),
                                             startPos=Point3(0, 0, 0.2),
                                             blendType='easeOut')
            # # # la loop qui dure toujours
            #truc 1:
            # sequence = Sequence(intervalUp,intervalDown)
            # sequenceDepart = Sequence(Wait(0.3 * i), sequence)

            # sequenceDepart.loop()

            # truc 2:

            sequence.append(Sequence(intervalUp, intervalDown))
            # b = sequence[i]
            b = i / 21.0 * 3.14
            sequenceDepart = Sequence(
                Wait(math.sin(i / float(len(message)) * 3.14)),
                Func(lambda i=i, s=sequence: s[i].loop()))

            # sequenceDepart = Sequence(Func(lambda s = sequence : s[i].loop()))

            sequenceDepart.start()

            # self.sequences.append(sequence)
            self.lettres.append(label)
            i = i + 1
Exemple #2
0
    def decoration(self):

        if not self.arreterDecoration:
            threading.Timer(0.1, lambda: self.decoration()).start()

            labelTest = OnscreenText(text="TANK'EM!!",
                                     pos=(random.randrange(5),
                                          random.randrange(5),
                                          random.randrange(5)),
                                     scale=0.2,
                                     fg=(random.randrange(10),
                                         random.randrange(10),
                                         random.randrange(10), 1),
                                     align=TextNode.ACenter,
                                     mayChange=1,
                                     bg=(0.1, 1, 0.6, 1),
                                     frame=(0, 0, 0, 1))
            labelTest.setHpr(random.randrange(70), random.randrange(70),
                             random.randrange(70))

            testInterval = labelTest.posInterval(3,
                                                 Point3(-8, -2, -2),
                                                 startPos=Point3(
                                                     random.randrange(5),
                                                     random.randrange(5),
                                                     random.randrange(5)))

            mySequence = Sequence(testInterval)
            mySequence.start()
class BetterOnscreenText(DebugObject):

    """ Simple wrapper arround OnscreenText, providing a simpler interface
    and better visuals """

    def __init__(self, text="", parent=None, x=0, y=0, size=10, align="left",
                 color=None, mayChange=False):
        DebugObject.__init__(self, "BetterOnscreenText")

        if color is None:
            color = Vec3(1)

        alignMode = TextNode.ALeft

        if align == "center":
            alignMode = TextNode.ACenter
        elif align == "right":
            alignMode = TextNode.ARight

        self.initialPos = Vec2(x, -y)

        self._node = OnscreenText(
            text=text, parent=parent, pos=self.initialPos, scale=size,
            align=alignMode, fg=Vec4(color.x, color.y, color.z, 1.0),
            font=Globals.font, mayChange=mayChange)

    def getInitialPos(self):
        """ Returns the initial position of the text. This can be used for
        animations """
        return self.initialPos

    def posInterval(self, *args, **kwargs):
        """ Returns a pos interval, this is a wrapper arround
        NodePath.posInterval """
        return self._node.posInterval(*args, **kwargs)
Exemple #4
0
class BetterOnscreenText(DebugObject):
    """ Simple wrapper around OnscreenText, providing a simpler interface
    and better visuals """
    def __init__(self,
                 text="",
                 parent=None,
                 x=0,
                 y=0,
                 size=10,
                 align="left",
                 color=None,
                 mayChange=False,
                 font=None):
        DebugObject.__init__(self, "BetterOnscreenText")

        if color is None:
            color = Vec3(1)

        alignMode = TextNode.ALeft

        if align == "center":
            alignMode = TextNode.ACenter
        elif align == "right":
            alignMode = TextNode.ARight

        if font is None:
            font = Globals.font

        self.initialPos = Vec2(x, -y)

        self._node = OnscreenText(text=text,
                                  parent=parent,
                                  pos=self.initialPos,
                                  scale=size,
                                  align=alignMode,
                                  fg=Vec4(color.x, color.y, color.z, 1.0),
                                  font=font,
                                  mayChange=mayChange)

    def setText(self, text):
        """ Changes the text """
        self._node["text"] = text

    def getInitialPos(self):
        """ Returns the initial position of the text. This can be used for
        animations """
        return self.initialPos

    def posInterval(self, *args, **kwargs):
        """ Returns a pos interval, this is a wrapper around
        NodePath.posInterval """
        return self._node.posInterval(*args, **kwargs)
Exemple #5
0
    async def get_hit(self, bullet_type=None):
        if not self.root:
            return

        self.hp -= 1
        if self.hp < 0:
            # Score gain flies off.
            scale = math.sqrt(self.score_gain) / 25.0
            base.add_score(self.score_gain)
            text = OnscreenText(str(self.score_gain),
                                font=base.gui.font,
                                parent=base.render,
                                scale=scale,
                                fg=(1, 1, 1, 1))
            text.set_light_off(True)
            text.set_z(10)
            text.set_pos(self.root.get_pos())
            text.set_depth_test(False)
            dir = base.player.root.get_x() - self.root.get_x()
            if dir == 0:
                dir = choice((-1, 1))
            if dir < 5:
                dir *= 5 / abs(dir)
            text.posInterval(
                1.0,
                self.root.get_pos() +
                (-dir, base.player.speed.y * 0.6, 0)).start()
            text.scaleInterval(1.0, scale * 2).start()
            text.set_transparency(1)
            Sequence(Wait(0.25),
                     text.colorScaleInterval(0.75, (1, 0, 0, 0))).start()
            self.die()
        else:
            self.root.set_color_scale((1, 0, 0, 1))
            await WaitInterval(0.1)
            if self.root:
                self.root.clear_color_scale()