init offset = -1 init python: list_langs_buttons = [ ['gui/flag/USofA.png', 'English', Language(None)], ['gui/flag/spain.png', 'EspaƱol', Language('test')] ] class LangCave: #todo: think of a better name FPS = 1/60 #todo: fetch the actual target render framerate GRID_ROWS_COLS_TUPLE = (2, 1) lang_buttons = [] final_displayable = None on_disable_interactable = False LARGE_SIZE = (320, 240) LARGE_SPACING = 80 SMALL_SIZE = (LARGE_SIZE[0]/2, LARGE_SIZE[1]/2) SMALL_SPACING = LARGE_SPACING/2 class LangButton(renpy.Displayable): def __init__(self, v, w, h, *childs, **kwargs): super(LangCave.LangButton, self).__init__(**kwargs) self.childs = [] for ch in childs: child = renpy.displayable(ch) self.childs.append(child) self.width = w self.height = h self.value = v self.hover = True #not/! breaks everything in renpy self.selected = False def render(self, width, height, st, at): root_render = renpy.Render(self.width, self.height) #overall size i think args = {} if (self.hover): args = {'matrixcolor': TintMatrix("#AAA")} for ch in self.childs: #draw every child t = Transform(child=ch, **args) child_render = renpy.render(t, self.width, self.height, st, at) root_render.blit(child_render, (0, 0)) return root_render def event(self, ev, ex, ey, st): #getting clicked on global LangCave oldhover = self.hover if ((ex > 0 and ey > 0) and (ex < self.width and ey < self.height)): self.hover = False if (renpy.map_event(ev, 'mouseup_1')): #1026 onclick_audio(True) self.value() #todo: change to function, as value doesn't make sense if LangCave.on_disable_interactable: renpy.end_interaction(0) LangCave.on_disable_interactable = False recreate_lang_buttons_roulette_style(SMALL_SIZE) #mostly going to happen else: self.hover = True pass if self.hover == oldhover: #refresh on change renpy.redraw(self, 0) def visit(self): return self.childs @staticmethod def render(): global LangButton pass @staticmethod def render_langcave(st, at): global LangCave return LangCave.final_displayable, LangCave.FPS pass @staticmethod def procreate_lang_buttons(size, spacing): """ size: tuple """ global LangCave LangCave.lang_buttons.clear() for llb in list_langs_buttons: tfi = Transform(Image(llb[0]), xysize=size, fit='contain', yalign=0.5) solid = Solid((22,22,22), xysize=size) _button = Fixed(solid, tfi, xysize=size) button = LangCave.LangButton(llb[2], *size, _button) LangCave.on_disable_interactable = True text = Text(llb[1], outlines=[(2, "#000", 0, 0)], xalign=0.5) final = VBox(text, button, style_prefix="navigation") #LangCave.lang_buttons.append(LangCave.LangButton(llb[2], *size, tfi)) LangCave.lang_buttons.append(final) LangCave.final_displayable = Grid(*LangCave.GRID_ROWS_COLS_TUPLE, *LangCave.lang_buttons, spacing=spacing) pass @staticmethod def recreate_lang_buttons_roulette_style(size, spacing): global LangCave LangCave.lang_buttons.clear() for llb in list_langs_buttons: tfi = Transform(Image(llb[0]), xsize=size[0], ysize=size[1], fit='contain', yalign=0.5) solid = Solid((22,22,22), xysize=(size)) _button = Fixed(solid, tfi, xysize=(size)) text = Text(llb[1], outlines=[(2, "#000", 0, 0)], xalign=0.5) penultimate = HBox(text, _button, style_prefix="navigation") button = LangCave.LangButton(llb[2], *size, _button) #final = VBox(text, button, style_prefix="navigation") #LangCave.lang_buttons.append(LangCave.LangButton(llb[2], *size, tfi)) LangCave.lang_buttons.append(button) LangCave.final_displayable = Vbox(*LangCave.lang_buttons, spacing=spacing) pass #if LangCave.procreate_lang_buttons(LangCave.LARGE_SIZE, LangCave.LARGE_SPACING) #else #recreate_lang_buttons_roulette_style(SMALL_SIZE) #mostly going to happen screen lang_buttons(filename_label_functions): for f_l_f in filename_label_functions: use lang_button(f_l_f[0], f_l_f[1], f_l_f[2]) screen lang_button(filename, label, function): button: xsize 360 ysize 240 action [function, Return()] activate_sound "audio/ui/uiClick.wav" #hovered Transform(matrixcolor=TintMatrix('#fff')) fixed: xsize 360 ysize 240 #xfit True #yfit True #fit_first 'height' add "#222" xsize 360 ysize 240 add Transform(Image(filename), xsize=360, fit='contain', yalign=0.5) text label xalign 0.5 yalign 0.0 xanchor 0.5 size 22 style "quick_button_text" screen _translator_popup: tag menu add gui.main_menu_background #add gui.game_menu_background vbox: style_prefix "navigation" hbox: label _("Choose Your Language") grid 2 1: #hardcoded for now spacing 20 use lang_buttons(list_langs_buttons) screen translator_popup: tag menu frame: #background gui.main_menu_background background Transform(gui.main_menu_background, matrixcolor=TintMatrix('#555')) padding (120, 40) vbox: style_prefix "navigation" hbox: label _("Choose Your Language") hbox: add Null(80, 40) add DynamicDisplayable(LangCave.render_langcave) screen translator_roulette: label _("Language") vbox: add DynamicDisplayable(LangCave.render_langcave)