Exemplo n.º 1
0
 def build(self):
     txt = Text(_('Select the track'),
                pos=(-.2, .8),
                **self.menu_args.text_args)
     self.add_widgets([txt])
     t_a = self.menu_args.text_args.copy()
     t_a['scale'] = .06
     tracks_per_row = 3
     gprops = self.props.gameprops
     for row, col in product(range(2), range(tracks_per_row)):
         if row * tracks_per_row + col >= len(gprops.season_tracks):
             break
         z_offset = 0 if len(gprops.season_tracks) > tracks_per_row else .35
         num_tracks = len(gprops.season_tracks) - tracks_per_row \
             if row == 1 else min(tracks_per_row, len(gprops.season_tracks))
         x_offset = .3 * (tracks_per_row - num_tracks)
         btn = ImgBtn(
             scale=.3,
             pos=(-.8 + col * .6 + x_offset, 1, .4 - z_offset - row * .7),
             frameColor=(0, 0, 0, 0),
             image=gprops.track_img %
             gprops.season_tracks[col + row * tracks_per_row],
             command=self.on_track,
             extraArgs=[gprops.season_tracks[col + row * tracks_per_row]],
             **self.menu_args.imgbtn_args)
         txt = Text(gprops.tracks_tr()[col + row * tracks_per_row],
                    pos=(-.8 + col * .6 + x_offset,
                         .14 - z_offset - row * .7),
                    **t_a)
         self.add_widgets([btn, txt])
     ThanksPageGui.build(self, exit_behav=self.eng.server.is_active)
Exemplo n.º 2
0
 def build(self):
     menu_args = self.menu_args
     t_a = menu_args.text_args.copy()
     # del t_a['scale']
     jid_lab = Text(_('Your jabber id:'), pos=(-.25, .8),
                            align='right', **t_a)
     pwd_lab = Text(_('Your jabber password:'******'right', **t_a)
     init_txt = self.props.opt_file['settings']['xmpp']['usr'] if \
         self.props.opt_file['settings']['xmpp']['usr'] else \
         _('your jabber id')
     self.jid_ent = Entry(
         scale=.08, pos=(-.15, 1, .8), entryFont=menu_args.font, width=12,
         frameColor=menu_args.btn_color, initialText=init_txt,
         text_fg=menu_args.text_active, on_tab=self.on_tab,
         on_click=self.on_click)
     self.pwd_ent = Entry(
         scale=.08, pos=(-.15, 1, .6), entryFont=menu_args.font, width=12,
         frameColor=menu_args.btn_color, obscured=True,
         text_fg=menu_args.text_active, command=self.start)
     start_btn = Btn(
         text=_('Log-in'), pos=(-.2, 1, .4), command=self.start,
         **self.props.gameprops.menu_args.btn_args)
     self.store_cb = CheckBtn(
         pos=(-.2, 1, .1), text=_('store the password'),
         indicatorValue=False, indicator_frameColor=menu_args.text_active,
         **menu_args.checkbtn_args)
     t_a['scale'] = .06
     store_lab = Text(
         _('(only if your computer is not shared with other people)'),
         pos=(-.2, -.02), wordwrap=64, **t_a)
     notes_texts = [
         _('If you are a supporter, please write us (%s) your '
           'jabber id so we can highlight your account as a supporter '
           'one.'),
         _('Yorg sends your XMPP presence to other Yorg users, so they '
           "can see your XMPP presence status. If you don't want this, "
           "please don't use your personal account and create a new one "
           'for Yorg.'),
         _('When you add a Yorg friend, you are adding it to your '
           "account's roster too."),
         _("Yorg's XMPP code is still experimental: if you have "
           'important data in your XMPP account, please create a new '
           'account for playing Yorg with.')]
     notes_texts = [str(i + 1) + '. ' + elm for i, elm in enumerate(notes_texts)]
     notes_texts[0] = notes_texts[0] % '*****@*****.**'
     notes_txt = '\n'.join(notes_texts)
     notes_lab = Text(
         notes_txt, pos=(-1.64, -.16), align='left', wordwrap=42,
         **t_a)
     widgets = [self.jid_ent, self.pwd_ent, start_btn, jid_lab, pwd_lab,
                self.store_cb, store_lab, notes_lab]
     self.add_widgets(widgets)
     self.eng.attach_obs(self.on_frame)
     ThanksPageGui.build(self)
Exemplo n.º 3
0
 def set_news(self):
     menu_args = self.props.gameprops.menu_args
     feeds = parse(self.props.feed_url)
     if not feeds['entries']: return
     self.__feed_type = \
         'rss' if 'published' in feeds['entries'][0] else 'atom'
     self.__date_field = \
         'published' if self.__feed_type == 'rss' else 'updated'
     publ = lambda entry: self.__conv(entry[self.__date_field])
     rss = sorted(feeds['entries'], key=publ)
     conv_time = lambda ent: datetime.strftime(self.__conv(ent), '%b %d')
     rss = [(conv_time(ent[self.__date_field]), ent['title'])
            for ent in rss]
     rss.reverse()
     rss = rss[:5]
     rss = [(_rss[0], self.__ellipsis_str(_rss[1])) for _rss in rss]
     frm = Frame(frameSize=(0, 1.0, 0, .75),
                 frameColor=(.2, .2, .2, .5),
                 pos=(.05, 1, .1),
                 parent=base.a2dBottomLeft)
     texts = [
         Text(_('Last news:'),
              pos=(.55, .75),
              scale=.055,
              wordwrap=32,
              parent='bottomleft',
              fg=menu_args.text_normal,
              font=menu_args.font,
              tra_src='Last news:',
              tra_tra=_('Last news:'))
     ]
     rss = [map(self.__to_unicode, rss_str) for rss_str in rss]
     texts += [
         Text(': '.join(rss[i]),
              pos=(.1, .65 - i * .1),
              scale=.055,
              wordwrap=32,
              parent='bottomleft',
              align='left',
              fg=menu_args.text_normal,
              font=menu_args.font) for i in range(min(5, len(rss)))
     ]
     btn_args = self.props.gameprops.menu_args.btn_args.copy()
     btn_args['scale'] = .055
     show_btn = Btn(text=_('show'),
                    pos=(.55, 1, .15),
                    command=self.eng.open_browser,
                    extraArgs=[self.props.site_url],
                    parent=base.a2dBottomLeft,
                    tra_src='show',
                    tra_tra=_('show'),
                    **btn_args)
     self.add_widgets([frm] + texts + [show_btn])
Exemplo n.º 4
0
 def __bld_car(self, cars_per_row, row, col):
     t_a = self.menu_args.text_args.copy()
     del t_a['scale']
     gprops = self.props.gameprops
     z_offset = 0 if len(gprops.cars_names) > cars_per_row else .35
     num_car_row = len(gprops.cars_names) - cars_per_row if row == 1 else \
         min(cars_per_row, len(gprops.cars_names))
     x_offset = .4 * (cars_per_row - num_car_row)
     btn = ImgBtn(scale=.32,
                  pos=(-1.4 + col * .64 + x_offset, 1,
                       .4 - z_offset - row * .7),
                  frameColor=(0, 0, 0, 0),
                  image=gprops.car_path %
                  gprops.cars_names[col + row * cars_per_row],
                  command=self.on_car,
                  extraArgs=[gprops.cars_names[col + row * cars_per_row]],
                  **self.menu_args.imgbtn_args)
     widgets = [btn]
     txt = Text(gprops.cars_names[col + row * cars_per_row],
                pos=(-1.4 + col * .64 + x_offset,
                     .64 - z_offset - row * .7),
                scale=.072,
                **t_a)
     name = Text('',
                 pos=(-1.4 + col * .64 + x_offset,
                      .04 - z_offset - row * .7),
                 scale=.046,
                 **t_a)
     btn._name_txt = name
     widgets += [txt, name]
     car_name = gprops.cars_names[col + row * cars_per_row]
     cfg_fpath = gprops.phys_path % car_name
     with open(cfg_fpath) as phys_file:
         cfg = load(phys_file)
     speed = int(round((cfg['max_speed'] / 120.0 - 1) * 100))
     fric = int(round((cfg['friction_slip'][0] / 2.6 - 1) * 100))
     roll = -int(round((cfg['roll_influence'][0] / .21 - 1) * 100))
     sign = lambda x: '\1green\1+\2' if x > 0 else ''
     psign = lambda x, sgn=sign: '+' if x == 0 else sgn(x)
     __col_ = lambda x: '\1green\1%s\2' if x > 0 else '\1red\1%s\2'
     _col_ = lambda x, __col=__col_: __col(x) % x
     pcol = lambda x, _col=_col_: x if x == 0 else _col(x)
     txt_lst = [(_('adherence'), fric, .11), (_('speed'), speed, .27),
                (_('stability'), roll, .19)]
     widgets += map(
         lambda txt_def: self.__add_txt(*txt_def + (
             psign, pcol, col, x_offset, z_offset, row)), txt_lst)
     return widgets
Exemplo n.º 5
0
 def __add_txt(self, val, pos_z, psign, pcol, col, row):
     t_a = self.menu_args.text_args.copy()
     del t_a['scale']
     return Text(
         '%s%s%%' % (psign(val), pcol(val)),
         pos=(-.75 + col * .5, pos_z - row * .64), scale=.052,
         align='right', **t_a)
Exemplo n.º 6
0
    def build(self, back_btn=True):
        frm = Frame(
            frameSize=(-1.5, 1.5, -.9, .9), frameColor=(.95, .95, .7, .85))
        question_txt = _(
            "What do you want to do?\n\nNote: use '%s' for pausing the game.")
        question_txt = question_txt % self.keys.pause
        menu_args = self.menu_args
        txt = Text(
            question_txt, pos=(0, .64), scale=.08, wordwrap=32,
            fg=menu_args.text_active, font=menu_args.font)
        on_back = lambda: self.on_end(True)
        on_end = lambda: self.on_end(False)
        menu_data = [
            ('back to the game', _('back to the game'), on_back),
            ('back to the main menu', _('back to the main menu'), on_end)]
        btn_args = menu_args.btn_args
        btn_visit = Btn(
            text=menu_data[0][1], pos=(0, 1, 0), command=menu_data[0][2],
            text_scale=.8, **btn_args)
        btn_dont_visit = Btn(
            text=menu_data[1][1], pos=(0, 1, -.5), command=menu_data[1][2],
            text_scale=.8, **btn_args)
        self.add_widgets([frm, txt, btn_visit, btn_dont_visit])
        PageGui.build(self, False)

        if self.eng.lib.version().startswith('1.10'):
            self.eng.show_cursor()
        else:
            self.eng.hide_cursor()
            self.eng.show_standard_cursor()
Exemplo n.º 7
0
 def build(self, back_btn=True):
     menu_args = self.menu_args
     text = ', '.join(ThanksNames.get_all_thanks())
     txt = Text(text, pos=(-.4, .72), wordwrap=18,
                        **menu_args.text_args)
     self.add_widgets([txt])
     ThanksPageGui.build(self)
Exemplo n.º 8
0
 def build(self, back_btn=True):
     menu_args = self.menu_args
     frm = Frame(frameSize=(-1.5, 1.5, -.9, .9),
                 frameColor=(.95, .95, .7, .85))
     txt = _(
         'Please, visit our site after exiting!\n\nIt helps us! Thank you!')
     txt = Text(txt,
                pos=(0, .64),
                scale=.08,
                wordwrap=32,
                fg=menu_args.text_active,
                font=menu_args.font)
     menu_data = [('visit our site after exiting',
                   _('visit our site after exiting'),
                   lambda: self.on_end(True)),
                  ("don't visit our site after exiting",
                   _("don't visit our site after exiting"),
                   lambda: self.on_end(False))]
     btn_args = self.menu_args.btn_args
     btn_args['frameSize'] = (-12, 12, -.8, 1.2)
     btn_visit = Btn(text=menu_data[0][1],
                     pos=(0, 1, 0),
                     command=menu_data[0][2],
                     text_scale=.9,
                     **btn_args)
     btn_dont_visit = Btn(text=menu_data[1][1],
                          pos=(0, 1, -.5),
                          command=menu_data[1][2],
                          text_scale=.7,
                          **btn_args)
     widgets = [frm, txt, btn_visit, btn_dont_visit]
     self.add_widgets(widgets)
     PageGui.build(self, False)
Exemplo n.º 9
0
 def __add_lab(self, txt, pos_z, row, col):
     t_a = self.menu_args.text_args.copy()
     del t_a['scale']
     return Text(txt + ':',
                 pos=(-1.15 + col * .5, pos_z - row * .5),
                 scale=.046,
                 align='left',
                 **t_a)
Exemplo n.º 10
0
 def __add_txt(self, txt, val, pos_z, psign, pcol, col, x_offset, z_offset,
               row):
     t_a = self.menu_args.text_args.copy()
     del t_a['scale']
     return Text(
         '%s: %s%s%%' % (txt, psign(val), pcol(val)),
         pos=(-1.1 + col * .64 + x_offset, pos_z - z_offset - row * .7),
         scale=.052, align='right', **t_a)
Exemplo n.º 11
0
 def build(self, back_btn=True, exit_behav=False):
     menu_args = self.menu_args
     t_a = menu_args.text_args
     t_a['fg'] = menu_args.text_normal
     t_a['scale'] = .06
     thanks_txt = Text(_('Thanks to: ') + ThanksNames.get_thanks(1, 3)[0],
                       pos=(.05, .05),
                       align=TextNode.A_left,
                       parent='bottomleft',
                       wordwrap=64,
                       **t_a)
     self.add_widgets([thanks_txt])
     PageGui.build(self, back_btn, exit_behav)
Exemplo n.º 12
0
 def build(self, exit_behav=False):
     gprops = self.props.gameprops
     widgets = [Text(
         _('Select the car'), pos=(-.2, .8),
         **self.menu_args.text_args)]
     cars_per_row = 4
     for row, col in product(range(2), range(cars_per_row)):
         if row * cars_per_row + col >= len(gprops.cars_names):
             break
         widgets += self.__bld_car(cars_per_row, row, col)
     self.add_widgets(widgets)
     self.current_cars = {}
     ThanksPageGui.build(self, exit_behav=exit_behav)
Exemplo n.º 13
0
 def build(self):
     menu_args = self.menu_args
     dev_str = [
         _('Code') + ': Flavio Calva',
         _('Art') + ': Luca Quartero',
         _('Audio') + ': Jay Bachelor',
         _('Translations') + ': Wuzzy, GunChleoc, Leandro Vergara, xin'
     ]
     dev_str = '\n\n'.join(dev_str)
     txt = Text(dev_str, pos=(-.2, .72), wordwrap=20, **menu_args.text_args)
     btn = Btn(text=_('Supporters'),
               pos=(-.2, 1, -.4),
               command=lambda: self.notify('on_push_page', 'supporters'),
               **menu_args.btn_args)
     self.add_widgets([txt, btn])
     ThanksPageGui.build(self)
Exemplo n.º 14
0
    def build(self, exit_behav):
        self.drv_info = self.props.gameprops.drivers_info
        menu_args = self.menu_args
        widgets = [Text(_('Select the driver'), pos=(-.2, .8),
                                **menu_args.text_args)]
        t_a = self.menu_args.text_args.copy()
        del t_a['scale']
        self.name = Text(_('Write your name:'), pos=(-.3, .6), scale=.06,
                            align='right', wordwrap=128, **t_a)
        self.drivers = []
        for row, col in product(range(2), range(4)):
            idx = col + row * 4
            drv_btn = ImgBtn(
                scale=.24, pos=(-.95 + col * .5, 1, .3 - row * .64),
                frameColor=(0, 0, 0, 0),
                image=self.props.gameprops.drivers_img.path % idx,
                command=self.on_click, extraArgs=[idx],
                **self.menu_args.imgbtn_args)
            name = Text(
                '',
                pos=(-.95 + col * .5, .01 - row * .64),
                scale=.046, **t_a)
            drv_btn._name_txt = name
            widgets += [drv_btn, name]
            self.drivers += [widgets[-1]]
            sign = lambda pos_x: '\1green\1+\2' if pos_x > 0 else ''
            psign = lambda pos_x, sgn=sign: '+' if pos_x == 0 else sgn(pos_x)

            def ppcol(x):
                return '\1green\1%s\2' % x if x > 0 else '\1red\1%s\2' % x
            pcol = lambda x: x if x == 0 else ppcol(x)
            lab_lst = [(_('adherence'), .09), (_('speed'), .21),
                       (_('stability'), .15)]
            widgets += map(
                lambda lab_def: self.__add_lab(*(lab_def + (row, col))),
                lab_lst)
            txt_lst = [(self.drv_info[idx - 1].adherence, .09),
                       (self.drv_info[idx - 1].speed, .21),
                       (self.drv_info[idx - 1].stability, .15)]
            widgets += map(
                lambda txt_def: self.__add_txt(
                    *txt_def + (psign, pcol, col, row)),
                txt_lst)
        self.sel_drv_img = Img(
            self.props.gameprops.cars_img % self.mediator.car,
            parent=base.a2dBottomLeft, pos=(.3, 1, .4), scale=.28)
        widgets += [self.sel_drv_img, self.name]
        self.add_widgets(widgets)
        ffilterpath = self.eng.curr_path + 'yyagl/assets/shaders/filter.vert'
        with open(ffilterpath) as ffilter:
            vert = ffilter.read()
        shader = load_shader(vert, frag)
        if shader:
            self.sel_drv_img.set_shader(shader)
        self.sel_drv_img.set_transparency(True)
        self.t_s = TextureStage('ts')
        self.t_s.set_mode(TextureStage.MDecal)
        empty_img = PNMImage(1, 1)
        empty_img.add_alpha()
        empty_img.alpha_fill(0)
        tex = Texture()
        tex.load(empty_img)
        self.sel_drv_img.set_texture(self.t_s, tex)
        ThanksPageGui.build(self, exit_behav=exit_behav)
Exemplo n.º 15
0
 def on_ko(self, err):  # unused err
     txt = Text(_('Error'), pos=(-.2, -.05), fg=(1, 0, 0, 1),
                        scale=.16, font=self.menu_args.font)
     self.eng.do_later(5, txt.destroy)