def generate_atlas(files, dest_dat, dest_png): entries = [] virtual_atlas_size = 32 all_entries_matched = False print "Loading", len(files), "entries .." for verbose_name, source in files: entries.append(AtlasEntry(verbose_name, source)) entries = sorted(entries, key=lambda a: -a.area) while not all_entries_matched: print "Trying to pack into a", virtual_atlas_size, "x", virtual_atlas_size, "atlas .." packer = LUIAtlasPacker(virtual_atlas_size) all_entries_matched = True for entry in entries: uv = packer.find_position(entry.w, entry.h) if uv.get_x() < 0: # print " Not all images matched, trying next power of 2" all_entries_matched = False virtual_atlas_size *= 2 break entry.assigned_pos = uv print "Matched entries, writing atlas .." atlas_description_content = "" dest = PNMImage(virtual_atlas_size, virtual_atlas_size, 4) for entry in entries: src = PNMImage(entry.w, entry.h, 4) entry.tex.store(src) if not src.has_alpha(): src.add_alpha() src.alpha_fill(1.0) dest.copy_sub_image( src, int(entry.assigned_pos.get_x()), int(entry.assigned_pos.get_y())) atlas_description_content += "{0} {1} {2} {3} {4}\n".format( entry.name.replace(" ", "_"), int(entry.assigned_pos.get_x()), int(entry.assigned_pos.get_y()), entry.w, entry.h) dest.write(dest_png) with open(dest_dat, "w") as handle: handle.write(atlas_description_content)
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) 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=self.props.gameprops.player_name or _('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, 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 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 bld_page(self): self.skills = [drv[2] for drv in self.props.drivers] menu_gui = self.mdt.menu.gui menu_args = self.mdt.menu.gui.menu_args widgets = [ OnscreenText(text=_('Select the driver'), pos=(0, .8), **menu_gui.menu_args.text_args) ] self.track_path = self.mdt.menu.track t_a = self.mdt.menu.gui.menu_args.text_args.copy() del t_a['scale'] name = OnscreenText(_('Write your name:'), pos=(-.1, .6), scale=.06, align=TextNode.A_right, **t_a) self.ent = DirectEntry(scale=.08, pos=(0, 1, .6), entryFont=menu_args.font, width=12, frameColor=menu_args.btn_color, initialText=self.props.player_name or _('your name')) self.ent.onscreenText['fg'] = menu_args.text_fg self.drivers = [] for row, col in product(range(2), range(4)): idx = (col + 1) + row * 4 widgets += [ ImgBtn(scale=.24, pos=(-.75 + col * .5, 1, .25 - row * .5), frameColor=(0, 0, 0, 0), image=self.props.drivers_img[0] % idx, command=self.on_click, extraArgs=[idx], **self.mdt.menu.gui.menu_args.imgbtn_args) ] self.drivers += [widgets[-1]] sign = lambda x: '\1green\1+\2' if x > 0 else '' psign = lambda x: '+' if x == 0 else sign(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) def add_lab(txt, pos_z): return OnscreenText(txt + ':', pos=(-.95 + col * .5, pos_z - row * .5), scale=.046, align=TextNode.A_left, **t_a) def add_txt(val, pos_z): return OnscreenText('%s%s%%' % (psign(val), pcol(val)), pos=(-.55 + col * .5, pos_z - row * .5), scale=.052, align=TextNode.A_right, **t_a) lab_lst = [(_('adherence'), .04), (_('speed'), .16), (_('stability'), .1)] widgets += map(lambda lab_def: add_lab(*lab_def), lab_lst) txt_lst = [(self.skills[idx - 1][1], .04), (self.skills[idx - 1][0], .16), (self.skills[idx - 1][2], .1)] widgets += map(lambda txt_def: add_txt(*txt_def), txt_lst) self.img = OnscreenImage(self.props.cars_img % self.mdt.car, parent=base.a2dBottomRight, pos=(-.38, 1, .38), scale=.32) widgets += [self.img, name, self.ent] map(self.add_widget, widgets) fpath = eng.curr_path + 'yyagl/assets/shaders/filter.vert' with open(fpath) as ffilter: vert = ffilter.read() shader = Shader.make(Shader.SL_GLSL, vert, frag) self.img.setShader(shader) self.img.setTransparency(True) self.t_s = TextureStage('ts') self.t_s.setMode(TextureStage.MDecal) empty_img = PNMImage(1, 1) empty_img.add_alpha() empty_img.alpha_fill(0) tex = Texture() tex.load(empty_img) self.img.setTexture(self.t_s, tex) ThanksPageGui.bld_page(self) self.update_tsk = taskMgr.add(self.update_text, 'update text') self.enable_buttons(False)