fixed gravity strength being possibly strong at level beginning fixed restarting being allowed after getting the last ring fixed save file's "played_for" being reset or set to another file's fixed the displayed save file total play time not being updated on main menu maybe there's other stuff
240 lines
7.4 KiB
Text
240 lines
7.4 KiB
Text
[gd_scene load_steps=8 format=3 uid="uid://ccgnnif026wb4"]
|
|
|
|
[ext_resource type="PackedScene" uid="uid://xd3nsiglcdfc" path="res://gui/timer.tscn" id="1_356j3"]
|
|
[ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://gui/gravity.tscn" id="1_ir7so"]
|
|
[ext_resource type="PackedScene" uid="uid://cckeamgkt8bqo" path="res://gui/speed.tscn" id="2_2gn6w"]
|
|
[ext_resource type="PackedScene" uid="uid://cn55m5dqo3m6u" path="res://gui/rings.tscn" id="3_mbj17"]
|
|
[ext_resource type="PackedScene" uid="uid://dkxtwpcy4moyo" path="res://menus/pause_menu.tscn" id="4_3bfj3"]
|
|
|
|
[sub_resource type="GDScript" id="GDScript_8n212"]
|
|
script/source = "extends Node
|
|
|
|
var playing := false
|
|
var changing_level := false
|
|
|
|
var main_menu: Node
|
|
var current_level: Level
|
|
var current_level_scene: PackedScene
|
|
|
|
const res_main_menu = preload(\"res://menus/main/main_menu.tscn\")
|
|
|
|
@onready var gui_gravity := $GUI/Gravity
|
|
@onready var gui_timer := $GUI/TopLeft/Timer
|
|
@onready var gui_speed := $GUI/TopRight/Speed
|
|
@onready var gui_rings := $GUI/BottomRight/Rings
|
|
@onready var pause_menu := $PauseMenu
|
|
|
|
func _ready() -> void:
|
|
## Add the version of the game and the name of the OS to the footer of the start menu
|
|
if OS.has_feature(\"editor\"):
|
|
$DevInfos.text = \"dev \"
|
|
$DevInfos.text += \"build \" + ProjectSettings.get_setting(\"application/config/version\") + \" (\" + OS.get_name() + \")\"
|
|
|
|
## Hide UI stuff that shouldn't be visible until later in the game
|
|
$VictoryScreen.hide()
|
|
$GUI.hide()
|
|
pause_menu.hide()
|
|
|
|
## Connect to necessary signals
|
|
pause_menu.connect(\"request_pause\", pause_game)
|
|
pause_menu.connect(\"request_fullscreen\", fullscreen_game)
|
|
pause_menu.connect(\"request_restart\", restart_level)
|
|
|
|
set_main_menu()
|
|
|
|
func set_main_menu():
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
if !is_instance_valid(main_menu):
|
|
main_menu = res_main_menu.instantiate()
|
|
main_menu.connect(\"request_play_level\", start_level)
|
|
add_child(main_menu)
|
|
|
|
func start_level(level: Level, scene: PackedScene) -> void:
|
|
if is_instance_valid(current_level):
|
|
current_level.queue_free()
|
|
if is_instance_valid(main_menu) and self.is_ancestor_of(main_menu):
|
|
self.remove_child(main_menu)
|
|
|
|
current_level = level
|
|
current_level_scene = scene
|
|
add_child(current_level)
|
|
|
|
current_level.connect(\"gravity_change\", gui_gravity.react_to_gravity_change)
|
|
current_level.connect(\"completed\", finish_current_level)
|
|
current_level.connect(\"ring_collected\", func():
|
|
gui_rings.remaining_rings = len(current_level.rings) - current_level.finished_rings_count
|
|
)
|
|
gui_rings.remaining_rings = len(current_level.rings) - current_level.finished_rings_count
|
|
|
|
$GUI.show()
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
|
|
pause_game(false)
|
|
|
|
playing = true
|
|
changing_level = false
|
|
gui_timer.seconds_spent_level_attempt = 0.0
|
|
gui_timer.enabled = true
|
|
|
|
func finish_current_level() -> void:
|
|
gui_timer.enabled = false
|
|
PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 0.5)
|
|
playing = false
|
|
changing_level = true
|
|
|
|
SaveFiles.change_property(\"played_for\", gui_timer.seconds_spent_total, SaveFiles.selected_file)
|
|
var save_file_data = SaveFiles.read(SaveFiles.selected_file)
|
|
var property_name := current_level.id + \"_best_time\"
|
|
if !save_file_data.has(property_name) or save_file_data[property_name] is not float or save_file_data[property_name] > gui_timer.seconds_spent_level_attempt:
|
|
SaveFiles.change_property(property_name, gui_timer.seconds_spent_level_attempt, SaveFiles.selected_file)
|
|
|
|
current_level.music.fadeOut(2)
|
|
await get_tree().create_timer(2).timeout
|
|
current_level.queue_free()
|
|
|
|
win_game()
|
|
|
|
func win_game() -> void:
|
|
$VictoryScreen.show()
|
|
await get_tree().create_timer(2).timeout
|
|
set_main_menu()
|
|
$VictoryScreen.hide()
|
|
|
|
func restart_level() -> void:
|
|
if !current_level or changing_level:
|
|
return
|
|
if current_level_scene is not PackedScene:
|
|
print(\"Tried to restart the level despite not having the level scene\")
|
|
return
|
|
SaveFiles.change_property(\"played_for\", gui_timer.seconds_spent_total, SaveFiles.selected_file)
|
|
start_level(current_level_scene.instantiate(), current_level_scene)
|
|
|
|
func pause_game(to_pause: bool) -> void:
|
|
if !is_instance_valid(current_level) or changing_level:
|
|
return
|
|
|
|
if to_pause:
|
|
SaveFiles.change_property(\"played_for\", gui_timer.seconds_spent_total, SaveFiles.selected_file)
|
|
current_level.process_mode = Node.PROCESS_MODE_DISABLED
|
|
playing = false
|
|
pause_menu.show()
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
else:
|
|
current_level.process_mode = Node.PROCESS_MODE_INHERIT
|
|
playing = true
|
|
pause_menu.hide()
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
|
|
|
|
func fullscreen_game() -> void:
|
|
var fs = DisplayServer.window_get_mode()
|
|
if fs != DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN:
|
|
DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN)
|
|
else:
|
|
DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_WINDOWED)
|
|
|
|
func _process(_delta: float) -> void:
|
|
if is_instance_valid(current_level):
|
|
gui_speed.ball_velocity = current_level.velocity
|
|
|
|
func _input(_event: InputEvent) -> void:
|
|
if Input.is_action_just_pressed(\"restart_level\"):
|
|
restart_level()
|
|
|
|
func _on_btn_quit_pressed() -> void:
|
|
get_tree().quit()
|
|
"
|
|
|
|
[sub_resource type="LabelSettings" id="LabelSettings_1bs00"]
|
|
font_size = 160
|
|
outline_size = 20
|
|
outline_color = Color(0, 0, 0, 1)
|
|
|
|
[node name="Game" type="Node"]
|
|
script = SubResource("GDScript_8n212")
|
|
|
|
[node name="GUI" type="Control" parent="."]
|
|
layout_mode = 3
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
mouse_filter = 2
|
|
|
|
[node name="Gravity" parent="GUI" instance=ExtResource("1_ir7so")]
|
|
layout_mode = 1
|
|
|
|
[node name="TopLeft" type="MarginContainer" parent="GUI"]
|
|
layout_mode = 1
|
|
offset_right = 160.0
|
|
offset_bottom = 85.0
|
|
rotation = 0.0523599
|
|
theme_override_constants/margin_left = 15
|
|
|
|
[node name="Timer" parent="GUI/TopLeft" instance=ExtResource("1_356j3")]
|
|
layout_mode = 2
|
|
|
|
[node name="TopRight" type="MarginContainer" parent="GUI"]
|
|
layout_mode = 1
|
|
anchors_preset = 1
|
|
anchor_left = 1.0
|
|
anchor_right = 1.0
|
|
offset_left = -106.0
|
|
offset_bottom = 51.0
|
|
grow_horizontal = 0
|
|
rotation = -0.0523599
|
|
theme_override_constants/margin_top = 5
|
|
theme_override_constants/margin_right = 15
|
|
|
|
[node name="Speed" parent="GUI/TopRight" instance=ExtResource("2_2gn6w")]
|
|
layout_mode = 2
|
|
|
|
[node name="BottomRight" type="MarginContainer" parent="GUI"]
|
|
layout_mode = 1
|
|
anchors_preset = 3
|
|
anchor_left = 1.0
|
|
anchor_top = 1.0
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
offset_left = -222.0
|
|
offset_top = -51.0
|
|
grow_horizontal = 0
|
|
grow_vertical = 0
|
|
rotation = 0.0523599
|
|
theme_override_constants/margin_right = 15
|
|
theme_override_constants/margin_bottom = 15
|
|
|
|
[node name="Rings" parent="GUI/BottomRight" instance=ExtResource("3_mbj17")]
|
|
layout_mode = 2
|
|
|
|
[node name="VictoryScreen" type="Control" parent="."]
|
|
layout_mode = 3
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
mouse_filter = 2
|
|
|
|
[node name="Label" type="Label" parent="VictoryScreen"]
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
text = "YOU WON!"
|
|
label_settings = SubResource("LabelSettings_1bs00")
|
|
horizontal_alignment = 1
|
|
vertical_alignment = 1
|
|
|
|
[node name="DevInfos" type="Label" parent="."]
|
|
anchors_preset = 12
|
|
anchor_top = 1.0
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
offset_top = -23.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 0
|
|
horizontal_alignment = 1
|
|
|
|
[node name="PauseMenu" parent="." instance=ExtResource("4_3bfj3")]
|