1
0
forked from Rowland/EG
EG/RenderPipelineFile/samples/05-Quboid/src/GUI.py
2025-07-24 11:37:46 +08:00

61 lines
2.0 KiB
Python

from panda3d.core import TextNode, Vec4
from direct.interval.LerpInterval import LerpColorScaleInterval
from direct.interval.MetaInterval import Sequence,Parallel
from direct.interval.FunctionInterval import Func,Wait
class GUI(object):
""" Handles the gui elements like showing the current stage """
def __init__(self, control):
self.control = control
self.gui_node = pixel2d.attach_new_node("GUI")
self.gui_node.hide()
self.gui_node.set_transparency(True)
roboto_light = loader.loadFont("res/Roboto-Light.ttf")
roboto_light.set_scale_factor(1)
roboto_light.set_pixels_per_unit(120)
self.text_stage = TextNode("TextStage")
self.text_stage.set_text("Stage 1")
self.text_stage.set_align(TextNode.A_left)
self.text_stage.set_text_color(1, 1, 1, 1)
self.text_stage.set_font(roboto_light)
self.text_stage_np = self.gui_node.attach_new_node(self.text_stage)
self.text_stage_np.set_scale(80.0)
self.text_stage_np.set_pos(60, 0, -120)
self.anim = None
def show(self):
self.gui_node.show()
if self.anim is not None:
self.anim.finish()
self.anim = Sequence(
LerpColorScaleInterval(self.gui_node, 0.2, Vec4(1), Vec4(1, 1, 1, 0), blendType="easeInOut")
)
self.anim.start()
def hide(self):
self.gui_node.hide()
if self.anim is not None:
self.anim.finish()
self.anim = Sequence(
LerpColorScaleInterval(self.gui_node, 0.2, Vec4(1, 1, 1, 0), Vec4(1), blendType="easeInOut")
)
self.anim.start()
def set_stage(self, stage_nr):
print(("Setting stage", stage_nr))
Sequence(
LerpColorScaleInterval(self.text_stage_np, 0.4, Vec4(1, 1, 1, 0), Vec4(1), blendType="easeInOut"),
Func(lambda *args: self.text_stage.set_text("Stage " + str(stage_nr))),
LerpColorScaleInterval(self.text_stage_np, 0.4, Vec4(1), Vec4(1, 1, 1, 0), blendType="easeInOut"),
).start()