More debug menu functionality

This commit is contained in:
Rob Kelly 2025-06-29 16:41:14 -06:00
parent 980efdb5e6
commit 4343bc1bf5
23 changed files with 684 additions and 60 deletions

BIN
assets/music/cetology2.wav (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cwsu7di7dqdne"
path="res://.godot/imported/cetology2.wav-4252887f402be140b9f959b2d2328938.sample"
[deps]
source_file="res://assets/music/cetology2.wav"
dest_files=["res://.godot/imported/cetology2.wav-4252887f402be140b9f959b2d2328938.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://0ey80i2mka0l"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_f25hr"]
[ext_resource type="AudioStream" uid="uid://b6wrx5fibaujw" path="res://assets/music/thaw_v1_fast.wav" id="2_qt2lw"]
[resource]
script = ExtResource("1_f25hr")
title = "alice"
track = ExtResource("2_qt2lw")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://bmd8hqv5cyn6o"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_udwu7"]
[ext_resource type="AudioStream" uid="uid://b1rmpakal8l6j" path="res://assets/music/driving_02.wav" id="2_4vp3e"]
[resource]
script = ExtResource("1_udwu7")
title = "bonk"
track = ExtResource("2_4vp3e")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://b1sy38m266moa"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_eqq4p"]
[ext_resource type="AudioStream" uid="uid://d4qqqrnplej6" path="res://assets/music/driving_01.wav" id="2_k8v1d"]
[resource]
script = ExtResource("1_eqq4p")
title = "bonk jr"
track = ExtResource("2_k8v1d")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://cgntwy1qba7en"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_k0ufi"]
[ext_resource type="AudioStream" uid="uid://ccqmeqw3moxfd" path="res://assets/music/descending_04.wav" id="2_wro2h"]
[resource]
script = ExtResource("1_k0ufi")
title = "catbird"
track = ExtResource("2_wro2h")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://hwfwyaygj8j4"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_56u6t"]
[ext_resource type="AudioStream" uid="uid://cwsu7di7dqdne" path="res://assets/music/cetology2.wav" id="2_jkcsm"]
[resource]
script = ExtResource("1_56u6t")
title = "cetology"
track = ExtResource("2_jkcsm")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://cbqulm0w0vtvs"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_2cit5"]
[ext_resource type="AudioStream" uid="uid://dgxko5ds8u2lk" path="res://assets/music/desert_01.wav" id="2_t4xhs"]
[resource]
script = ExtResource("1_2cit5")
title = "coyote"
track = ExtResource("2_t4xhs")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://k48cvutbrel2"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_ud52d"]
[ext_resource type="AudioStream" uid="uid://p14r7l44dahr" path="res://assets/music/thaw_v2_fast.wav" id="2_jrlna"]
[resource]
script = ExtResource("1_ud52d")
title = "do better"
track = ExtResource("2_jrlna")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://dr4n7jtfyndkj"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_eej1y"]
[ext_resource type="AudioStream" uid="uid://bp1dv4lv3344w" path="res://assets/music/chorus_01.wav" id="2_m7l3o"]
[resource]
script = ExtResource("1_eej1y")
title = "dr hurt"
track = ExtResource("2_m7l3o")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://ggr3v04p1qbj"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_8jxu3"]
[ext_resource type="AudioStream" uid="uid://bkvjtdlhjfr7n" path="res://assets/music/thaw_v2_slow.wav" id="2_ckjw1"]
[resource]
script = ExtResource("1_8jxu3")
title = "get worse"
track = ExtResource("2_ckjw1")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://dj7qkxxgk3qb4"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_x2w67"]
[ext_resource type="AudioStream" uid="uid://dgvknkfvoqk8r" path="res://assets/music/simple_sample_01.wav" id="2_8qaaq"]
[resource]
script = ExtResource("1_x2w67")
title = "gfolf"
track = ExtResource("2_8qaaq")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="MP3Track" load_steps=3 format=3 uid="uid://cpucbgjlokxax"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="1_c50lm"]
[ext_resource type="AudioStream" uid="uid://b3ktgjeq6fupj" path="res://assets/music/thaw_v1_slow.wav" id="2_v8hl7"]
[resource]
script = ExtResource("1_c50lm")
title = "palace"
track = ExtResource("2_v8hl7")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"

View File

@ -45,7 +45,7 @@ func _ready() -> void:
rebuild_list()
func _set_selection_idx(value: float) -> void:
func _set_selection_idx(value: int) -> void:
selection_idx = wrapi(value, 0, options.size())
_update_scrolling()

View File

@ -4,7 +4,7 @@ class_name Sprayable extends StaticBody3D
## Called each frame this node takes a hit.
##
## Derived types should override `_hit()` as a lifecycle method.
func hit(damage: float) -> void:
func hit(_damage: float) -> void:
_hit()

View File

@ -0,0 +1,37 @@
extends Panel
const TRANSITION_TIME := 0.1
func _fade_in() -> void:
create_tween().tween_property(self, "modulate", Color.WHITE, TRANSITION_TIME).set_trans(
Tween.TRANS_CUBIC
)
func _fade_out() -> void:
create_tween().tween_property(self, "modulate", Color.TRANSPARENT, TRANSITION_TIME).set_trans(
Tween.TRANS_CUBIC
)
func _can_drop_data(_at_position: Vector2, data: Variant) -> bool:
if data is MP3Track:
_fade_in()
return true
return false
func _drop_data(_at_position: Vector2, data: Variant) -> void:
if not data is MP3Track:
return
# Insert just before this item
@warning_ignore("unsafe_cast")
var new_container := DragNDropTrack.create(data as MP3Track)
add_sibling(new_container)
get_parent().move_child(new_container, get_index())
_fade_out()
func _on_mouse_exited() -> void:
_fade_out()

View File

@ -0,0 +1 @@
uid://cwngje5n14ukr

View File

@ -1,13 +1,37 @@
extends PanelContainer
var _track_list_dirty := false
@onready var god_mode: CheckButton = %GodMode
@onready var collect_grunk_input: SpinBox = %CollectGrunkInput
@onready var tank_size_input: SpinBox = %TankSizeInput
@onready var mp3_player: CheckButton = %"MP3Player"
@onready var toothbrush: CheckButton = %Toothbrush
@onready var stickers: CheckButton = %Stickers
@onready var tracks_collected_list: VBoxContainer = %TracksCollectedList
@onready var append_target: Panel = %AppendTarget
func _ready() -> void:
# Initialize controls
if Player.instance:
god_mode.set_pressed_no_signal(Player.instance.godmode)
if World.instance:
if World.instance.manager:
tank_size_input.value = World.instance.manager.grunk_tank_limit
mp3_player.set_pressed_no_signal(World.instance.manager.mp3_player_unlocked)
toothbrush.set_pressed_no_signal(World.instance.manager.toothbrush_unlocked)
stickers.set_pressed_no_signal(World.instance.manager.stickers_unlocked)
func _build_track_list() -> void:
tracks_collected_list.remove_child(append_target)
for track: MP3Track in World.instance.manager.mp3_collection:
tracks_collected_list.add_child(DragNDropTrack.create(track))
tracks_collected_list.add_child(append_target)
func kill_player() -> void:
@ -29,3 +53,54 @@ func collect_grunk() -> void:
func empty_tank() -> void:
World.instance.manager.empty_tank()
func set_tank_size() -> void:
@warning_ignore("narrowing_conversion")
World.instance.manager.grunk_tank_limit = tank_size_input.value
func set_god_mode(toggled_on: bool) -> void:
Player.instance.godmode = toggled_on
func set_mp3_player_unlocked(toggled_on: bool) -> void:
World.instance.manager.mp3_player_unlocked = toggled_on
func set_toothbrush_unlocked(toggled_on: bool) -> void:
World.instance.manager.toothbrush_unlocked = toggled_on
func set_stickers_unlocked(toggled_on: bool) -> void:
World.instance.manager.stickers_unlocked = toggled_on
func unlock_next_milestone() -> void:
var milestone := World.instance.manager.next_milestone()
World.instance.manager.grunk_vault = World.instance.manager.next_milestone_amount()
if milestone:
World.instance.manager.milestone_reached.emit(milestone)
func _on_track_list_changed() -> void:
if not is_node_ready():
return # This will get called several times while initializing the scene tree
_track_list_dirty = true
_update_track_list.call_deferred()
func _update_track_list() -> void:
# Debounce update calls
if not _track_list_dirty:
return
_track_list_dirty = false
var track_list: Array[MP3Track] = []
for child: Node in tracks_collected_list.get_children():
var track := child as DragNDropTrack
if track:
track_list.append(track.track)
World.instance.manager.mp3_collection = track_list

View File

@ -1,8 +1,41 @@
[gd_scene load_steps=4 format=3 uid="uid://dofr2ebmvnwxf"]
[gd_scene load_steps=19 format=3 uid="uid://dofr2ebmvnwxf"]
[ext_resource type="Theme" uid="uid://doq7ay6f7dgfo" path="res://src/ui/menus/menu.theme" id="1_spfxq"]
[ext_resource type="Script" uid="uid://cekwr6enxknpn" path="res://src/ui/menus/debug_menu/debug_menu.gd" id="2_p20ux"]
[ext_resource type="FontFile" uid="uid://qadtckvw0t3l" path="res://assets/fonts/fontawesome-free-6.7.2-desktop/otfs/Font Awesome 6 Free-Solid-900.otf" id="3_rw5h6"]
[ext_resource type="PackedScene" uid="uid://c3lhvdbgdulnd" path="res://src/ui/menus/debug_menu/drag_n_drop_track.tscn" id="4_rw5h6"]
[ext_resource type="Resource" uid="uid://0ey80i2mka0l" path="res://assets/music/track_data/alice.tres" id="5_f12qv"]
[ext_resource type="Script" uid="uid://cwngje5n14ukr" path="res://src/ui/menus/debug_menu/append_target.gd" id="5_sagn5"]
[ext_resource type="Resource" uid="uid://bmd8hqv5cyn6o" path="res://assets/music/track_data/bonk.tres" id="6_rdn7w"]
[ext_resource type="Resource" uid="uid://b1sy38m266moa" path="res://assets/music/track_data/bonk_jr.tres" id="7_nj5y1"]
[ext_resource type="Resource" uid="uid://cgntwy1qba7en" path="res://assets/music/track_data/catbird.tres" id="8_fqd57"]
[ext_resource type="Resource" uid="uid://hwfwyaygj8j4" path="res://assets/music/track_data/cetology.tres" id="9_lonu6"]
[ext_resource type="Resource" uid="uid://cbqulm0w0vtvs" path="res://assets/music/track_data/coyote.tres" id="10_sagn5"]
[ext_resource type="Resource" uid="uid://k48cvutbrel2" path="res://assets/music/track_data/do_better.tres" id="11_5phk2"]
[ext_resource type="Resource" uid="uid://dr4n7jtfyndkj" path="res://assets/music/track_data/dr_hurt.tres" id="12_kcgsq"]
[ext_resource type="Resource" uid="uid://ggr3v04p1qbj" path="res://assets/music/track_data/get_worse.tres" id="13_4d3e1"]
[ext_resource type="Resource" uid="uid://dj7qkxxgk3qb4" path="res://assets/music/track_data/gfolf.tres" id="14_ir5li"]
[ext_resource type="Resource" uid="uid://cpucbgjlokxax" path="res://assets/music/track_data/palace.tres" id="15_rvjr6"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_rw5h6"]
content_margin_left = 0.0
content_margin_top = 0.0
content_margin_right = 0.0
content_margin_bottom = 0.0
bg_color = Color(0.06, 0.06, 0.06, 1)
corner_radius_top_left = 3
corner_radius_top_right = 3
corner_radius_bottom_right = 3
corner_radius_bottom_left = 3
corner_detail = 5
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sagn5"]
bg_color = Color(0.3, 0.3, 0.3, 0.6)
corner_radius_top_left = 8
corner_radius_top_right = 8
corner_radius_bottom_right = 8
corner_radius_bottom_left = 8
corner_detail = 5
[node name="DebugMenu" type="PanelContainer"]
custom_minimum_size = Vector2(1000, 600)
@ -89,9 +122,222 @@ text = "Collect grunk"
layout_mode = 2
text = "Empty tank"
[node name="HBoxContainer3" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="TankSizeInput" type="SpinBox" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3"]
unique_name_in_owner = true
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
max_value = 6.4e+07
alignment = 2
suffix = "g"
[node name="SetTankSize" type="Button" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3"]
layout_mode = 2
text = "Set Tank Limit"
[node name="HBoxContainer4" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="MP3Player" type="CheckButton" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"]
unique_name_in_owner = true
layout_mode = 2
text = "MP3 Player"
alignment = 2
[node name="Toothbrush" type="CheckButton" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"]
unique_name_in_owner = true
layout_mode = 2
text = "Toothbrush"
alignment = 2
[node name="Stickers" type="CheckButton" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"]
unique_name_in_owner = true
layout_mode = 2
text = "Sticker Pack"
alignment = 2
[node name="HBoxContainer5" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="UnlockNextMilestone" type="Button" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5"]
layout_mode = 2
text = "Advance to next milestone"
[node name="HBoxContainer6" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 16
alignment = 2
[node name="TracksCollectedColumn" type="VBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn"]
layout_mode = 2
text = "Tracks Collected"
horizontal_alignment = 1
[node name="TracksCollected" type="PanelContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn"]
custom_minimum_size = Vector2(180, 256)
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_rw5h6")
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected"]
layout_mode = 2
theme_override_constants/margin_left = 4
theme_override_constants/margin_top = 4
theme_override_constants/margin_right = 4
theme_override_constants/margin_bottom = 4
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer"]
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 4
theme_override_constants/margin_right = 4
[node name="TracksCollectedList" type="VBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="AppendTarget" type="Panel" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList"]
unique_name_in_owner = true
modulate = Color(1, 1, 1, 0)
custom_minimum_size = Vector2(0, 31)
layout_mode = 2
size_flags_vertical = 3
theme_override_styles/panel = SubResource("StyleBoxFlat_sagn5")
script = ExtResource("5_sagn5")
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
theme_override_fonts/font = ExtResource("3_rw5h6")
theme_override_font_sizes/font_size = 36
text = ""
[node name="TracksAvailableColumn" type="VBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn"]
layout_mode = 2
text = "Tracks Available"
horizontal_alignment = 1
[node name="TracksAvailable" type="PanelContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn"]
custom_minimum_size = Vector2(180, 256)
layout_mode = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_rw5h6")
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable"]
layout_mode = 2
theme_override_constants/margin_left = 4
theme_override_constants/margin_top = 4
theme_override_constants/margin_right = 4
theme_override_constants/margin_bottom = 4
[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer"]
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 4
theme_override_constants/margin_right = 4
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer"]
layout_mode = 2
size_flags_horizontal = 3
[node name="DragNDropTrack" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("5_f12qv")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack2" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("6_rdn7w")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack3" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("7_nj5y1")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack4" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("8_fqd57")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack5" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("9_lonu6")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack6" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("10_sagn5")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack7" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("11_5phk2")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack8" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("12_kcgsq")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack9" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("13_4d3e1")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack10" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("14_ir5li")
drop_target = false
preserve_on_drag = true
[node name="DragNDropTrack11" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksAvailableColumn/TracksAvailable/MarginContainer/ScrollContainer/MarginContainer/VBoxContainer" instance=ExtResource("4_rw5h6")]
layout_mode = 2
track = ExtResource("15_rvjr6")
drop_target = false
preserve_on_drag = true
[connection signal="pressed" from="MarginContainer/VBoxContainer/Header/CloseButton" to="." method="queue_free"]
[connection signal="toggled" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/GodMode" to="." method="set_god_mode"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/KillPlayer" to="." method="kill_player"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/SaveButton" to="." method="save_game"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer/LoadButton" to="." method="load_game"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer2/CollectGrunkButton" to="." method="collect_grunk"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer2/EmptyTankButton" to="." method="empty_tank"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3/SetTankSize" to="." method="set_tank_size"]
[connection signal="toggled" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/MP3Player" to="." method="set_mp3_player_unlocked"]
[connection signal="toggled" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Toothbrush" to="." method="set_toothbrush_unlocked"]
[connection signal="toggled" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Stickers" to="." method="set_stickers_unlocked"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/UnlockNextMilestone" to="." method="unlock_next_milestone"]
[connection signal="child_entered_tree" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList" to="." method="_on_track_list_changed" unbinds=1]
[connection signal="child_exiting_tree" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList" to="." method="_on_track_list_changed" unbinds=1]
[connection signal="child_order_changed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList" to="." method="_on_track_list_changed"]
[connection signal="mouse_exited" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList/AppendTarget" to="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList/AppendTarget" method="_on_mouse_exited"]

View File

@ -0,0 +1,110 @@
@tool
class_name DragNDropTrack extends Control
const SCENE := preload("drag_n_drop_track.tscn")
const TRANSITION_TIME := 0.1
const SHRINK_SIZE := 31
const FULL_SIZE := 65
@export var track: MP3Track:
set = _set_track
@export var drop_target := true
@export var preserve_on_drag := true
var _expanded := false
var _tween: Tween
@onready var label: Label = %Label
func _ready() -> void:
_set_track(track)
func _kill_any_tween() -> void:
if _tween and _tween.is_valid():
_tween.kill()
func _new_tween() -> Tween:
_kill_any_tween()
_tween = create_tween()
return _tween
func _grow() -> void:
if not _expanded:
(
_new_tween()
. tween_property(self, "custom_minimum_size:y", FULL_SIZE, TRANSITION_TIME)
. set_trans(Tween.TRANS_CUBIC)
)
_expanded = true
func _shrink() -> void:
if _expanded:
(
_new_tween()
. tween_property(self, "custom_minimum_size:y", SHRINK_SIZE, TRANSITION_TIME)
. set_trans(Tween.TRANS_CUBIC)
)
_expanded = false
func _set_track(value: MP3Track) -> void:
track = value
if label:
label.text = value.title if value else ""
func _get_drag_data(_at_position: Vector2) -> Variant:
var preview := self.duplicate() as DragNDropTrack
preview.size = self.size
var container := Control.new()
container.size = Vector2.ZERO
container.add_child(preview)
preview.position = -preview.size * 0.5
set_drag_preview(container)
if not preserve_on_drag:
queue_free()
return track
func _can_drop_data(_at_position: Vector2, data: Variant) -> bool:
if drop_target and data is MP3Track:
_grow()
return true
return false
func _drop_data(_at_position: Vector2, data: Variant) -> void:
if not (drop_target and data is MP3Track):
return
# When dropping on another item, we want to insert just before this item
@warning_ignore("unsafe_cast")
var new_container := DragNDropTrack.create(data as MP3Track)
add_sibling(new_container)
get_parent().move_child(new_container, get_index())
_kill_any_tween()
custom_minimum_size.y = SHRINK_SIZE
func _on_mouse_exited() -> void:
if drop_target:
_shrink()
static func create(
mp3_track: MP3Track,
_drop_target: bool = true,
_preserve_on_drag: bool = false,
) -> DragNDropTrack:
var instance := SCENE.instantiate() as DragNDropTrack
instance.track = mp3_track
instance.drop_target = _drop_target
instance.preserve_on_drag = _preserve_on_drag
return instance

View File

@ -0,0 +1 @@
uid://b14vx8x1grjg4

View File

@ -0,0 +1,59 @@
[gd_scene load_steps=4 format=3 uid="uid://c3lhvdbgdulnd"]
[ext_resource type="Script" uid="uid://b14vx8x1grjg4" path="res://src/ui/menus/debug_menu/drag_n_drop_track.gd" id="1_1rfrr"]
[ext_resource type="FontFile" uid="uid://qadtckvw0t3l" path="res://assets/fonts/fontawesome-free-6.7.2-desktop/otfs/Font Awesome 6 Free-Solid-900.otf" id="2_ehxba"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1rfrr"]
bg_color = Color(0.3, 0.3, 0.3, 0.6)
corner_radius_top_left = 8
corner_radius_top_right = 8
corner_radius_bottom_right = 8
corner_radius_bottom_left = 8
corner_detail = 5
[node name="DragNDropTrack" type="Control"]
custom_minimum_size = Vector2(80, 31)
layout_mode = 3
anchors_preset = 0
offset_right = 80.0
offset_bottom = 31.0
script = ExtResource("1_1rfrr")
preserve_on_drag = null
[node name="PanelContainer" type="PanelContainer" parent="."]
custom_minimum_size = Vector2(80, 31)
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -31.0
grow_horizontal = 2
grow_vertical = 0
mouse_filter = 1
theme_override_styles/panel = SubResource("StyleBoxFlat_1rfrr")
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer"]
layout_mode = 2
theme_override_constants/margin_left = 4
theme_override_constants/margin_top = 4
theme_override_constants/margin_right = 4
theme_override_constants/margin_bottom = 4
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer"]
layout_mode = 2
[node name="Grip" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
layout_mode = 2
size_flags_horizontal = 0
theme_override_fonts/font = ExtResource("2_ehxba")
text = " "
[node name="Label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = "alice"
horizontal_alignment = 1
[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"]

View File

@ -1,15 +1,15 @@
[gd_resource type="Resource" script_class="WorldManager" load_steps=33 format=3 uid="uid://tgac5tnfx56r"]
[gd_resource type="Resource" script_class="WorldManager" load_steps=26 format=3 uid="uid://tgac5tnfx56r"]
[ext_resource type="Script" uid="uid://c1i5gnht15x0e" path="res://src/world/world_manager.gd" id="1_i77rl"]
[ext_resource type="Script" uid="uid://ufxoxupdvyd5" path="res://src/game/milestone.gd" id="2_c37ff"]
[ext_resource type="Script" uid="uid://kwiy3dv1h7q7" path="res://src/equipment/mp3_player/mp3_track.gd" id="3_yiuq5"]
[ext_resource type="AudioStream" uid="uid://bp1dv4lv3344w" path="res://assets/music/chorus_01.wav" id="4_dwul7"]
[ext_resource type="AudioStream" uid="uid://ccqmeqw3moxfd" path="res://assets/music/descending_04.wav" id="5_dwul7"]
[ext_resource type="AudioStream" uid="uid://d4qqqrnplej6" path="res://assets/music/driving_01.wav" id="6_2q28t"]
[ext_resource type="AudioStream" uid="uid://dgvknkfvoqk8r" path="res://assets/music/simple_sample_01.wav" id="7_dojbf"]
[ext_resource type="AudioStream" uid="uid://bkvjtdlhjfr7n" path="res://assets/music/thaw_v2_slow.wav" id="8_81w62"]
[ext_resource type="AudioStream" uid="uid://b1rmpakal8l6j" path="res://assets/music/driving_02.wav" id="9_gv3bq"]
[ext_resource type="AudioStream" uid="uid://dgxko5ds8u2lk" path="res://assets/music/desert_01.wav" id="10_63s66"]
[ext_resource type="Resource" uid="uid://cgntwy1qba7en" path="res://assets/music/track_data/catbird.tres" id="4_2q28t"]
[ext_resource type="Resource" uid="uid://ggr3v04p1qbj" path="res://assets/music/track_data/get_worse.tres" id="5_dojbf"]
[ext_resource type="Resource" uid="uid://bmd8hqv5cyn6o" path="res://assets/music/track_data/bonk.tres" id="6_81w62"]
[ext_resource type="Resource" uid="uid://dj7qkxxgk3qb4" path="res://assets/music/track_data/gfolf.tres" id="7_gv3bq"]
[ext_resource type="Resource" uid="uid://b1sy38m266moa" path="res://assets/music/track_data/bonk_jr.tres" id="8_63s66"]
[ext_resource type="Resource" uid="uid://dr4n7jtfyndkj" path="res://assets/music/track_data/dr_hurt.tres" id="9_enr7w"]
[ext_resource type="Resource" uid="uid://cbqulm0w0vtvs" path="res://assets/music/track_data/coyote.tres" id="10_qb1w8"]
[sub_resource type="Resource" id="Resource_h4r54"]
script = ExtResource("2_c37ff")
@ -26,18 +26,12 @@ mystery = false
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_veuns"]
script = ExtResource("3_yiuq5")
title = "catbird"
track = ExtResource("5_dwul7")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_b83gw"]
script = ExtResource("2_c37ff")
name = "MP3 PLAYER"
message = "MP3 PLAYER DECRYPTED. Enjoy some
light music whilst you GRUNK."
bonus_track = SubResource("Resource_veuns")
bonus_track = ExtResource("4_2q28t")
mp3_player = true
toothbrush = false
seminar = false
@ -63,17 +57,11 @@ mystery = false
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_h2b4l"]
script = ExtResource("3_yiuq5")
title = "get worse"
track = ExtResource("8_81w62")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_vebb4"]
script = ExtResource("2_c37ff")
name = "BONUS TRACK"
message = "BONUS TRACK DELIVERED"
bonus_track = SubResource("Resource_h2b4l")
bonus_track = ExtResource("5_dojbf")
mp3_player = false
toothbrush = false
seminar = false
@ -99,17 +87,11 @@ mystery = false
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_enr7w"]
script = ExtResource("3_yiuq5")
title = "bonk"
track = ExtResource("9_gv3bq")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_dwul7"]
script = ExtResource("2_c37ff")
name = "BONUS TRACK"
message = "BONUS TRACK DELIVERED"
bonus_track = SubResource("Resource_enr7w")
bonus_track = ExtResource("6_81w62")
mp3_player = false
toothbrush = false
seminar = false
@ -135,17 +117,11 @@ mystery = false
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_qb1w8"]
script = ExtResource("3_yiuq5")
title = "gfolf"
track = ExtResource("7_dojbf")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_ohbx8"]
script = ExtResource("2_c37ff")
name = "BONUS TRACK"
message = "BONUS TRACK DELIVERED"
bonus_track = SubResource("Resource_qb1w8")
bonus_track = ExtResource("7_gv3bq")
mp3_player = false
toothbrush = false
seminar = false
@ -171,17 +147,11 @@ mystery = false
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_drgdw"]
script = ExtResource("3_yiuq5")
title = "bonk jr"
track = ExtResource("6_2q28t")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_74vm3"]
script = ExtResource("2_c37ff")
name = "BONUS TRACK"
message = "BONUS TRACK DELIVERED"
bonus_track = SubResource("Resource_drgdw")
bonus_track = ExtResource("8_63s66")
mp3_player = false
toothbrush = false
seminar = false
@ -207,18 +177,12 @@ mystery = false
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_mwqeg"]
script = ExtResource("3_yiuq5")
title = "dr hurt"
track = ExtResource("4_dwul7")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_6ok02"]
script = ExtResource("2_c37ff")
name = "BONUS TRACK"
message = "BONUS TRACK DELIVERED
THIS ONE'S A CLASSIC"
bonus_track = SubResource("Resource_mwqeg")
bonus_track = ExtResource("9_enr7w")
mp3_player = false
toothbrush = false
seminar = false
@ -243,17 +207,11 @@ mystery = true
fiesta = false
metadata/_custom_type_script = "uid://ufxoxupdvyd5"
[sub_resource type="Resource" id="Resource_l175b"]
script = ExtResource("3_yiuq5")
title = "coyote"
track = ExtResource("10_63s66")
metadata/_custom_type_script = "uid://kwiy3dv1h7q7"
[sub_resource type="Resource" id="Resource_ysbqn"]
script = ExtResource("2_c37ff")
name = "BONUS TRACK"
message = "BONUS TRACK DELIVERED"
bonus_track = SubResource("Resource_l175b")
bonus_track = ExtResource("10_qb1w8")
mp3_player = false
toothbrush = false
seminar = false