195 lines
6.4 KiB
GDScript
195 lines
6.4 KiB
GDScript
extends Node
|
|
|
|
|
|
#Enums
|
|
enum ScalingMode {INTEGER, ASPECT, STRETCH}
|
|
enum Filter {NONE, CRT, LCD, BILINEAR}
|
|
enum RumbleMode {NONE, DEATHS, FULL}
|
|
enum TransSpeed {SLOW, NORMAL, FAST, INSTANT}
|
|
enum ScanlineType {NONE, LCD, CRT}
|
|
enum Gore {NONE, NO_STAINS, FULL}
|
|
enum Section {GAME, VIDEO, AUDIO, ALL}
|
|
|
|
|
|
#Constants
|
|
const TRANS_SPEEDS := [0.8, 0.4, 0.2, 0.0000001]
|
|
|
|
|
|
#Game
|
|
var rumble: int = RumbleMode.FULL
|
|
var gore: int = Gore.FULL
|
|
var speedrun_timer: bool = false setget _set_speedrun_timer
|
|
var scoreboard_name: String = "" setget _set_scoreboard_name
|
|
var scoreboard_id: int = -1
|
|
|
|
#Video
|
|
var fullscreen: bool = false setget _set_fullscreen
|
|
var window_size: float = 2.0 setget _set_window_size
|
|
var scaling_mode: int = ScalingMode.INTEGER setget _set_scaling_mode
|
|
var transition_speed: int = TransSpeed.NORMAL setget _set_transition_speed
|
|
var transition_speed_secs setget , _get_transition_speed_sex
|
|
var border: int = 0 setget _set_border
|
|
var scanlines: int = ScanlineType.NONE setget _set_scanlines
|
|
|
|
#Audio
|
|
var master_volume: float = 1.0 setget _set_master_volume
|
|
var music_volume: float = 1.0 setget _set_music_volume
|
|
var sound_volume: float = 1.0 setget _set_sound_volume
|
|
var landing_sound: bool = true setget _set_landing_sound
|
|
|
|
# last played file
|
|
var last_file: int = 0
|
|
|
|
# default values
|
|
var defaults = null
|
|
|
|
# text is being entered
|
|
var entry: bool = false
|
|
|
|
func _ready() -> void:
|
|
pause_mode = PAUSE_MODE_PROCESS
|
|
|
|
# clone self into defaults before loading stored values
|
|
if defaults == null:
|
|
defaults = duplicate()
|
|
load_options()
|
|
|
|
func _unhandled_input(event: InputEvent) -> void:
|
|
if not Debug.entry and not entry:
|
|
if event.is_action_pressed("fullscreen"):
|
|
OS.window_fullscreen = not OS.window_fullscreen
|
|
|
|
func load_options() -> void:
|
|
var file = ConfigFile.new()
|
|
file.load("user://options.pr")
|
|
# game
|
|
rumble = file.get_value("game", "rumble", defaults.rumble)
|
|
gore = file.get_value("game", "gore", defaults.gore)
|
|
_set_speedrun_timer(file.get_value("game", "speedrun_timer", defaults.speedrun_timer))
|
|
_set_scoreboard_name(file.get_value("game", "scoreboard_name", ""))
|
|
randomize()
|
|
scoreboard_id = file.get_value("game", "scoreboard_id", randi())
|
|
# video
|
|
_set_fullscreen(file.get_value("video", "fullscreen", defaults.fullscreen))
|
|
_set_window_size(file.get_value("video", "window_size", defaults.window_size))
|
|
_set_scaling_mode(file.get_value("video", "scaling_mode", defaults.scaling_mode))
|
|
_set_transition_speed(file.get_value("video", "transition_speed", defaults.transition_speed))
|
|
_set_border(file.get_value("video", "border", defaults.border))
|
|
_set_scanlines(file.get_value("video", "scanlines", defaults.scanlines))
|
|
# audio
|
|
_set_master_volume(file.get_value("audio", "master_volume", 1.0))
|
|
_set_music_volume(file.get_value("audio", "music_volume", 1.0))
|
|
_set_sound_volume(file.get_value("audio", "sound_volume", 1.0))
|
|
_set_landing_sound(file.get_value("audio", "landing_sound", defaults.landing_sound))
|
|
# last played file
|
|
last_file = file.get_value("save", "last_file", 0)
|
|
|
|
func load_defaults(section: int = Section.ALL) -> void:
|
|
match section:
|
|
Section.GAME, Section.ALL:
|
|
rumble = defaults.rumble
|
|
gore = defaults.gore
|
|
speedrun_timer = defaults.speedrun_timer
|
|
scoreboard_name = defaults.scoreboard_name
|
|
scoreboard_id = randi()
|
|
Section.VIDEO, Section.ALL:
|
|
fullscreen = defaults.fullscreen
|
|
window_size = defaults.window_size
|
|
scaling_mode = defaults.scaling_mode
|
|
transition_speed = defaults.transition_speed
|
|
border = defaults.border
|
|
scanlines = defaults.scanlines
|
|
Section.AUDIO, Section.ALL:
|
|
master_volume = defaults.master_volume
|
|
music_volume = defaults.music_volume
|
|
sound_volume = defaults.sound_volume
|
|
landing_sound = defaults.landing_sound
|
|
|
|
func save_options() -> void:
|
|
var file = ConfigFile.new()
|
|
#Game
|
|
file.set_value("game", "rumble", rumble)
|
|
file.set_value("game", "gore", gore)
|
|
file.set_value("game", "speedrun_timer", speedrun_timer)
|
|
file.set_value("game", "scoreboard_name", scoreboard_name)
|
|
file.set_value("game", "scoreboard_id", scoreboard_id)
|
|
#Video
|
|
file.set_value("video", "fullscreen", fullscreen)
|
|
file.set_value("video", "window_size", window_size)
|
|
file.set_value("video", "scaling_mode", scaling_mode)
|
|
file.set_value("video", "transition_speed", transition_speed)
|
|
file.set_value("video", "border", border)
|
|
file.set_value("video", "scanlines", scanlines)
|
|
#Audio
|
|
file.set_value("audio", "master_volume", master_volume)
|
|
file.set_value("audio", "music_volume", music_volume)
|
|
file.set_value("audio", "sound_volume", sound_volume)
|
|
file.set_value("audio", "landing_sound", landing_sound)
|
|
# last played file
|
|
file.set_value("save", "last_file", last_file)
|
|
# save the options to file
|
|
file.save("user://options.pr")
|
|
|
|
# Setters
|
|
|
|
# game setters
|
|
func _set_speedrun_timer(value: bool) -> void:
|
|
speedrun_timer = value
|
|
if not speedrun_timer:
|
|
SpeedrunTimer.visible = false
|
|
SpeedrunTimer.timer_running = false
|
|
|
|
func _set_scoreboard_name(value: String) -> void:
|
|
scoreboard_name = value.substr(0, 10).to_lower()
|
|
|
|
|
|
# video setters
|
|
func _set_fullscreen(value: bool) -> void:
|
|
fullscreen = value
|
|
if Engine.get_idle_frames() == 0:
|
|
OS.window_fullscreen = fullscreen
|
|
|
|
func _set_window_size(value: float) -> void:
|
|
window_size = value
|
|
OS.window_size = Game.RESOLUTION * window_size
|
|
|
|
func _set_scaling_mode(value: int) -> void:
|
|
scaling_mode = value
|
|
SceneManager.scaling_mode = scaling_mode
|
|
get_tree().emit_signal("screen_resized") # force screen size update
|
|
|
|
func _set_transition_speed(value: int) -> void:
|
|
transition_speed = value
|
|
|
|
func _get_transition_speed_sex() -> float:
|
|
return TRANS_SPEEDS[transition_speed]
|
|
|
|
func _set_border(value: int) -> void:
|
|
border = value
|
|
Border.current_border = border
|
|
|
|
func _set_scanlines(value: int) -> void:
|
|
scanlines = value
|
|
SceneManager.set_scanlines(scanlines)
|
|
|
|
|
|
# audio setters
|
|
func _set_master_volume(value: float) -> void:
|
|
master_volume = value
|
|
AudioServer.set_bus_volume_db(0, linear2db(value))
|
|
|
|
func _set_music_volume(value: float) -> void:
|
|
music_volume = value
|
|
var idx = AudioServer.get_bus_index("music")
|
|
AudioServer.set_bus_volume_db(idx, linear2db(value))
|
|
|
|
func _set_sound_volume(value: float) -> void:
|
|
sound_volume = value
|
|
var idx = AudioServer.get_bus_index("sound")
|
|
AudioServer.set_bus_volume_db(idx, linear2db(value))
|
|
idx = AudioServer.get_bus_index("shard")
|
|
AudioServer.set_bus_volume_db(idx, linear2db(value))
|
|
|
|
func _set_landing_sound(value: bool) -> void:
|
|
landing_sound = value
|
|
Audio.ac_land.volume_db = -15.0 if landing_sound else -INF
|