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)
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)
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])
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)
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)
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])
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)
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)
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)
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)
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()
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)
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)
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)
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)
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
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])
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)
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]
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)
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]
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])
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)
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
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)
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)
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)
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)