Exemple #1
0
    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])
Exemple #2
0
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()