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