A Third-Person-Shooter Godot game.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

250 lines
8.1 KiB

extends Node
var res_loader: ResourceInteractiveLoader = null
var loading_thread: Thread = null
signal replace_main_scene
#warning-ignore:unused_signal
signal quit # Useless, but needed as there is no clean way to check if a node exposes a signal
var level_path = [
"res://level/catalunya/catalunya.tscn", # Home
"res://level/test_map1/test_map1.tscn", # test_map1
]
onready var ui = $UI
onready var background = ui.get_node(@"Background")
onready var title = ui.get_node(@"Title")
onready var main = ui.get_node(@"Main")
onready var main_buttons = main.get_node(@"MainButtons")
onready var begin_button = main_buttons.get_node(@"Begin")
onready var game_settings_button = main_buttons.get_node(@"GameSettings")
onready var graphics_settings_button = main_buttons.get_node(@"GraphicsSettings")
onready var credits_button = main_buttons.get_node(@"Credits")
onready var exit_button = main_buttons.get_node(@"Exit")
onready var level_list = main.get_node(@"LevelList")
onready var graphics_settings_menu = ui.get_node(@"GraphicsSettings")
onready var graphics_settings_actions = graphics_settings_menu.get_node(@"Actions")
onready var graphics_settings_action_apply = graphics_settings_actions.get_node(@"ApplyGraphics")
onready var graphics_settings_action_cancel = graphics_settings_actions.get_node(@"CancelGraphics")
onready var credits_menu = ui.get_node(@"Credits")
onready var credits_back_button = credits_menu.get_node(@"BackCredits")
onready var gi_menu = graphics_settings_menu.get_node(@"GI")
onready var gi_high = gi_menu.get_node(@"High")
onready var gi_low = gi_menu.get_node(@"Low")
onready var gi_disabled = gi_menu.get_node(@"Disabled")
onready var aa_menu = graphics_settings_menu.get_node(@"AA")
onready var aa_8x = aa_menu.get_node(@"8X")
onready var aa_4x = aa_menu.get_node(@"4X")
onready var aa_2x = aa_menu.get_node(@"2X")
onready var aa_disabled = aa_menu.get_node(@"Disabled")
onready var ssao_menu = graphics_settings_menu.get_node(@"SSAO")
onready var ssao_high = ssao_menu.get_node(@"High")
onready var ssao_low = ssao_menu.get_node(@"Low")
onready var ssao_disabled = ssao_menu.get_node(@"Disabled")
onready var bloom_menu = graphics_settings_menu.get_node(@"Bloom")
onready var bloom_high = bloom_menu.get_node(@"High")
onready var bloom_low = bloom_menu.get_node(@"Low")
onready var bloom_disabled = bloom_menu.get_node(@"Disabled")
onready var resolution_menu = graphics_settings_menu.get_node(@"Resolution")
onready var resolution_native = resolution_menu.get_node(@"Native")
onready var resolution_1080 = resolution_menu.get_node(@"1080")
onready var resolution_720 = resolution_menu.get_node(@"720")
onready var resolution_540 = resolution_menu.get_node(@"540")
onready var fullscreen_menu = graphics_settings_menu.get_node(@"Fullscreen")
onready var fullscreen_yes = fullscreen_menu.get_node(@"Yes")
onready var fullscreen_no = fullscreen_menu.get_node(@"No")
onready var loading = ui.get_node(@"Loading")
onready var loading_progress = loading.get_node(@"Progress")
onready var loading_done_timer = loading.get_node(@"DoneTimer")
func _ready():
get_tree().set_screen_stretch(SceneTree.STRETCH_MODE_2D, SceneTree.STRETCH_ASPECT_KEEP, Vector2(1920, 1080))
begin_button.grab_focus()
#var sound_effects = $BackgroundCache/RedRobot/SoundEffects
#for child in sound_effects.get_children():
# child.unit_db = -200
func interactive_load(loader):
while true:
var status = loader.poll()
if status == OK:
loading_progress.value = (loader.get_stage() * 100) / loader.get_stage_count()
continue
elif status == ERR_FILE_EOF:
loading_progress.value = 100
loading_done_timer.start()
break
else:
print("Error while loading level: " + str(status))
main.show()
title.show()
background.hide()
loading.hide()
break
func loading_done(loader):
loading_thread.wait_to_finish()
emit_signal("replace_main_scene", loader.get_resource())
res_loader = null
# Weirdly, "res_loader = null" is needed as otherwise
# loading the resource again is not possible.
func _on_loading_done_timer_timeout():
loading_done(res_loader)
func _on_begin_pressed():
main.hide()
loading.show()
var path = level_path[level_list.get_selected_items()[0]]
if ResourceLoader.has_cached(path):
emit_signal("replace_main_scene", ResourceLoader.load(path))
else:
res_loader = ResourceLoader.load_interactive(path)
loading_thread = Thread.new()
#warning-ignore:return_value_discarded
loading_thread.start(self, "interactive_load", res_loader)
func _on_graphics_settings_pressed():
main.hide()
title.hide()
background.show()
graphics_settings_menu.show()
graphics_settings_action_cancel.grab_focus()
if Settings.gi_quality == Settings.GIQuality.HIGH:
gi_high.pressed = true
elif Settings.gi_quality == Settings.GIQuality.LOW:
gi_low.pressed = true
elif Settings.gi_quality == Settings.GIQuality.DISABLED:
gi_disabled.pressed = true
if Settings.aa_quality == Settings.AAQuality.AA_8X:
aa_8x.pressed = true
elif Settings.aa_quality == Settings.AAQuality.AA_4X:
aa_4x.pressed = true
elif Settings.aa_quality == Settings.AAQuality.AA_2X:
aa_2x.pressed = true
elif Settings.aa_quality == Settings.AAQuality.DISABLED:
aa_disabled.pressed = true
if Settings.ssao_quality == Settings.SSAOQuality.HIGH:
ssao_high.pressed = true
elif Settings.ssao_quality == Settings.SSAOQuality.LOW:
ssao_low.pressed = true
elif Settings.ssao_quality == Settings.SSAOQuality.DISABLED:
ssao_disabled.pressed = true
if Settings.bloom_quality == Settings.BloomQuality.HIGH:
bloom_high.pressed = true
elif Settings.bloom_quality == Settings.BloomQuality.LOW:
bloom_low.pressed = true
elif Settings.bloom_quality == Settings.BloomQuality.DISABLED:
bloom_disabled.pressed = true
if Settings.resolution == Settings.Resolution.NATIVE:
resolution_native.pressed = true
elif Settings.resolution == Settings.Resolution.RES_1080:
resolution_1080.pressed = true
elif Settings.resolution == Settings.Resolution.RES_720:
resolution_720.pressed = true
elif Settings.resolution == Settings.Resolution.RES_540:
resolution_540.pressed = true
if Settings.fullscreen:
fullscreen_yes.pressed = true
else:
fullscreen_no.pressed = true
func _on_exit_pressed():
get_tree().quit()
func _on_apply_graphics_pressed():
main.show()
title.show()
background.hide()
begin_button.grab_focus()
graphics_settings_menu.hide()
if gi_high.pressed:
Settings.gi_quality = Settings.GIQuality.HIGH
elif gi_low.pressed:
Settings.gi_quality = Settings.GIQuality.LOW
elif gi_disabled.pressed:
Settings.gi_quality = Settings.GIQuality.DISABLED
if aa_8x.pressed:
Settings.aa_quality = Settings.AAQuality.AA_8X
elif aa_4x.pressed:
Settings.aa_quality = Settings.AAQuality.AA_4X
elif aa_2x.pressed:
Settings.aa_quality = Settings.AAQuality.AA_2X
elif aa_disabled.pressed:
Settings.aa_quality = Settings.AAQuality.DISABLED
if ssao_high.pressed:
Settings.ssao_quality = Settings.SSAOQuality.HIGH
elif ssao_low.pressed:
Settings.ssao_quality = Settings.SSAOQuality.LOW
elif ssao_disabled.pressed:
Settings.ssao_quality = Settings.SSAOQuality.DISABLED
if bloom_high.pressed:
Settings.bloom_quality = Settings.BloomQuality.HIGH
elif bloom_low.pressed:
Settings.bloom_quality = Settings.BloomQuality.LOW
elif bloom_disabled.pressed:
Settings.bloom_quality = Settings.BloomQuality.DISABLED
if resolution_native.pressed:
Settings.resolution = Settings.Resolution.NATIVE
elif resolution_1080.pressed:
Settings.resolution = Settings.Resolution.RES_1080
elif resolution_720.pressed:
Settings.resolution = Settings.Resolution.RES_720
elif resolution_540.pressed:
Settings.resolution = Settings.Resolution.RES_540
Settings.fullscreen = fullscreen_yes.pressed
# Apply the setting directly
OS.window_fullscreen = Settings.fullscreen
Settings.save_settings()
func _on_cancel_graphics_pressed():
main.show()
title.show()
background.hide()
begin_button.grab_focus()
graphics_settings_menu.hide()
func _on_back_credits_pressed():
main.show()
background.hide()
begin_button.grab_focus()
credits_menu.hide()
func _on_credits_pressed():
main.hide()
background.show()
credits_back_button.grab_focus()
credits_menu.show()