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
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)
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)
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()