def create_randomly_placed_text(self, node, value, color):
        font = MainFont()
        text_node = node.attach_new_node("text node")
        text_node.set_pos(
            uniform(-self.init_displacement, self.init_displacement),
            0,
            uniform(self.init_displacement, self.init_displacement),
        )

        scale = 0.15

        text = DirectLabel(
            text=str(value),
            scale=scale,
            parent=text_node,
            text_bg=(0, 0, 0, 0),
            text_fg=color,
            frameColor=(0, 0, 0, 0),
            text_font=font,
        )
        text.set_compass(core.instance.camera)
        task = Task(self.shake_and_fade_out_text, "fade out text")
        time = 3
        strength = scale * 0.01
        core.instance.task_mgr.add(
            task, extraArgs=[task, text, text_node, time, strength, color])
示例#2
0
class ChatBubble:
    def __init__(self, text, unit):
        self.creation_time = datetime.now()
        font = MainFont()
        frame_padding = 0.3
        half_frame_length = len(text) * 0.1 + frame_padding
        self.bubble_text = DirectLabel(
            text=text,
            pos=(0, 0, 0.66),
            scale=0.04,
            parent=unit.base_node,
            text_bg=(0, 0, 0, 0),
            text_fg=(1, 1, 1, 1),
            frameColor=(0, 0, 0, 0),
            text_font=font,
        )
        self.bubble_frame = DirectFrame(pos=(0, 0.01, 0.67),
                                        scale=0.1,
                                        parent=unit.base_node,
                                        frameColor=(0, 0, 0, 0.5),
                                        frameSize=(-half_frame_length,
                                                   half_frame_length, -0.5,
                                                   0.5))

        self.bubble_text.set_compass(core.instance.camera)
        self.bubble_frame.set_compass(core.instance.camera)

    def destroy(self):
        self.bubble_text.destroy()
        self.bubble_frame.destroy()
示例#3
0
class FloatingBar:
    def __init__(self, unit):
        self.unit = unit
        self.node = unit.base_node.attach_new_node("floating bar node")
        self.node.set_pos(0, 0, unit.actor.HEIGHT)

        self.health_bar = DirectWaitBar(
            value=unit.health,
            parent=self.node,
            frameColor=(1, 0, 0, 0.3),
            barColor=(0, 1, 0, 1),
        )
        self.health_bar.reparent_to(self.node)
        self.health_bar.set_scale(0.13)
        self.health_bar.set_compass(core.instance.camera)

        self.mana_bar = DirectWaitBar(value=unit.mana,
                                      pos=(0, 0, -0.03),
                                      parent=self.node,
                                      frameColor=(0, 0, 0, 0.3),
                                      barColor=(0, 0, 1, 1),
                                      frameSize=(-1, 1, 0.05, 0.15))
        self.mana_bar.reparent_to(self.node)
        self.mana_bar.set_scale(0.13)
        self.mana_bar.set_compass(core.instance.camera)

        font = MainFont()
        self.name_label = DirectLabel(
            text=unit.name,
            pos=(0, 0, 0.03),
            scale=0.04,
            parent=self.node,
            text_bg=(0, 0, 0, 0),
            text_fg=(1, 1, 1, 1),
            frameColor=(0, 0, 0, 0),
            text_font=font,
        )
        self.name_label.set_compass(core.instance.camera)

    def update_vertical_position(self):
        self.node.set_pos(0, 0, self.unit.actor.HEIGHT)

    def destroy(self):
        self.mana_bar.destroy()
        self.health_bar.destroy()
        self.name_label.destroy()