mirror of
https://git.cavemanon.xyz/Cavemanon/SnootGame.git
synced 2025-02-24 18:48:55 +01:00
Merge pull request 'Resolves #209 | Simplifies the language selector and adds the notice prompt' (#210) from Gmanon/SnootGame:LanSel into Patch8-RAGE
Reviewed-on: https://git.snootgame.xyz/Cavemanon/SnootGame/pulls/210
This commit is contained in:
commit
60a1748177
4 changed files with 125 additions and 236 deletions
|
@ -971,7 +971,23 @@ screen preferences():
|
|||
label _("Naughty Stuff")
|
||||
textbutton _("Enable Lewd Images") action [Function(onclick_audio, persistent.lewd), ToggleVariable("persistent.lewd", True, False)]
|
||||
|
||||
use translator_roulette
|
||||
vbox:
|
||||
style_prefix "check"
|
||||
label _("Language")
|
||||
vpgrid:
|
||||
rows len(languages)
|
||||
cols 1
|
||||
mousewheel True
|
||||
draggable True
|
||||
xsize 300
|
||||
ysize 250
|
||||
if len(languages)>4:
|
||||
scrollbars "vertical"
|
||||
for lang in languages:
|
||||
fixed:
|
||||
xsize 300
|
||||
ysize 60
|
||||
use lang_button(lang)
|
||||
|
||||
vbox:
|
||||
style_prefix "check"
|
||||
|
|
|
@ -6,7 +6,7 @@ label splashscreen:
|
|||
if (persistent.languaged_up is None):
|
||||
$ persistent.languaged_up = True
|
||||
$ preferences.set_volume('ui', config.default_sfx_volume) # hack
|
||||
call screen translator_popup
|
||||
call screen lang_sel
|
||||
|
||||
|
||||
return
|
||||
|
|
|
@ -1,259 +1,129 @@
|
|||
|
||||
init offset = -1
|
||||
|
||||
"""
|
||||
In absolute hindsight, this could have been done very similar to bonus flash image
|
||||
instead of the dynamic displayable stuff
|
||||
"""
|
||||
screen OkPrompt(message, go_menu):
|
||||
|
||||
modal True
|
||||
|
||||
zorder 200
|
||||
|
||||
style_prefix "confirm"
|
||||
|
||||
add "gui/overlay/confirm.png"
|
||||
|
||||
frame:
|
||||
|
||||
vbox:
|
||||
xalign .5
|
||||
yalign .5
|
||||
spacing 30
|
||||
|
||||
label _(message):
|
||||
style "confirm_prompt"
|
||||
xalign 0.5
|
||||
|
||||
hbox:
|
||||
xalign 0.5
|
||||
spacing 100
|
||||
|
||||
textbutton _("OK") activate_sound "audio/ui/uiClick.wav" action If(go_menu, true=MainMenu(False,False), false=Hide())
|
||||
|
||||
default persistent.seenWarning = []
|
||||
|
||||
init python:
|
||||
list_langs_buttons = [
|
||||
|
||||
from math import ceil
|
||||
|
||||
notice = _("NOTICE: Please keep in mind this is a fan translation, and as such it may not be completely accurate to the original intent of any written lines.")
|
||||
|
||||
languages = [
|
||||
{'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))
|
||||
#This was done so it would work with whatever amount of languages you wanted, I tried it with up to 200 and it worked nicely.
|
||||
|
||||
lang_buttons = []
|
||||
final_displayable = None
|
||||
maxItems = len(languages)
|
||||
maxRows = ceil(maxItems/4)
|
||||
if maxItems > 4:
|
||||
maxItems = 4*maxRows
|
||||
|
||||
on_disable_interactable = False
|
||||
init:
|
||||
transform renpysdumb: # Needed to scale down the imagebuttons.
|
||||
zoom 0.5
|
||||
transform icon: #For the preferences screen
|
||||
truecenter
|
||||
zoom 0.1
|
||||
|
||||
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)
|
||||
transform glowie(img):
|
||||
img
|
||||
easein_cubic 0.30 matrixcolor TintMatrix(Color((255, 255, 255)))
|
||||
|
||||
def _redraw(self, oldlang):
|
||||
if oldlang != _preferences.language:
|
||||
for lb in LangCave.lang_buttons:
|
||||
lb.selected = False
|
||||
self.selected = True
|
||||
transform darkie(img):
|
||||
img
|
||||
easeout_cubic 0.30 matrixcolor TintMatrix(Color((255/2, 255/2, 255/2)))
|
||||
|
||||
for lb in LangCave.lang_buttons:
|
||||
renpy.redraw(lb, 0)
|
||||
screen lang_sel:
|
||||
|
||||
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'))
|
||||
|
||||
background Transform(gui.main_menu_background, matrixcolor=TintMatrix('#222'))
|
||||
|
||||
padding (120, 40)
|
||||
|
||||
vbox:
|
||||
style_prefix "navigation"
|
||||
hbox:
|
||||
vbox:
|
||||
label _("Choose Your Language") text_size 80
|
||||
label _("") text_size 80
|
||||
hbox:
|
||||
add Null(80, 40)
|
||||
add DynamicDisplayable(LangCave.render_langcave)
|
||||
add Null(0, 40)
|
||||
|
||||
vpgrid:
|
||||
if maxItems <= 4:
|
||||
cols maxItems
|
||||
rows 1
|
||||
else:
|
||||
cols 4
|
||||
rows maxRows
|
||||
#spacing 30
|
||||
draggable True
|
||||
mousewheel True
|
||||
|
||||
screen translator_roulette:
|
||||
if maxRows > 3:
|
||||
scrollbars "vertical"
|
||||
|
||||
vbox:
|
||||
label _("Language")
|
||||
style_prefix "check"
|
||||
add DynamicDisplayable(LangCave.render_langcave)
|
||||
for i in range(maxItems):
|
||||
fixed:
|
||||
xsize 400
|
||||
ysize 300
|
||||
vbox:
|
||||
if i<len(languages):
|
||||
text languages[i]["name"] at top
|
||||
add Null(0,10)
|
||||
imagebutton:
|
||||
idle darkie(languages[i]["image"])
|
||||
hover glowie(languages[i]["image"])
|
||||
action If(languages[i]["value"] in persistent.seenWarning or languages[i]["value"] == None,
|
||||
true = [Language(languages[i]["value"]), MainMenu(False,False)],
|
||||
# Important to change the language before calling notice. Otherwise it will be in english.
|
||||
false = [Language(languages[i]["value"]), AddToSet(set=persistent.seenWarning, value=languages[i]["value"]), Show(screen="OkPrompt", message=notice, go_menu=True)]
|
||||
)
|
||||
at renpysdumb # Scales the imagebutton down. No, you can't just specify the zoom here. It has to be a defined transform.
|
||||
else:
|
||||
# Renpy seethes if a vpgrid doesn't have the exact maximum amount of items for some reason.
|
||||
add Null(0,0)
|
||||
at truecenter
|
||||
|
||||
screen lang_button(lang):
|
||||
hbox:
|
||||
spacing 15
|
||||
textbutton lang["name"]:
|
||||
activate_sound "audio/ui/uiRollover.wav"
|
||||
action If(lang["value"] in persistent.seenWarning or lang["value"] == None,
|
||||
true = [Language(lang["value"])],
|
||||
false = [Language(lang["value"]), AddToSet(set=persistent.seenWarning, value=lang["value"]), Show(screen="OkPrompt", message=notice, go_menu=False)]
|
||||
)
|
||||
if _preferences.language == lang["value"]:
|
||||
add glowie(lang["image"]) at icon
|
||||
else:
|
||||
add darkie(lang["image"]) at icon
|
|
@ -6,3 +6,6 @@ translate es strings:
|
|||
old "Self-voicing disabled."
|
||||
new "Self-voicing disabled."
|
||||
|
||||
old "NOTICE: Please keep in mind this is a fan translation, and as such it may not be completely accurate to the original intent of any written lines."
|
||||
new "Testing"
|
||||
|
||||
|
|
Loading…
Reference in a new issue