def transition_screen(self, image, time): """ Creates a transition screen. An image is popup while listening to input is set to False @param image: the image name @param time: the lifetime of the popup. """ new_image = OnscreenImage( self.main_screen.image_path + image + ".png", parent=self.main_screen.gui_render_node, pos=(0, 0, 0), ) new_image.set_bin("fixed", 10) new_image.show() self._update() # hidding on_screen_texts for o in self.on_screen_texts: self.on_screen_texts[o].hide() relisten = False if self._listen_to_input: self._listen_to_input = False relisten = True self.lock_text.hide() def to_call(relisten): if relisten: self._listen_to_input = True self.lock_text.show() new_image.destroy() # showing on_screen_texts for o in self.on_screen_texts: self.on_screen_texts[o].show() self._update() self.main_screen.gameEngine.taskMgr.doMethodLater(time, to_call, name="update", extraArgs=[relisten])
class Game(DirectObject): def __init__(self): self.background = OnscreenImage(image='image/title_screen.png', scale=1.0, pos=(0, 0, 0), parent=render2d) self.foreground = OnscreenImage(image='image/we_are_number_one.png', scale=(256, 1, 256), pos=(640, 0, -360), parent=pixel2d) self.foreground.wrt_reparent_to(aspect2d) self.foreground.set_transparency(TransparencyAttrib.M_alpha) self.foreground.set_bin("fixed", 10) self.foreground.hide() font = loader.load_font('font/oh_whale.otf') font.set_outline(outline_color=(0, 0, 0, 1), outline_width=1.0, outline_feather=0.5) font.setPixelsPerUnit(96) font64 = font.make_copy() font64.setPixelsPerUnit(64) self.text_node = TextNode('silly_text_node') self.text_node.set_font(font) self.text_node.set_text('Press any key to start!') self.text_node.set_align(TextNode.A_center) self.text_node.set_text_color(0.4, 0.5, 1, 1) self.text_node.set_shadow(0.03, 0.03) self.text_node.set_shadow_color(0, 0, 0, 0.5) self.text_path = aspect2d.attach_new_node(self.text_node) self.text_path.set_scale(0.15) self.text_path.set_z(-0.9) self.text_path.set_transparency(TransparencyAttrib.M_alpha) self.score_text_node = TextNode('score_text_node') self.score_text_node.set_font(font) self.score_text_node.set_text('Score: 0') self.score_text_node.set_align(TextNode.A_left) self.score_text_node.set_text_color(1.0, 1.0, 1.0, 1) self.score_text_node.set_shadow(0.03, 0.03) self.score_text_node.set_shadow_color(0, 0, 0, 0.5) self.score_text_node_path = base.a2dTopLeft.attach_new_node( self.score_text_node) self.score_text_node_path.set_scale(0.15) self.score_text_node_path.set_pos(0, 0, -0.13) self.score_text_node_path.set_transparency(TransparencyAttrib.M_alpha) self.button = DirectFrame(frameColor=(1.0, 1.0, 1.0, 1.0), frameTexture='image/button.png', frameSize=(0, 128, -128, 0), text='1', text_font=font64, text_scale=64, text_fg=Vec4(1.0), text_align=TextNode.A_center, text_pos=(64, -79), textMayChange=1, pos=(-64, 0, 64), state=DGG.NORMAL, suppressMouse=True, parent=pixel2d) self.button.flatten_light() self.button.bind(DGG.B1PRESS, self.on_button_click) self.button.wrt_reparent_to(aspect2d) self.button.set_transparency(TransparencyAttrib.M_alpha) self.button.set_pos(0, 0, 0) self.button.set_bin("fixed", 11) self.button.hide() self.last_number = None self.points = [] self.fake_button = DirectFrame(frameColor=(1.0, 1.0, 1.0, 1.0), frameTexture='image/button.png', frameSize=(0, 128, -128, 0), text='1', text_font=font64, text_scale=64, text_fg=Vec4(1.0), text_align=TextNode.A_center, text_pos=(64, -79), textMayChange=1, pos=(-64, 0, 64), parent=pixel2d) self.fake_button.flatten_light() self.fake_button.wrt_reparent_to(aspect2d) self.fake_button.set_transparency(TransparencyAttrib.M_alpha) self.fake_button.set_pos(0, 0, 0) self.button.set_bin("fixed", 11) self.fake_button.hide() base.buttonThrowers[0].node().setButtonDownEvent('buttonDown') self.accept('buttonDown', self.start) self.music = loader.load_music('music/the_silly_number_song.ogg') self.beat_count = 0 self.beat_tsk = None self.images_seq = make_image_sequence(self.foreground) self.buttons_seq = make_button_sequence(self.button, self.fake_button) self.stubtitles_seq = make_song_sequence(self.text_node, self.music) self.stubtitles_seq.append(Wait(7.0)) self.stubtitles_seq.append(Func(self.reset)) def reset(self): taskMgr.remove(self.beat_tsk) self.text_node.set_text('Press any key to start!') self.foreground.hide() self.background.setImage('image/title_screen.png') self.fake_button.hide() self.button.hide() self.points = [] self.beat_count = 0 self.last_number = None base.buttonThrowers[0].node().setButtonDownEvent('buttonDown') self.accept('buttonDown', self.start) def hide_button(self, task): if self.last_number == self.button['text']: self.button.hide() return task.done def reset_button(self, task): self.button['frameTexture'] = 'image/button.png' return task.done def on_button_click(self, event=None): self.button['frameTexture'] = 'image/button_down.png' self.last_number = self.button['text'] if self.last_number not in self.points: self.points.append(self.last_number) self.fake_button.hide() #update displayed score: self.score_text_node.set_text('Score: {0}'.format(len( self.points))) taskMgr.doMethodLater(0.1, self.reset_button, 'reset_tsk') taskMgr.doMethodLater(0.2, self.hide_button, 'hide_tsk') def beat(self, task): self.beat_count += 1 if self.beat_count % 2 == 0: self.background.setImage( loader.load_texture('image/background2.png')) else: self.background.setImage( loader.load_texture('image/background.png')) return task.again def start(self, event=None): self.score_text_node.set_text('Score: 0') self.ignore('buttonDown') self.beat_tsk = taskMgr.doMethodLater(0.24, self.beat, 'beat_tsk') self.buttons_seq.start() self.stubtitles_seq.start() self.images_seq.start()
class InfoOverScreen: """ The popup window class """ def __init__(self, MainScreen, text=""): self.main_screen = MainScreen self._image = OnscreenImage(image=self.main_screen.image_path + "comm.png", pos=(0, 0, 0), parent=self.main_screen.gui_render_node, ) # image in front self._image.set_bin("fixed", 10) self._image.setTransparency(TransparencyAttrib.MAlpha) self._text = OnscreenText(text=text, align=TextNode.ALeft, mayChange=True, pos=self.main_screen.gimp_pos(210, 230), scale=(0.06, 0.08), fg=LVector4f(1, 1, 1, 1), parent=self._image, wordwrap=20, ) self._show = False self._image.hide() self._text.hide() def is_on_screen(self): """ @return: True if the popup is on screen. False otherwise """ return self._show def show(self, t=None): """ Shows the window @param t: a mute parameter allowing to call it in a doMethodLater """ self._show = True self._image.show() self._text.show() self.main_screen.update() def hide(self, t=None): """ Hides the window @param t: a mute parameter allowing to call it in a doMethodLater """ self._show = False self._image.hide() self._text.hide() self.main_screen.update() def set_text(self, text, end="\n\n... (Entrée pour continuer) ..."): """ Sets the text of the popup. @param text: the text @param end: the end text. """ self._text["text"] = text + end if self._show: self.main_screen.update()