buckshotroulette-decomp/MenuManager.gd

281 lines
8.0 KiB
GDScript

class_name MenuManager extends Node
@export var savefile : SaveFileManager
@export var cursor : CursorManager
@export var animator_intro : AnimationPlayer
@export var speaker_music : AudioStreamPlayer2D
@export var speaker_start : AudioStreamPlayer2D
@export var buttons : Array[ButtonClass]
@export var buttons_options : Array[ButtonClass]
@export var screens : Array[Control]
@export var parent_main : Control
@export var parent_creds : Control
@export var parent_suboptions : Control
@export var parent_audiovideo : Control
@export var parent_language : Control
@export var parent_controller : Control
@export var parent_rebinding : Control
@export var title : Node3D
@export var waterfalls : Array[AnimationPlayer]
@export var optionmanager : OptionsManager
@export var controller : ControllerManager
@export var mouseblocker : Control
@export var anim_creds : AnimationPlayer
@export var version : Label
var viewing_intro : bool
func _ready():
Show("main")
buttons[0].connect("is_pressed", Start)
buttons[1].connect("is_pressed", SubOptions)
buttons[2].connect("is_pressed", Credits)
buttons[3].connect("is_pressed", Exit)
buttons[4].connect("is_pressed", ReturnToLastScreen)
buttons[5].connect("is_pressed", ReturnToLastScreen)
buttons[6].connect("is_pressed", ReturnToLastScreen)
buttons[7].connect("is_pressed", Options_AudioVideo)
buttons[8].connect("is_pressed", Options_Language)
buttons[9].connect("is_pressed", Options_Controller)
buttons[10].connect("is_pressed", ReturnToLastScreen)
buttons[11].connect("is_pressed", ReturnToLastScreen)
buttons[16].connect("is_pressed", RebindControls)
buttons[17].connect("is_pressed", ReturnToLastScreen)
buttons[18].connect("is_pressed", ResetControls)
buttons[19].connect("is_pressed", DiscordLink)
buttons[22].connect("is_pressed", StartMultiplayer)
buttons_options[0].connect("is_pressed", IncreaseVol)
buttons_options[1].connect("is_pressed", DecreaseVol)
buttons_options[2].connect("is_pressed", SetFull)
buttons_options[3].connect("is_pressed", SetWindowed)
buttons_options[4].connect("is_pressed", ControllerEnable)
buttons_options[5].connect("is_pressed", ControllerDisable)
buttons_options[6].connect("is_pressed", ToggleColorblind)
buttons_options[7].connect("is_pressed", ToggleMusic)
version.text = GlobalVariables.currentVersion
Intro()
func _process(delta):
T()
func CheckCommandLine():
var arguments = OS.get_cmdline_args()
for argument in arguments:
if (arguments.size() > 0):
#if (GlobalSteam.LOBBY_INVITE_ARG):
# join_lobby(int(argument))
pass
if argument == "+connect_lobby":
GlobalSteam.LOBBY_INVITE_ARG = true
var failsafed = true
var fs2 = false
func _input(event):
if (event.is_action_pressed("ui_cancel") && failsafed):
if (currentScreen != "main"): ReturnToLastScreen()
if (event.is_action_pressed("exit game") && failsafed):
if (currentScreen != "main"): ReturnToLastScreen()
if (event.is_action_pressed("exit game") && !fs2 && viewing_intro):
SkipIntro()
fs2 = true
func Intro():
cursor.SetCursor(false, false)
if GlobalVariables.lobby_id_found_in_command_line != 0 && !GlobalVariables.command_line_checked:
print("lobby id found in command line. dont run the menu intro")
return
viewing_intro = true
speaker_music.play()
animator_intro.play("splash screen")
c = true
func SkipIntro():
c = false
animator_intro.stop()
animator_intro.play("skip intro")
FinishIntro()
func FinishIntro():
viewing_intro = false
mouseblocker.visible = false
cursor.SetCursor(true, false)
controller.settingFilter = true
controller.SetMainControllerState(controller.controller_currently_enabled)
if (cursor.controller_active): firstFocus_main.grab_focus()
controller.previousFocus = firstFocus_main
assigningFocus = true
var t = 0
var c = false
var fs = false
func T():
if c: t+= get_process_delta_time()
if t > 9 && !fs:
FinishIntro()
fs = true
func Buttons(state : bool):
if (!state):
for i in buttons:
i.isActive = false
i.SetFilter("ignore")
else:
for i in buttons:
i.isActive = true
i.SetFilter("stop")
@export var firstFocus_main : Control
@export var firstFocus_subOptions : Control
@export var firstFocus_credits : Control
@export var firstFocus_audioVideo : Control
@export var firstFocus_language : Control
@export var firstFocus_controller : Control
@export var firstFocus_rebinding : Control
var assigningFocus = false
var lastScreen = "main"
var currentScreen = "main"
func Show(what : String):
lastScreen = currentScreen
currentScreen = what
var focus
title.visible = false
for screen in screens: screen.visible = false
if (what == "main" or what == "sub options"): title.visible = true
match(what):
"main":
parent_main.visible = true
focus = firstFocus_main
"sub options":
parent_suboptions.visible = true
focus = firstFocus_subOptions
"credits":
parent_creds.visible = true
focus = firstFocus_credits
anim_creds.play("RESET")
anim_creds.play("show credits")
"audio video":
parent_audiovideo.visible = true
focus = firstFocus_audioVideo
"language":
parent_language.visible = true
focus = firstFocus_language
"controller":
parent_controller.visible = true
focus = firstFocus_controller
"rebind controls":
parent_rebinding.visible = true
focus = firstFocus_rebinding
if (assigningFocus):
if (cursor.controller_active): focus.grab_focus()
controller.previousFocus = focus
func ReturnToLastScreen():
print("return to last screen")
if currentScreen == "credits": anim_creds.play("RESET")
if (currentScreen) == "sub options": lastScreen = "main"
if (currentScreen) == "rebind controls": lastScreen = "sub options"
if (currentScreen == "audio video" or currentScreen == "language" or currentScreen == "controller" or currentScreen == "rebind controls"): optionmanager.SaveSettings()
Show(lastScreen)
ResetButtons()
func ResetButtons():
#for b in buttons:
# b.ui.modulate.a = 1
cursor.SetCursorImage("point")
func Start():
Buttons(false)
ResetButtons()
for screen in screens: screen.visible = false
title.visible = false
controller.previousFocus = null
speaker_music.stop()
animator_intro.play("snap")
for w in waterfalls: w.pause()
speaker_start.play()
cursor.SetCursor(false, false)
savefile.ClearSave()
await get_tree().create_timer(4, false).timeout
print("changing scene to: main")
get_tree().change_scene_to_file("res://scenes/main.tscn")
func StartMultiplayer():
Buttons(false)
ResetButtons()
for screen in screens: screen.visible = false
title.visible = false
controller.previousFocus = null
speaker_music.stop()
animator_intro.play("snap")
for w in waterfalls: w.pause()
speaker_start.play()
cursor.SetCursor(false, false)
savefile.ClearSave()
await get_tree().create_timer(4, false).timeout
print("changing scene to: lobby")
get_tree().change_scene_to_file("res://multiplayer/scenes/mp_lobby.tscn")
func Credits():
Show("credits")
ResetButtons()
func Exit():
Buttons(false)
ResetButtons()
speaker_music.stop()
animator_intro.play("snap2")
cursor.SetCursor(false, false)
await get_tree().create_timer(.5, false).timeout
get_tree().quit()
func DisableMenu():
Buttons(false)
ResetButtons()
speaker_music.stop()
animator_intro.play("snap2")
cursor.SetCursor(false, false)
func ResetControls():
optionmanager.ResetControls()
ResetButtons()
func ToggleMusic():
optionmanager.AdjustSettings_music()
func ToggleColorblind():
optionmanager.ToggleColorblind()
func DiscordLink():
OS.shell_open(GlobalVariables.discord_link)
func RebindControls():
Show("rebind controls")
ResetButtons()
func SubOptions():
Show("sub options")
ResetButtons()
func Options_AudioVideo():
Show("audio video")
ResetButtons()
func Options_Language():
Show("language")
ResetButtons()
func Options_Controller():
Show("controller")
ResetButtons()
pass
func IncreaseVol():
optionmanager.Adjust("increase")
func DecreaseVol():
optionmanager.Adjust("decrease")
func SetWindowed():
optionmanager.Adjust("windowed")
func SetFull():
optionmanager.Adjust("fullscreen")
func ControllerEnable():
optionmanager.Adjust("controller enable")
func ControllerDisable():
optionmanager.Adjust("controller disable")