Skip to content

Instantly share code, notes, and snippets.

@profan
Created November 10, 2018 23:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save profan/50e9086e0942bee7d7d8a5942098be8c to your computer and use it in GitHub Desktop.
Save profan/50e9086e0942bee7d7d8a5942098be8c to your computer and use it in GitHub Desktop.
options_menu.gd
extends Control
onready var back_btn = get_node("buttons/center/options_containers/sound_options/back_btn")
onready var audio_player = get_node("audio_player")
# general
onready var reading_speed_slider = get_node("buttons/center/options_containers/general_options/reading_speed_slider")
# desktop only general
onready var resolution_title = get_node("buttons/center/options_containers/general_options/resolution_title")
onready var resolution_menu = get_node("buttons/center/options_containers/general_options/resolution_menu")
onready var window_mode_btn = get_node("buttons/center/options_containers/general_options/window_mode_btn")
# audio
onready var master_vol_slider = get_node("buttons/center/options_containers/sound_options/master_vol_slider")
onready var music_vol_slider = get_node("buttons/center/options_containers/sound_options/music_vol_slider")
onready var sfx_vol_slider = get_node("buttons/center/options_containers/sound_options/sfx_vol_slider")
onready var sfx_vol_btn = get_node("buttons/center/options_containers/sound_options/sfx_cont/sfx_vol_test")
# twoon
onready var buttons = get_node("buttons")
onready var lang_btn = get_node("lang_btn")
onready var tween = get_node("tween")
# extra bg to keep it readable
onready var options_bg = get_node("options_bg")
var from_scene_name
var resolution_options
func normalize(val, lower, upper):
return (val - lower) / (upper - lower)
func _tween_in():
if _entered_from_game(): # HACK: ewwww
$background/background_mountain.visible = false
tween.interpolate_property(self, "modulate:a", 0.0, 1.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_IN)
tween.start()
else:
lang_btn._on_enter_options()
tween.interpolate_property(options_bg, "modulate:a", 0.0, 1.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_IN)
tween.interpolate_property(buttons, "modulate:a", 0.0, 1.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_IN)
tween.interpolate_property(lang_btn, "modulate:a", 0.0, 1.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_IN)
tween.start()
func _ready():
# tween in
_tween_in()
# get values yes
reading_speed_slider.set_value(Game.reading_speed)
master_vol_slider.set_value(Game.master_vol)
music_vol_slider.set_value(Game.music_vol)
sfx_vol_slider.set_value(Game.sfx_vol)
# link up signals
back_btn.connect("pressed", self, "_back_btn_pressed")
reading_speed_slider.connect("value_changed", self, "_reading_speed_changed")
master_vol_slider.connect("value_changed", self, "_master_vol_changed")
music_vol_slider.connect("value_changed", self, "_music_vol_changed")
sfx_vol_slider.connect("value_changed", self, "_sfx_vol_changed")
sfx_vol_btn.connect("pressed", self, "_on_test_sfx")
if not Game.is_mobile(): # only populate on platforms where actually sensible
# populate res menu
resolution_options = _generate_resolution_options()
_populate_resolution_menu(resolution_options)
# set up initial res HACK FIXME
_update_resolution()
# link up res menu signals
var popup = resolution_menu.get_popup()
popup.connect("id_pressed", self, "_on_select_resolution")
# set window mode callback
window_mode_btn.connect("item_selected", self, "_on_set_window_mode")
if OS.window_fullscreen:
window_mode_btn.selected = 1
else:
window_mode_btn.selected = 0
_on_mode_changed()
else: # hide options on mobile
resolution_title.visible = false
resolution_menu.visible = false
window_mode_btn.visible = false
func _update_resolution():
var base_res = Game.get_base_res()
var w_res = OS.window_size
var id = w_res.x / base_res.x
resolution_menu.text = "%dx%d (%dx)" % [w_res.x, w_res.y, id]
func _on_mode_changed():
if window_mode_btn.selected == 0:
resolution_menu.visible = true
elif window_mode_btn.selected == 1:
resolution_menu.visible = false
func _on_set_window_mode(id):
if id == 0: # windowed
OS.window_fullscreen = false
OS.window_size = Game.get_base_res() * 2
elif id == 1: # fullscreen
OS.window_fullscreen = true
_on_mode_changed()
_update_resolution()
func _on_select_resolution(id):
var o = resolution_options[id]
OS.window_size = o
resolution_menu.text = "%dx%d (%dx)" % [o.x, o.y, id]
func _populate_resolution_menu(opts):
var popup = resolution_menu.get_popup()
var mul = 1
for o in opts:
popup.add_item("%dx%d (%dx)" % [o.x, o.y, mul + 1], mul - 1)
mul += 1
func _generate_resolution_options():
# member var
var res_ops = []
var base_res = Game.get_base_res()
var max_res = OS.get_screen_size()
var cur_res = base_res
var cur_mul = 2
while cur_res.x < max_res.x and cur_res.y < max_res.y:
cur_res = base_res * cur_mul
res_ops.push_back(cur_res)
cur_mul += 1
return res_ops
func enter():
if _entered_from_game():
_update_resolution()
buttons.on_settings_enter()
visible = true
_tween_in()
func exit():
if from_scene_name:
SceneSwitcher.goto_scene(from_scene_name)
else:
visible = false
# HELPER
func _entered_from_game():
return not from_scene_name
func _back_btn_pressed():
if _entered_from_game():
tween.interpolate_property(self, "modulate:a", modulate.a, 0.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_OUT)
if not tween.is_connected("tween_completed", self, "_on_back_btn_fade_end"):
tween.connect("tween_completed", self, "_on_back_btn_fade_end", [], CONNECT_ONESHOT)
else:
_disable_buttons()
tween.interpolate_property(options_bg, "modulate:a", options_bg.modulate.a, 0.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_OUT)
tween.interpolate_property(buttons, "modulate:a", buttons.modulate.a, 0.0, 0.5, Tween.TRANS_QUAD, Tween.EASE_OUT)
tween.connect("tween_completed", self, "_on_back_btn_fade_end")
func _on_back_btn_fade_end(obj, key):
exit()
func _disable_buttons():
reading_speed_slider.editable = false
resolution_menu.disabled = true
window_mode_btn.disabled = true
master_vol_slider.editable = false
music_vol_slider.editable = false
sfx_vol_btn.disabled = true
back_btn.disabled = true
func _reading_speed_changed(nv):
Game.reading_speed = nv
func _master_vol_changed(nv):
Game.master_vol = nv
func _music_vol_changed(nv):
Game.music_vol = nv
func _sfx_vol_changed(nv):
Game.sfx_vol = nv
func _on_test_sfx():
if not audio_player.playing:
audio_player.play()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment