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