示例#1
0
 def build(self):
     menu_props = self.menu_props
     t_a = menu_props.text_args.copy()
     # del t_a['scale']
     jid_lab = Text(_('Your user id:'), pos=(-.05, .4),
                            align='right', **t_a)
     pwd_lab = Text(_('Your password:'******'right', **t_a)
     init_txt = self.props.opt_file['settings']['login']['usr'] if \
         self.props.opt_file['settings']['login']['usr'] else \
         _('your user id')
     self.jid_ent = Entry(
         scale=.08, pos=(.05, .4), entry_font=menu_props.font, width=12,
         frame_col=menu_props.btn_col, initial_text=init_txt,
         text_fg=menu_props.text_active_col, on_tab=self.on_tab,
         on_click=self.on_click)
     self.pwd_ent = Entry(
         scale=.08, pos=(.05, .2), entry_font=menu_props.font, width=12,
         frame_col=menu_props.btn_col, obscured=True,
         text_fg=menu_props.text_active_col, cmd=self.start)
     start_btn = Btn(
         text=_('Log-in'), pos=(0, 0), cmd=self.start,
         **self.props.gameprops.menu_props.btn_args)
     widgets = [self.jid_ent, self.pwd_ent, start_btn, jid_lab,
                pwd_lab]
     self.add_widgets(widgets)
     self.eng.attach_obs(self.on_frame)
     ThanksPageGui.build(self)
示例#2
0
 def build(self, back_btn=True):  # parameters differ from overridden
     self.eng.init_gfx()
     self.font = self.mediator.menu.gui.menu_props.font
     self.text_fg = self.mediator.menu.gui.menu_props.text_active_col
     self.text_bg = self.mediator.menu.gui.menu_props.text_normal_col
     self.text_err_col = self.mediator.menu.gui.menu_props.text_err_col
     self.load_txt = Text(_('LOADING...'),
                          scale=.2,
                          pos=(0, .78),
                          font=self.font,
                          fg=(.75, .75, .75, 1),
                          wordwrap=12)
     track_number = ''
     if not self.rprops.season_props.single_race:
         track_names = self.rprops.season_props.gameprops.season_tracks
         track_num = track_names.index(self.rprops.track_name) + 1
         track_number = ' (%s/%s)' % (track_num, len(track_names))
     track_txt = Text(_('track: ') + self.track_name_transl + track_number,
                      scale=.08,
                      pos=(0, .62),
                      font=self.font,
                      fg=self.text_bg,
                      wordwrap=12)
     self.set_wld_img()
     self.set_grid()
     self.set_ranking()
     self.set_controls()
     self.set_upgrades()
     self.add_widgets([self.load_txt, track_txt])
     PageGui.build(self, False)
示例#3
0
 def set_controls(self):
     txt = Text(_('Controls'),
                scale=.1,
                pos=(1.0, .38),
                font=self.font,
                fg=self.text_bg)
     self.add_widgets([txt])
     txts = []
     player_car_names = [
         player.car for player in self._players
         if player.kind == Player.human
     ]
     for i in range(len(player_car_names)):
         if i < self.eng.joystick_mgr.joystick_lib.num_joysticks:
             keys = ['forward', 'rear', 'fire', 'respawn']
             keys = [self.rprops.joystick[key + str(i + 1)] for key in keys]
             txts += [str(i + 1) + ': ' + ', '.join(keys)]
         else:
             keys = ['forward', 'rear', 'left', 'right', 'fire', 'respawn']
             _keys = [
                 getattr(self.rprops.keys.players_keys[i], key)
                 for key in keys
             ]
             tkeys = [self.eng.event.key2desc(_key) for _key in _keys]
             txts += [str(i + 1) + ': ' + ', '.join(tkeys)]
     txt = '\n'.join(txts)
     txt = Text(txt,
                scale=.056,
                pos=(.8, .22),
                font=self.font,
                fg=self.text_bg,
                wordwrap=12,
                align='left')
     self.add_widgets([txt])
示例#4
0
 def build(self):
     txt = Text(_('Select the track'),
                pos=(0, .8),
                **self.menu_props.text_args)
     self.add_widgets([txt])
     t_a = self.menu_props.text_args.copy()
     t_a['scale'] = .06
     tracks_per_row = 4
     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, .3),
             pos=(-.9 + col * .6 + x_offset, .4 - z_offset - row * .7),
             frame_col=(0, 0, 0, 0),
             img=gprops.track_img %
             gprops.season_tracks[col + row * tracks_per_row],
             cmd=self.on_track,
             extra_args=[gprops.season_tracks[col + row * tracks_per_row]],
             **self.menu_props.imgbtn_args)
         txt = Text(gprops.tracks_tr()[col + row * tracks_per_row],
                    pos=(-.9 + 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)
示例#5
0
 def build(self):
     menu_props = self.menu_props
     t_a = menu_props.text_args.copy()
     # del t_a['scale']
     email_lab = Text(_('Your email:'),
                      pos=(-.65, .4),
                      align='right',
                      **t_a)
     jid_lab = Text(_('Your user id:'),
                    pos=(-.65, .2),
                    align='right',
                    **t_a)
     pwd_lab = Text(_('Your password:'******'right',
                    **t_a)
     init_txt = self.props.opt_file['settings']['login']['usr'] if \
         self.props.opt_file['settings']['login']['usr'] else \
         _('your user id')
     self.email_ent = Entry(scale=.08,
                            pos=(-.55, .4),
                            entry_font=menu_props.font,
                            width=20,
                            frame_col=menu_props.btn_col,
                            initial_text=_('your email'),
                            text_fg=menu_props.text_active_col,
                            on_tab=self.on_tab_email,
                            on_click=self.on_click_email)
     self.jid_ent = Entry(scale=.08,
                          pos=(-.55, .2),
                          entry_font=menu_props.font,
                          width=20,
                          frame_col=menu_props.btn_col,
                          initial_text=init_txt,
                          text_fg=menu_props.text_active_col,
                          on_tab=self.on_tab_id,
                          on_click=self.on_click_id)
     self.pwd_ent = Entry(scale=.08,
                          pos=(-.55, 0),
                          entry_font=menu_props.font,
                          width=20,
                          frame_col=menu_props.btn_col,
                          obscured=True,
                          text_fg=menu_props.text_active_col,
                          cmd=self.register)
     start_btn = Btn(text=_('Register'),
                     pos=(0, -.2),
                     cmd=self.register,
                     **self.props.gameprops.menu_props.btn_args)
     t_a['scale'] = .06
     widgets = [
         self.jid_ent, self.pwd_ent, start_btn, jid_lab, pwd_lab, email_lab,
         self.email_ent
     ]
     self.add_widgets(widgets)
     self.eng.attach_obs(self.on_frame)
     ThanksPageGui.build(self)
示例#6
0
 def set_news(self):
     menu_props = self.props.gameprops.menu_props
     feed = urlopen(self.props.feed_url).read()
     items = etree.fromstring(feed).findall('channel/item')
     setlocale(LC_ALL, 'en_US.UTF-8')
     try:
         entries = [(datetime.strptime(entry.findtext('pubDate'),
                                       '%a, %d %b %Y %H:%M:%S %z'),
                     entry.findtext('title') or '') for entry in items]
     except TypeError:
         entries = []
     entries = list(reversed(sorted(entries,
                                    key=lambda entry: entry[0])))[:5]
     entries = [(datetime.strftime(entry[0],
                                   '%b %d'), self.__ellipsis_str(entry[1]))
                for entry in entries]
     frm = Frame(frame_size=(0, 1.0, 0, .75),
                 frame_col=(.2, .2, .2, .5),
                 pos=(.05, .1),
                 parent=base.a2dBottomLeft)
     texts = [
         Text(_('Last news:'),
              pos=(.55, .75),
              scale=.055,
              wordwrap=32,
              parent='bottomleft',
              fg=menu_props.text_normal_col,
              font=menu_props.font,
              tra_src='Last news:',
              tra_tra=_('Last news:'))
     ]
     texts += [
         Text(': '.join(entries[i]),
              pos=(.1, .65 - i * .1),
              scale=.055,
              wordwrap=32,
              parent='bottomleft',
              align='left',
              fg=menu_props.text_normal_col,
              font=menu_props.font) for i in range(min(5, len(entries)))
     ]
     btn_args = self.props.gameprops.menu_props.btn_args.copy()
     btn_args['scale'] = (.055, .055)
     show_btn = Btn(text=_('show'),
                    pos=(.55, .15),
                    cmd=self.eng.open_browser,
                    extra_args=[self.props.site_url],
                    parent=base.a2dBottomLeft,
                    tra_src='show',
                    tra_tra=_('show'),
                    **btn_args)
     self.add_widgets([frm] + texts + [show_btn])
示例#7
0
 def build(self, back_btn=True):  # parameters differ from overridden
     self.eng.init_gfx()
     self.font = self.menu_props.font
     self.text_fg = self.menu_props.text_active_col
     self.text_bg = self.menu_props.text_normal_col
     self.text_err_col = self.menu_props.text_err_col
     # items = self.ranking.carname2points.items()
     items = [(player.car, player.points) for player in self.__players]
     sorted_ranking = reversed(sorted(items, key=lambda el: el[1]))
     txt = Text(_('Ranking'),
                scale=.1,
                pos=(0, .76),
                font=self.font,
                fg=self.text_bg)
     self.add_widgets([txt])
     for i, car in enumerate(sorted_ranking):
         txt, img = RankingGui.set_drv_txt_img(self, i, car[0], 0, .52,
                                               str(car[1]) + ' %s',
                                               self.__players)
         self.add_widgets([txt, img])
     track = self.rprops.track_name
     ntracks = len(self.sprops.gameprops.season_tracks)
     if self.sprops.gameprops.season_tracks.index(track) == ntracks - 1:
         cont_btn_cmd = self.notify
         cont_btn_ea = ['on_ranking_next_race']
         img = Img('assets/images/gui/trophy.txo',
                   parent=base.a2dRightCenter,
                   pos=(-.58, 0),
                   scale=.55)
         img.set_transparent()
         txt = Text(_('Congratulations!'),
                    fg=(.8, .6, .2, 1),
                    scale=.16,
                    pos=(0, -.3),
                    font=loader.loadFont(self.sprops.font),
                    parent='leftcenter')
         txt.set_r(-79)
         self.add_widgets([txt, img])
     else:
         cont_btn_cmd = self.notify
         cont_btn_ea = ['on_ranking_end', self.__players]
     cont_btn = Btn(text=_('Continue'),
                    pos=(0, -.8),
                    cmd=cont_btn_cmd,
                    extra_args=cont_btn_ea,
                    **self.menu_props.btn_args)
     self.add_widgets([cont_btn])
     PageGui.build(self, False)
示例#8
0
 def build(self):
     menu_props = self.menu_props
     t_a = menu_props.text_args.copy()
     players_lab = Text(_('How many players?'),
                        pos=(0, .6),
                        align='center',
                        **t_a)
     p2_btn = Btn(text='2',
                  pos=(0, .2),
                  cmd=self.on_btn,
                  extra_args=[2],
                  **self.props.gameprops.menu_props.btn_args)
     p3_btn = Btn(text='3',
                  pos=(0, 0),
                  cmd=self.on_btn,
                  extra_args=[3],
                  **self.props.gameprops.menu_props.btn_args)
     p4_btn = Btn(text='4',
                  pos=(0, -.2),
                  cmd=self.on_btn,
                  extra_args=[4],
                  **self.props.gameprops.menu_props.btn_args)
     t_a['scale'] = .06
     widgets = [p2_btn, p3_btn, p4_btn, players_lab]
     self.add_widgets(widgets)
     ThanksPageGui.build(self)
示例#9
0
 def on_ko(self, err):  # unused err
     txt = Text(_('Error'),
                pos=(-.2, -.05),
                fg=(1, 0, 0, 1),
                scale=.16,
                font=self.menu_props.font)
     self.eng.do_later(5, txt.destroy)
示例#10
0
文件: exitpage.py 项目: oriolrg/yorg
 def build(self, back_btn=True):
     menu_props = self.menu_props
     frm = Frame(
         frame_size=(-1.5, 1.5, -.9, .9), frame_col=(.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_props.text_active_col, font=menu_props.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_props.btn_args
     btn_args['frame_size'] = (-12, 12, -.8, 1.2)
     btn_visit = Btn(
         text=menu_data[0][1], pos=(0, 0), cmd=menu_data[0][2],
         text_scale=.9, **btn_args)
     btn_dont_visit = Btn(
         text=menu_data[1][1], pos=(0, -.5), cmd=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)
示例#11
0
 def build(self, back_btn=True):
     frm = Frame(frame_size=(-1.5, 1.5, -.9, .9),
                 frame_col=(.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_props = self.menu_props
     txt = Text(question_txt,
                pos=(0, .64),
                scale=.08,
                wordwrap=32,
                fg=menu_props.text_active_col,
                font=menu_props.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_props.btn_args
     btn_visit = Btn(text=menu_data[0][1],
                     pos=(0, 0),
                     cmd=menu_data[0][2],
                     text_scale=.8,
                     **btn_args)
     btn_dont_visit = Btn(text=menu_data[1][1],
                          pos=(0, -.5),
                          cmd=menu_data[1][2],
                          text_scale=.8,
                          **btn_args)
     self.add_widgets([frm, txt, btn_visit, btn_dont_visit])
     PageGui.build(self, False)
     self.eng.show_cursor()
示例#12
0
 def __init__(self, menu_props):
     GameObject.__init__(self)
     self.eng.log('created match message form')
     self.chat = None
     self.msg_frm = Frame(
         frame_size=(-.02, 3.49, 0, 1.22),
         frame_col=(.2, .2, .2, .5),
         pos=(.04, -1.69), parent=base.a2dTopLeft)
     t_a = menu_props.text_args
     t_a['scale'] = .05
     t_a['fg'] = menu_props.text_normal_col
     self.dst_txt = Text(
         txt='', pos=(0, 1.16), parent=self.msg_frm, align='left',
         **t_a)
     self.ent = Entry(
         scale=.04, pos=(0, .03), entry_font=menu_props.font, width=86,
         frame_col=menu_props.btn_col, parent=self.msg_frm,
         initial_text=_('write here your message'),
         cmd=self.on_typed_msg, focus_in_cmd=self.on_focus,
         focus_in_args=['in'], focus_out_cmd=self.on_focus,
         focus_out_args=['out'], text_fg=menu_props.text_active_col)
     self.ent['state'] = DISABLED
     self.txt_frm = ScrolledFrame(
         frame_sz=(-.02, 2.46, -.02, 1.02),
         canvas_sz=(-.02, 2.42, -.02, 1.02),
         scrollbar_width=.036,
         frame_col=(1, 1, 1, .0),
         pos=(.02, .11), parent=self.msg_frm)
     t_a['scale'] = .046
     self.msg_txt = Text(
         txt='', pos=(0, .24), parent=self.txt_frm.canvas,
         align='left', wordwrap=52, **t_a)
     lab_args = menu_props.label_args
     lab_args['scale'] = .046
     lab_args['text_fg'] = menu_props.text_normal_col
     self.lab_frm = Btn(
         frame_size=(-.02, 2.5, -.01, .05),
         frame_col=(1, 1, 1, 0),
         pos=(0, 1.15), parent=self.msg_frm)
     self.lab_frm.bind(ENTER, self.on_enter)
     self.lab_frm.bind(EXIT, self.on_exit)
     self.tooltip = Label(
         text='', pos=(2.4, -.06), parent=self.lab_frm, text_wordwrap=50,
         text_align=TextNode.A_right, **lab_args)
     self.tooltip.set_bin('gui-popup', 10)
     self.tooltip.hide()
     self.eng.client.attach(self.on_groupchat_msg)
示例#13
0
 def _add_lab(self, txt, pos_z, row, col):
     t_a = self.menu_props.text_args.copy()
     del t_a['scale']
     return Text(txt + ':',
                 pos=(-.95 + col * .5, pos_z - row * .64),
                 scale=.046,
                 align='left',
                 **t_a)
示例#14
0
文件: carpage.py 项目: oriolrg/yorg
 def __add_txt(self, txt, val, pos_z, psign, pcol, col, x_offset, z_offset,
               row):
     t_a = self.menu_props.text_args.copy()
     del t_a['scale']
     return Text(
         '%s: %s%s%%' % (txt, psign(val), pcol(val)),
         pos=(-.68 + col * .64 + x_offset, pos_z - z_offset - row * .7),
         scale=.052, align='right', **t_a)
示例#15
0
 def _add_txt(self, val, pos_z, psign, pcol, col, row):
     t_a = self.menu_props.text_args.copy()
     del t_a['scale']
     return Text('%s%s%%' % (psign(val), pcol(val)),
                 pos=(-.55 + col * .5, pos_z - row * .64),
                 scale=.052,
                 align='right',
                 **t_a)
示例#16
0
文件: carpage.py 项目: oriolrg/yorg
 def __bld_car(self, cars_per_row, row, col):
     t_a = self.menu_props.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, .32),
         pos=(-.96 + col * .64 + x_offset, .4 - z_offset - row * .7),
         frame_col=(0, 0, 0, 0),
         img=gprops.car_path % gprops.cars_names[col + row*cars_per_row],
         cmd=self.on_car,
         extra_args=[
             gprops.cars_names[col + row * cars_per_row]],
         **self.menu_props.imgbtn_args)
     widgets = [btn]
     txt = Text(
         gprops.cars_names[col + row * cars_per_row],
         pos=(-.96 + col * .64 + x_offset, .64 - z_offset - row * .7),
         scale=.072, **t_a)
     name = Text(
         '',
         pos=(-.96 + 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 += list(map(lambda txt_def: self.__add_txt(
         *txt_def + (psign, pcol, col, x_offset, z_offset, row)), txt_lst))
     return widgets
示例#17
0
 def set_grid(self):
     txt = Text(_('Starting grid'),
                scale=.1,
                pos=(-1.0, .38),
                font=self.font,
                fg=self.text_bg)
     self.add_widgets([txt])
     for i, car_name in enumerate(self.rprops.grid):
         pars = i, car_name, -1.28, .22, str(i + 1) + '. %s', self._players
         txt, img = RankingGui.set_drv_txt_img(self, *pars)
         self.add_widgets([txt, img])
示例#18
0
 def build(self, back_btn=True, exit_behav=False):
     menu_props = self.menu_props
     t_a = menu_props.text_args
     t_a['fg'] = menu_props.text_normal_col
     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)
示例#19
0
 def __cmd_label(self, text, key, pos_z):
     _key = getattr(self.rprops.keys.players_keys[0], key)
     if self.eng.joystick_mgr.joystick_lib.num_joysticks:
         _key = self.rprops.joystick[key + '1']
     txt = Text(
         text + ': ' + self.eng.event.key2desc(_key),  # .decode('utf-8'),
         align='left',
         scale=.064,
         pos=(.8, pos_z),
         font=self.font,
         fg=self.text_bg,
         wordwrap=24)
     self.widgets += [txt]
示例#20
0
文件: carpage.py 项目: oriolrg/yorg
 def build(self, exit_behav=False):
     gprops = self.props.gameprops
     widgets = [Text(
         _('Select the car'), pos=(0, .8),
         **self.menu_props.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)
示例#21
0
 def set_upgrades(self):
     txt = Text(_('Upgrades'),
                scale=.1,
                pos=(1.0, -.56),
                font=self.font,
                fg=self.text_bg)
     self.add_widgets([txt])
     # tuning = self.tuning.car2tuning[
     #     self.rprops.season_props.player_car_names[0]]
     first_human = [
         player for player in self._players if player.kind == Player.human
     ][0]
     tuning = TuningPlayer(first_human.tuning.engine,
                           first_human.tuning.tires,
                           first_human.tuning.suspensions)
     txt = Text(_('engine: +') + str(tuning.engine),
                align='left',
                scale=.072,
                pos=(.8, -.7),
                font=self.font,
                fg=self.text_bg)
     self.widgets += [txt]
     txt = Text(_('tires: +') + str(tuning.tires),
                align='left',
                scale=.072,
                pos=(.8, -.8),
                font=self.font,
                fg=self.text_bg)
     self.widgets += [txt]
     txt = Text(_('suspensions: +') + str(tuning.suspensions),
                align='left',
                scale=.072,
                pos=(.8, -.9),
                font=self.font,
                fg=self.text_bg)
     self.widgets += [txt]
示例#22
0
 def set_ranking(self):
     # items = self.ranking.carname2points.items()
     items = [(player.car, player.points) for player in self._players]
     sorted_ranking = reversed(sorted(items, key=lambda el: el[1]))
     txt = Text(_('Ranking'),
                scale=.1,
                pos=(0, .38),
                font=self.font,
                fg=self.text_bg)
     self.add_widgets([txt])
     for i, car in enumerate(sorted_ranking):
         txt, img = RankingGui.set_drv_txt_img(self, i, car[0], -.2, .22,
                                               str(car[1]) + ' %s',
                                               self._players)
         self.add_widgets([txt, img])
示例#23
0
 def build(self):
     menu_props = self.menu_props
     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=(0, .72), wordwrap=20, **menu_props.text_args)
     btn = Btn(text=_('Supporters'),
               pos=(0, -.4),
               cmd=lambda: self.notify('on_push_page', 'supporters'),
               **menu_props.btn_args)
     self.add_widgets([txt, btn])
     ThanksPageGui.build(self)
示例#24
0
 def set_drv_txt_img(page, i, car_name, pos_x, top, text, players):
     drivers = [player.driver for player in players]
     info('drivers: ' + str([drv for drv in drivers]))
     info('i: %s  - carname: %s - text: %s' % (i, car_name, text))
     drv = next(player.driver for player in players
                if player.car == car_name)
     player_car_names = [
         player.car for player in players if player.kind == Player.human
     ]
     is_player_car = car_name in player_car_names
     info('%s %s %s %s' %
          (text % drv.name, car_name, drv.img_idx, is_player_car))
     name = text % drv.name
     if '@' in name:
         name = name.split('@')[0] + '\1smaller\1@' + name.split('@')[1] + \
             '\2'
     txt = Text(name,
                align='left',
                scale=.072,
                pos=(pos_x, top - i * .16),
                font=page.font,
                fg=page.text_fg if is_player_car else page.text_bg)
     gprops = page.rprops.season_props.gameprops
     img = Img(gprops.cars_img % car_name,
               pos=(pos_x - .16, top + .02 - i * .16),
               scale=.074)
     filtervpath = RankingGui.eng.curr_path + \
         'yyagl/assets/shaders/filter.vert'
     with open(filtervpath) as fvs:
         vert = fvs.read()
     drvfpath = RankingGui.eng.curr_path + \
         'yyagl/assets/shaders/drv_car.frag'
     with open(drvfpath) as ffs:
         frag = ffs.read()
     shader = load_shader(vert, frag)
     if shader:
         img.set_shader(shader)
     img.set_transparent()
     t_s = TextureStage('ts')
     t_s.set_mode(TextureStage.MDecal)
     txt_path = gprops.drivers_img.path_sel % drv.img_idx
     img.set_texture(t_s, loader.loadTexture(txt_path))
     return txt, img
示例#25
0
 def set_controls(self):
     txt = Text(_('Controls'),
                scale=.1,
                pos=(1.0, .38),
                font=self.font,
                fg=self.text_bg)
     self.add_widgets([txt])
     # if self.rprops.joysticks[0]:
     #     txt = Text(_('joypad'), scale=.08, pos=(1.0, .22),
     #                        font=self.font, fg=self.text_bg)
     #     self.add_widgets([txt])
     #     return
     if self.eng.joystick_mgr.joystick_lib.num_joysticks == 0:
         self.__cmd_label(_('accelerate'), 'forward', .22)
         self.__cmd_label(_('brake/reverse'), 'rear', .12)
         self.__cmd_label(_('left'), 'left', .02)
         self.__cmd_label(_('right'), 'right', -.08)
         self.__cmd_label(_('fire'), 'fire', -.18)
         self.__cmd_label(_('respawn'), 'respawn', -.28)
     else:
         self.__cmd_label(_('accelerate'), 'forward', .22)
         self.__cmd_label(_('brake/reverse'), 'rear', .12)
         self.__cmd_label(_('fire'), 'fire', .02)
         self.__cmd_label(_('respawn'), 'respawn', -.08)
示例#26
0
    def build(self, exit_behav):
        self.drv_info = self.props.gameprops.drivers_info
        menu_props = self.menu_props
        widgets = [
            Text(_('Select the driver'), pos=(0, .8), **menu_props.text_args)
        ]
        t_a = self.menu_props.text_args.copy()
        del t_a['scale']
        self.name = Text(_('Write your name:'),
                         pos=(-.1, .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, .24),
                             pos=(-.75 + col * .5, .3 - row * .64),
                             frame_col=(0, 0, 0, 0),
                             img=self.props.gameprops.drivers_img.path % idx,
                             cmd=self.on_click,
                             extra_args=[idx],
                             **self.menu_props.imgbtn_args)
            name = Text('',
                        pos=(-.75 + col * .5, .01 - row * .64),
                        scale=.046,
                        **t_a)
            drv_btn._name_txt = name
            widgets += [drv_btn, name]
            self.drivers += [widgets[-2]]
            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 += list(
                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 += list(
                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, .4),
                               scale=.28)
        instr_txt = _(
            'If you use the keyboard, press FIRE to edit the field, then '
            "ENTER when you're done")
        instr = Text(instr_txt, pos=(1.4, .6), scale=.042, wordwrap=16, **t_a)
        widgets += [self.sel_drv_img, self.name, instr]
        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_transparent()
        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)
示例#27
0
    def build(self):
        self.drv_info = self.props.gameprops.drivers_info
        menu_props = self.menu_props
        widgets = [
            Text(_('Select the drivers'), pos=(0, .91), **menu_props.text_args)
        ]
        t_a = self.menu_props.text_args.copy()
        del t_a['scale']
        self.name = Text(_('Write your names:'),
                         pos=(-.1, .7),
                         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, .24),
                             pos=(-.75 + col * .5, .1 - row * .64),
                             frame_col=(0, 0, 0, 0),
                             img=self.props.gameprops.drivers_img.path % idx,
                             cmd=self.on_click,
                             extra_args=[idx],
                             **self.menu_props.imgbtn_args)
            name = Text('',
                        pos=(-.75 + col * .5, -.19 - row * .64),
                        scale=.046,
                        **t_a)
            drv_btn._name_txt = name
            widgets += [drv_btn, name]
            self.drivers += [widgets[-2]]
            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'), -.11), (_('speed'), .01),
                       (_('stability'), -.05)]
            widgets += list(
                map(lambda lab_def: self._add_lab(*(lab_def + (row, col))),
                    lab_lst))
            txt_lst = [(self.drv_info[idx - 1].adherence, -.11),
                       (self.drv_info[idx - 1].speed, .01),
                       (self.drv_info[idx - 1].stability, -.05)]
            widgets += list(
                map(
                    lambda txt_def: self._add_txt(*txt_def +
                                                  (psign, pcol, col, row)),
                    txt_lst))
        self.sel_drv_img = []
        self.tss = []
        instr_txt = _(
            'If you use the keyboard, press FIRE to edit the field, then '
            "ENTER when you're done. Other players can't move while someone "
            'is writing (since, with keyboards, some letters may be bound to '
            'movements).')
        instr = Text(instr_txt, pos=(1.28, .8), scale=.042, wordwrap=24, **t_a)
        widgets += [self.name, instr]
        for i, car in enumerate(self.mediator.cars):
            self.sel_drv_img += [
                Img(self.props.gameprops.cars_img % car,
                    parent=base.a2dBottomLeft,
                    pos=(.3, 1.74 - i * .46),
                    scale=.22)
            ]
            widgets += [self.sel_drv_img[-1]]
            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[-1].set_shader(shader)
            self.sel_drv_img[-1].set_transparent()
            self.tss += [TextureStage('ts')]
            self.tss[-1].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[-1].set_texture(self.tss[-1], tex)
        all_names = self.props.gameprops.player_names + self.props.gameprops.stored_player_names[
            len(self.props.gameprops.player_names):]
        self.ents = [
            Entry(scale=.06,
                  pos=(0, .8 - .12 * i),
                  entry_font=menu_props.font,
                  width=12,
                  frame_col=menu_props.btn_col,
                  initial_text=all_names[i]
                  if i < len(all_names) else _('your name'),
                  text_fg=menu_props.text_active_col)
            for i in range(len(self.mediator.cars))
        ]
        self.add_widgets(self.ents)
        self.add_widgets(widgets)
        ThanksPageGui.build(self, exit_behav=False)
        self.update_tsk = taskMgr.add(self.update_text, 'update text')
        self.enable_buttons(False)
示例#28
0
 def build(self, back_btn=True):
     menu_props = self.menu_props
     text = ', '.join(ThanksNames.get_all_thanks())
     txt = Text(text, pos=(0, .72), wordwrap=16, **menu_props.text_args)
     self.add_widgets([txt])
     ThanksPageGui.build(self)