SnootGame/game/src/translation.rpy

260 lines
9.0 KiB
Plaintext

init offset = -1
"""
In absolute hindsight, this could have been done very similar to bonus flash image
instead of the dynamic displayable stuff
"""
init python:
list_langs_buttons = [
{'image': 'gui/flag/USofA.png', 'name': 'English', 'value': None },
{'image': 'gui/flag/Mexico.png', 'name': 'Español', 'value': 'es'}
]
class LangCave: #todo: think of a better name
FPS = 1/60 #todo: fetch the actual target render framerate
#GRID_ROWS_COLS_TUPLE = (4, (len(list_langs_buttons)//4))
MAX_ITEMS_IN_ROW = 4 #column as well
GRID_ROWS_COLS_TUPLE = (MAX_ITEMS_IN_ROW,
len(list_langs_buttons)//MAX_ITEMS_IN_ROW + 1*((len(list_langs_buttons)%MAX_ITEMS_IN_ROW)>0))
lang_buttons = []
final_displayable = None
on_disable_interactable = False
LARGE_SIZE = (320, 240)
LARGE_SPACING = (80, 40)
SMALL_SIZE = (LARGE_SIZE[0]//3, LARGE_SIZE[1]//3)
SMALL_SPACING = (LARGE_SPACING[0]//2, LARGE_SPACING[1]//2)
def _redraw(self, oldlang):
if oldlang != _preferences.language:
for lb in LangCave.lang_buttons:
lb.selected = False
self.selected = True
for lb in LangCave.lang_buttons:
renpy.redraw(lb, 0)
if LangCave.on_disable_interactable:
if oldlang != _preferences.language or (oldlang is None):
LangCave.on_disable_interactable = False
LangCave.recreate_lang_buttons_roulette_style(LangCave.SMALL_SIZE) #mostly going to happen
renpy.end_interaction(0)
pass
class LangButton(renpy.Displayable):
def __init__(self, v, child, **kwargs):
super(LangCave.LangButton, self).__init__(**kwargs)
#self.childs = []
self.child = renpy.displayable(child)
# self.childs.append(child)
self.width = 0#w
self.height = 0#h
self.value = v
#self.function = Language(v)
self.hover = True #renpy can't handle not/!
self.selected = False
def render(self, width, height, st, at):
root_render = renpy.Render(self.width, self.height) #canvas
args = {}
if (self.hover):
args = {'matrixcolor': TintMatrix("#AAA")}
if (LangCave.on_disable_interactable == False and self.selected):
args = {}
#force rendering to get width and height
self.width, self.height = renpy.render(Transform(child=self.child), 0, 0, 0.0, 0.0).get_size()
#for ch in self.childs: #draw every child
t = Transform(child=self.child, **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
if not self.selected: #don't double click
onclick_audio(False)
#just in case
oldlang = _preferences.language
if oldlang is None:
oldlang = None
else:
oldlang = (_preferences.language+'.')[:-1] #copy
#self.function()
newf = Function(renpy.change_language, self.value)
newf()
if (self.value != None): #check if it's not english
args = [self, oldlang]
new = Function(LangCave._redraw, *args)
old = [Function(renpy.change_language, oldlang), Function(LangCave._redraw, *args)]
Confirm(_("Sample Text"), new, no=old)()
else:
LangCave._redraw(self, oldlang)
else:
self.hover = True
pass
if self.hover == oldhover: #refresh on change
renpy.redraw(self, 0)
def visit(self):
return [self.child]
@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['image']), xysize=size, fit='contain', yalign=0.5)
#solid = Solid((22,22,22), xysize=size)
# = Solid((22,22,22), xysize=size)
_button = Fixed(tfi, xysize=size)
lang = llb['value']
button = LangCave.LangButton(lang, _button)
LangCave.on_disable_interactable = True
text = Text(llb['name'], outlines=[(2, "#000", 0, 0)], xalign=0.5)
final = VBox(text, button, style_prefix="navigation")
LangCave.lang_buttons.append(final)
#prevent underfill
remainder = len(list_langs_buttons)%LangCave.MAX_ITEMS_IN_ROW
for x in range(4-remainder):
n = Null(*size)
LangCave.lang_buttons.append(n)
LangCave.final_displayable = Grid(*LangCave.GRID_ROWS_COLS_TUPLE, *LangCave.lang_buttons,
xspacing=spacing[0], yspacing=spacing[1])
pass
@staticmethod
def recreate_lang_buttons_roulette_style(size, spacing=0):
global LangCave
LangCave.lang_buttons.clear()
LangCave.on_disable_interactable = False
for llb in list_langs_buttons:
tfi = Transform(Image(llb['image']), xsize=size[0], ysize=size[1], fit='contain', yalign=0.5)
#solid = Solid((22,22,22), xysize=(size))
_button = Fixed(tfi, xysize=(size))
text = Text(llb['name'], outlines=[(2, "#000", 0, 0)], xalign=0.5, text_size=16, yalign=0.5) #todo: text_size away
penultimate = HBox(text, _button, style_prefix="navigation", spacing=20)
#print(dir(penultimate))
#lang = Language(llb['value'])
lang = llb['value']
button = LangCave.LangButton(lang, penultimate)
if (_preferences.language == llb['value']):
button.selected = True
LangCave.lang_buttons.append(button)
LangCave.final_displayable = VBox(*LangCave.lang_buttons, spacing=spacing)
pass
if (persistent.languaged_up is None):
LangCave.procreate_lang_buttons(LangCave.LARGE_SIZE, LangCave.LARGE_SPACING)
else:
LangCave.recreate_lang_buttons_roulette_style(LangCave.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('#222'))
padding (120, 40)
vbox:
style_prefix "navigation"
hbox:
label _("Choose Your Language") text_size 80
label _("") text_size 80
hbox:
add Null(80, 40)
add DynamicDisplayable(LangCave.render_langcave)
screen translator_roulette:
vbox:
label _("Language")
style_prefix "check"
add DynamicDisplayable(LangCave.render_langcave)