| @ -1,9 +0,0 @@ | |||||
| extends Node | |||||
| const BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/block.tscn") | |||||
| const DROPPED_BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/dropped_block.tscn") | |||||
| # TODO: Move the following into the GameSettingsManager | |||||
| var enable_waila: bool = true ## Enable `What Am I Looking At` UI | |||||
| var enable_block_highlight: bool = true | |||||
| @ -1 +0,0 @@ | |||||
| uid://cp6sum1t6el0a | |||||
| @ -1,20 +1,197 @@ | |||||
| extends Node | extends Node | ||||
| signal item_dropped(item: DBItemResource) | |||||
| signal item_picked_up(item: DBItemResource) | |||||
| #region Inventory Specific | |||||
| signal add_to_inventory(item_id: String, amount: int) | |||||
| signal clear_inventory ## Remove all items in inventory | |||||
| signal item_added(item_id: String, amount: int) | |||||
| signal item_removed(item_id: String, amount: int) | |||||
| signal inventory_closed | |||||
| signal inventory_opened | |||||
| signal inventory_slot_updated(slot_index: int) | |||||
| signal remove_from_inventory(item_id: String, amount: int) | |||||
| signal remove_from_quickslot(amount: int) | |||||
| signal remove_from_slot(slot_index: int, amount: int) | |||||
| #endregion | |||||
| #region Quickslots | |||||
| signal next_quick_slot | signal next_quick_slot | ||||
| signal previous_quick_slot | signal previous_quick_slot | ||||
| signal quick_slot_selected(slot_index: int) | |||||
| signal select_quick_slot(slot_index: int) | signal select_quick_slot(slot_index: int) | ||||
| signal quick_slot_item_changed(item_id: String) | |||||
| signal item_picked_up(item: DBItemResource) | |||||
| signal item_dropped(item: DBItemResource) | |||||
| signal inventory_opened | |||||
| signal inventory_closed | |||||
| #endregion | |||||
| var quick_slot_item_id: String = "001" | |||||
| var max_inventory_items: int = 40 # 4 rows of 10 | |||||
| var quick_slot_count: int = 10 | |||||
| var selected_quick_slot: int = 0 | |||||
| var inventory: Array[DBItemResource] = [] ## To ensure inventory is automatically sorted, "empty" inventory cells will be replaced with null to keep positions | |||||
| var _inventory_cache: Dictionary[String, Dictionary] = {} ## Used for caching certain information | |||||
| func _ready() -> void: | func _ready() -> void: | ||||
| self.quick_slot_item_changed.connect(_on_quick_slot_item_changed) | |||||
| self.item_picked_up.connect(_on_item_picked_up) | |||||
| self.item_dropped.connect(_on_item_dropped) | |||||
| self.add_to_inventory.connect(_on_add_to_inventory) | |||||
| self.clear_inventory.connect(_on_clear_inventory) | |||||
| self.quick_slot_selected.connect(_on_quick_slot_selected) | |||||
| self.remove_from_inventory.connect(_on_remove_from_inventory) | |||||
| self.remove_from_quickslot.connect(_on_remove_from_quickslot) | |||||
| self.remove_from_slot.connect(_on_remove_from_slot) | |||||
| func available_space(item_id: String) -> int: | |||||
| var full_stacks: int = floor(_inventory_cache[item_id].total / DBItems.data[item_id].max_stack_size) | |||||
| var space_in_stacks: int = ( | |||||
| DBItems.data[item_id].max_stack_size - abs( | |||||
| _inventory_cache[item_id].total - (DBItems.data[item_id].max_stack_size * full_stacks) | |||||
| ) | |||||
| ) | |||||
| # This is a bit of a hack because I'm a math/logic noob | |||||
| if space_in_stacks == DBItems.data[item_id].max_stack_size: | |||||
| space_in_stacks = 0 | |||||
| var open_stack_amount: int = (max_inventory_items - inventory.size()) * DBItems.data[item_id].max_stack_size | |||||
| return open_stack_amount + space_in_stacks | |||||
| func get_inventory_item(item_slot: int = selected_quick_slot) -> DBItemResource: | |||||
| if item_slot >= inventory.size() or item_slot < 0: | |||||
| return null | |||||
| return inventory.get(item_slot) | |||||
| func get_quick_slot_item_id(item_slot: int = selected_quick_slot) -> String: | |||||
| return inventory[item_slot].id | |||||
| func _find_stacks_by_id(item_resource: DBItemResource, item_id: String) -> bool: | |||||
| return item_resource != null and item_resource.id == item_id | |||||
| ## Find the stack where at least one item can be added | |||||
| func _find_stacks_with_space(item_resource: DBItemResource, item_id: String) -> bool: | |||||
| return ( | |||||
| item_resource == null or ( | |||||
| item_resource.id == item_id and | |||||
| item_resource.amount < item_resource.max_stack_size | |||||
| ) | |||||
| ) | |||||
| ## Removes an amount of items from a specific slot | |||||
| ## If the amount exceeds the amount of the slot, will NOT remove from other stacks | |||||
| func _remove_from_slot(slot_index: int, amount: int) -> void: | |||||
| if slot_index >= max_inventory_items: | |||||
| printerr("Slot Index ", slot_index, " out of inventory range") | |||||
| return | |||||
| inventory[slot_index].amount -= amount | |||||
| if inventory[slot_index].amount <= 0: | |||||
| inventory[slot_index] = null | |||||
| inventory_slot_updated.emit(slot_index) | |||||
| func _update_cache_total(item_id: String, amount: int) -> void: | |||||
| if not _inventory_cache.get(item_id): | |||||
| _inventory_cache[item_id] = {"total": 0} | |||||
| _inventory_cache[item_id].total += amount | |||||
| func _on_add_to_inventory(item_id: String, amount: int = 1) -> void: | |||||
| if not DBItems.data.get(item_id): | |||||
| printerr("Cannot add item, ", item_id, ", to inventory. Could not find item within DBItems.data.") | |||||
| return | |||||
| if amount < 1: | |||||
| printerr("Cannot add item, ", item_id, ", to inventory. Amount to add cannot be less then 1.") | |||||
| return | |||||
| var item_resource: DBItemResource = DBItems.data[item_id] | |||||
| # This logic seems overly complicated and is a mess. | |||||
| # Should look into fixing/simplifying this in the future | |||||
| var amount_remaining: int = amount | |||||
| while amount_remaining > 0: | |||||
| var first_stack_index: int = inventory.find_custom(_find_stacks_with_space.bind(item_id)) | |||||
| var stack_resource: DBItemResource | |||||
| if first_stack_index == -1 and inventory.size() < max_inventory_items: # No existing stack and empty slots available | |||||
| stack_resource = item_resource.duplicate() | |||||
| inventory.append(stack_resource) | |||||
| if amount_remaining <= stack_resource.max_stack_size: | |||||
| _update_cache_total(item_id, amount_remaining) | |||||
| inventory[-1].amount += amount_remaining | |||||
| amount_remaining = 0 | |||||
| else: | |||||
| _update_cache_total(item_id, stack_resource.max_stack_size) | |||||
| inventory[-1].amount = stack_resource.max_stack_size | |||||
| amount_remaining -= stack_resource.max_stack_size | |||||
| inventory_slot_updated.emit(inventory.size() - 1) | |||||
| elif first_stack_index > -1: | |||||
| if inventory[first_stack_index] == null: # Empty slot | |||||
| inventory[first_stack_index] = item_resource.duplicate() | |||||
| stack_resource = inventory[first_stack_index] | |||||
| var current_amount: int = stack_resource.amount | |||||
| var total_amount: int = current_amount + amount_remaining | |||||
| if total_amount < stack_resource.max_stack_size: # Stack not full and has space | |||||
| _update_cache_total(item_id, amount_remaining) | |||||
| inventory[first_stack_index].amount = total_amount | |||||
| amount_remaining = 0 | |||||
| else: | |||||
| _update_cache_total(item_id, stack_resource.max_stack_size - current_amount) | |||||
| inventory[first_stack_index].amount = stack_resource.max_stack_size | |||||
| amount_remaining -= stack_resource.max_stack_size | |||||
| inventory_slot_updated.emit(first_stack_index) | |||||
| item_added.emit(item_id, amount - amount_remaining) | |||||
| func _on_remove_from_inventory(item_id: String, amount: int = 1) -> void: | |||||
| var amount_remaining: int = amount | |||||
| while amount_remaining > 0: | |||||
| var last_stack_index: int = inventory.rfind_custom(_find_stacks_by_id.bind(item_id)) | |||||
| if last_stack_index > -1: | |||||
| var stack_resource: DBItemResource = inventory[last_stack_index] | |||||
| var current_stack_amount: int = stack_resource.amount | |||||
| var total_amount: int = current_stack_amount - amount_remaining | |||||
| if total_amount > 0: # Stack will not be empty after removing | |||||
| _update_cache_total(item_id, -amount_remaining) | |||||
| inventory[last_stack_index].amount -= amount_remaining | |||||
| amount_remaining = 0 | |||||
| else: | |||||
| var to_remove: int = stack_resource.max_stack_size - current_stack_amount | |||||
| _update_cache_total(item_id, -amount_remaining) | |||||
| inventory[last_stack_index] = null | |||||
| amount_remaining -= to_remove | |||||
| inventory_slot_updated.emit(last_stack_index) | |||||
| else: # Received more to remove than we have stacks for | |||||
| amount_remaining = 0 | |||||
| item_removed.emit(item_id, amount - amount_remaining) | |||||
| func _on_clear_inventory() -> void: | |||||
| inventory.clear() | |||||
| _inventory_cache.clear() | |||||
| func _on_item_dropped(item: DBItemResource) -> void: | |||||
| _on_remove_from_inventory(item.id, 1) | |||||
| func _on_item_picked_up(item: DBItemResource) -> void: | |||||
| _on_add_to_inventory(item.id, 1) | |||||
| func _on_quick_slot_selected(slot_index: int) -> void: | |||||
| selected_quick_slot = slot_index | |||||
| func _on_remove_from_slot(slot_index: int, amount: int) -> void: | |||||
| _remove_from_slot(slot_index, amount) | |||||
| func _on_quick_slot_item_changed(item_id: String) -> void: | |||||
| quick_slot_item_id = item_id | |||||
| func _on_remove_from_quickslot(amount: int) -> void: | |||||
| _remove_from_slot(selected_quick_slot, amount) | |||||
| @ -0,0 +1,5 @@ | |||||
| class_name ItemResource | |||||
| extends DBItemResource | |||||
| @export var resource_scene: PackedScene = null | |||||
| @ -0,0 +1 @@ | |||||
| uid://m32ytcig5ha5 | |||||
| @ -0,0 +1,14 @@ | |||||
| [gd_resource type="Resource" script_class="ItemResource" load_steps=3 format=3 uid="uid://dqkdgxdjb8sk5"] | |||||
| [ext_resource type="PackedScene" uid="uid://ccky0w7brcf1l" path="res://scenes/items/torch.tscn" id="1_7h82o"] | |||||
| [ext_resource type="Script" uid="uid://m32ytcig5ha5" path="res://resources/item_resource.gd" id="2_e6rfx"] | |||||
| [resource] | |||||
| script = ExtResource("2_e6rfx") | |||||
| resource_scene = ExtResource("1_7h82o") | |||||
| id = "007" | |||||
| name = "Torch" | |||||
| amount = 1 | |||||
| description = "A torch to light the way" | |||||
| item_texture = "uid://dknv7amroftm8" | |||||
| metadata/_custom_type_script = "uid://m32ytcig5ha5" | |||||
| @ -0,0 +1,23 @@ | |||||
| [gd_scene load_steps=4 format=3 uid="uid://ccky0w7brcf1l"] | |||||
| [sub_resource type="BoxMesh" id="BoxMesh_ctvck"] | |||||
| size = Vector3(0.1, 0.1, 0.1) | |||||
| [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ctvck"] | |||||
| emission_enabled = true | |||||
| emission = Color(0.846334, 0.776792, 0.275847, 1) | |||||
| emission_energy_multiplier = 8.23 | |||||
| [sub_resource type="BoxMesh" id="BoxMesh_vkm4o"] | |||||
| size = Vector3(0.1, 0.4, 0.1) | |||||
| [node name="Torch" type="Node3D"] | |||||
| [node name="Head" type="MeshInstance3D" parent="."] | |||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.449571, 0) | |||||
| mesh = SubResource("BoxMesh_ctvck") | |||||
| surface_material_override/0 = SubResource("StandardMaterial3D_ctvck") | |||||
| [node name="Base" type="MeshInstance3D" parent="."] | |||||
| transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.19988, 0) | |||||
| mesh = SubResource("BoxMesh_vkm4o") | |||||
| @ -1,32 +0,0 @@ | |||||
| class_name PauseMenu | |||||
| extends Panel | |||||
| @export var save_load_ui: SaveLoadUI | |||||
| func _unhandled_input(event: InputEvent) -> void: | |||||
| if event.is_action_pressed("ui_cancel") and self.visible: | |||||
| hide_menu() | |||||
| elif event.is_action_pressed("ui_cancel") and !self.visible: | |||||
| show_menu() | |||||
| func hide_menu() -> void: | |||||
| SignalManager.close_pause_menu.emit() | |||||
| func show_menu() -> void: | |||||
| SignalManager.open_pause_menu.emit() | |||||
| # Signals | |||||
| func _on_exit_game_button_pressed() -> void: | |||||
| get_tree().quit() | |||||
| func _on_resume_button_pressed() -> void: | |||||
| hide_menu() | |||||
| func _on_settings_button_pressed() -> void: | |||||
| SignalManager.open_settings_menu.emit() | |||||
| func _on_saves_button_pressed() -> void: | |||||
| save_load_ui.open_save_list.emit() | |||||
| @ -1 +0,0 @@ | |||||
| uid://d3ysjgxxmyqpw | |||||
| @ -1,75 +0,0 @@ | |||||
| [gd_scene load_steps=3 format=3 uid="uid://bopvfwcgnnawg"] | |||||
| [ext_resource type="Theme" uid="uid://b5q8b0l6qp1dt" path="res://resources/pause_menu_theme.tres" id="1_6tw0m"] | |||||
| [ext_resource type="Script" uid="uid://d3ysjgxxmyqpw" path="res://scenes/ui/menus/pause_menu.gd" id="2_0lmf7"] | |||||
| [node name="PauseMenu" type="Panel"] | |||||
| process_mode = 3 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme = ExtResource("1_6tw0m") | |||||
| script = ExtResource("2_0lmf7") | |||||
| [node name="Background" type="ColorRect" parent="."] | |||||
| custom_minimum_size = Vector2(400, 0) | |||||
| layout_mode = 1 | |||||
| anchors_preset = 13 | |||||
| anchor_left = 0.5 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| color = Color(0.192157, 0.239216, 0.352941, 1) | |||||
| [node name="MarginContainer" type="MarginContainer" parent="Background"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_constants/margin_left = 10 | |||||
| theme_override_constants/margin_top = 10 | |||||
| theme_override_constants/margin_right = 10 | |||||
| theme_override_constants/margin_bottom = 10 | |||||
| [node name="MenuContainer" type="VBoxContainer" parent="Background/MarginContainer"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 4 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="Title" type="Label" parent="Background/MarginContainer/MenuContainer"] | |||||
| layout_mode = 2 | |||||
| theme_override_font_sizes/font_size = 40 | |||||
| text = "Paused" | |||||
| horizontal_alignment = 1 | |||||
| vertical_alignment = 1 | |||||
| [node name="ButtonsContainer" type="VBoxContainer" parent="Background/MarginContainer/MenuContainer"] | |||||
| layout_mode = 2 | |||||
| size_flags_vertical = 6 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="ResumeButton" type="Button" parent="Background/MarginContainer/MenuContainer/ButtonsContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Resume" | |||||
| [node name="SavesButton" type="Button" parent="Background/MarginContainer/MenuContainer/ButtonsContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Saves" | |||||
| [node name="SettingsButton" type="Button" parent="Background/MarginContainer/MenuContainer/ButtonsContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Settings" | |||||
| [node name="ExitGameButton" type="Button" parent="Background/MarginContainer/MenuContainer/ButtonsContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Exit Game" | |||||
| [connection signal="pressed" from="Background/MarginContainer/MenuContainer/ButtonsContainer/ResumeButton" to="." method="_on_resume_button_pressed"] | |||||
| [connection signal="pressed" from="Background/MarginContainer/MenuContainer/ButtonsContainer/SavesButton" to="." method="_on_saves_button_pressed"] | |||||
| [connection signal="pressed" from="Background/MarginContainer/MenuContainer/ButtonsContainer/SettingsButton" to="." method="_on_settings_button_pressed"] | |||||
| [connection signal="pressed" from="Background/MarginContainer/MenuContainer/ButtonsContainer/ExitGameButton" to="." method="_on_exit_game_button_pressed"] | |||||
| @ -1 +0,0 @@ | |||||
| uid://b6831eygibii7 | |||||
| @ -1,133 +0,0 @@ | |||||
| [gd_scene load_steps=7 format=3 uid="uid://dauchkhmnyk7n"] | |||||
| [ext_resource type="Script" uid="uid://b6831eygibii7" path="res://scenes/ui/menus/saves_manager/save_load_ui.gd" id="1_lo08d"] | |||||
| [ext_resource type="PackedScene" uid="uid://cyxieflejsggu" path="res://scenes/ui/menus/saves_manager/save_files_list.tscn" id="1_tqtxm"] | |||||
| [ext_resource type="PackedScene" uid="uid://bb7poutsn4ex2" path="res://scenes/ui/menus/saves_manager/save_file.tscn" id="2_6uxbh"] | |||||
| [ext_resource type="Texture2D" uid="uid://ja8bc1h5x85o" path="res://assets/ui/save-normal.png" id="3_lo08d"] | |||||
| [ext_resource type="Texture2D" uid="uid://crqgyft4gfilt" path="res://assets/ui/save-pressed.png" id="4_md7la"] | |||||
| [ext_resource type="Texture2D" uid="uid://o3l0j53mgkan" path="res://assets/ui/save-hover.png" id="5_hmxxn"] | |||||
| [node name="SaveLoadUI" type="Control" node_paths=PackedStringArray("show_save_ui_button", "new_save_ui", "save_name_input", "create_save_button", "create_save_cancel_button")] | |||||
| process_mode = 3 | |||||
| layout_mode = 3 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| size_flags_horizontal = 6 | |||||
| size_flags_vertical = 4 | |||||
| script = ExtResource("1_lo08d") | |||||
| show_save_ui_button = NodePath("Panel/MarginContainer/VBoxContainer/BottomRow/SaveButton") | |||||
| new_save_ui = NodePath("Panel/NewSaveUI") | |||||
| save_name_input = NodePath("Panel/NewSaveUI/MarginContainer/VBoxContainer/SaveNameInput") | |||||
| create_save_button = NodePath("Panel/NewSaveUI/MarginContainer/VBoxContainer/SaveButton") | |||||
| create_save_cancel_button = NodePath("Panel/NewSaveUI/MarginContainer/VBoxContainer/CancelButton") | |||||
| [node name="Panel" type="Panel" parent="."] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="Panel"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_constants/margin_left = 20 | |||||
| theme_override_constants/margin_top = 20 | |||||
| theme_override_constants/margin_right = 20 | |||||
| theme_override_constants/margin_bottom = 20 | |||||
| [node name="VBoxContainer" type="VBoxContainer" parent="Panel/MarginContainer"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Panel/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| theme_override_font_sizes/font_size = 40 | |||||
| text = "Save/Load Game" | |||||
| horizontal_alignment = 1 | |||||
| [node name="ScrollContainer" type="ScrollContainer" parent="Panel/MarginContainer/VBoxContainer"] | |||||
| custom_minimum_size = Vector2(0, 500) | |||||
| layout_mode = 2 | |||||
| horizontal_scroll_mode = 0 | |||||
| [node name="SaveFilesList" parent="Panel/MarginContainer/VBoxContainer/ScrollContainer" node_paths=PackedStringArray("save_load_ui") instance=ExtResource("1_tqtxm")] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 6 | |||||
| save_load_ui = NodePath("../../../../..") | |||||
| [node name="SaveFilePanel" parent="Panel/MarginContainer/VBoxContainer/ScrollContainer/SaveFilesList" instance=ExtResource("2_6uxbh")] | |||||
| layout_mode = 2 | |||||
| [node name="BottomRow" type="HBoxContainer" parent="Panel/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| alignment = 1 | |||||
| [node name="SaveButton" type="TextureButton" parent="Panel/MarginContainer/VBoxContainer/BottomRow"] | |||||
| clip_contents = true | |||||
| custom_minimum_size = Vector2(32, 32) | |||||
| layout_mode = 2 | |||||
| tooltip_text = "New Save" | |||||
| texture_normal = ExtResource("3_lo08d") | |||||
| texture_pressed = ExtResource("4_md7la") | |||||
| texture_hover = ExtResource("5_hmxxn") | |||||
| ignore_texture_size = true | |||||
| stretch_mode = 5 | |||||
| [node name="NewSaveUI" type="Panel" parent="Panel"] | |||||
| visible = false | |||||
| custom_minimum_size = Vector2(450, 100) | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="Panel/NewSaveUI"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 8 | |||||
| anchor_left = 0.5 | |||||
| anchor_top = 0.5 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 0.5 | |||||
| offset_left = -205.0 | |||||
| offset_top = -29.5 | |||||
| offset_right = 205.0 | |||||
| offset_bottom = 29.5 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_constants/margin_left = 5 | |||||
| theme_override_constants/margin_top = 5 | |||||
| theme_override_constants/margin_right = 5 | |||||
| theme_override_constants/margin_bottom = 5 | |||||
| [node name="VBoxContainer" type="VBoxContainer" parent="Panel/NewSaveUI/MarginContainer"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 4 | |||||
| size_flags_vertical = 4 | |||||
| [node name="SaveNameLabel" type="Label" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| theme_override_font_sizes/font_size = 20 | |||||
| text = "Create New Save" | |||||
| [node name="SaveNameInput" type="LineEdit" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] | |||||
| custom_minimum_size = Vector2(400, 0) | |||||
| layout_mode = 2 | |||||
| placeholder_text = "New Save File Name" | |||||
| [node name="SaveButton" type="Button" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Create Save" | |||||
| [node name="CancelButton" type="Button" parent="Panel/NewSaveUI/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Cancel" | |||||
| @ -1 +0,0 @@ | |||||
| uid://37ftrpj14msn | |||||
| @ -1,266 +0,0 @@ | |||||
| [gd_scene load_steps=4 format=3 uid="uid://4bdgwwx27m71"] | |||||
| [ext_resource type="Script" uid="uid://37ftrpj14msn" path="res://scenes/ui/menus/settings_menu.gd" id="1_qwcqe"] | |||||
| [ext_resource type="Theme" uid="uid://b5q8b0l6qp1dt" path="res://resources/pause_menu_theme.tres" id="2_mhswj"] | |||||
| [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_80b2v"] | |||||
| content_margin_left = 10.0 | |||||
| content_margin_top = 10.0 | |||||
| content_margin_right = 10.0 | |||||
| content_margin_bottom = 10.0 | |||||
| bg_color = Color(0, 0, 0, 0.27451) | |||||
| corner_radius_top_left = 2 | |||||
| corner_radius_top_right = 2 | |||||
| corner_radius_bottom_right = 2 | |||||
| corner_radius_bottom_left = 2 | |||||
| [node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "screenshot_icon_input", "waila_input", "resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label")] | |||||
| process_mode = 3 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| script = ExtResource("1_qwcqe") | |||||
| block_highlight_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton") | |||||
| held_block_ui_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI/CheckButton") | |||||
| quick_slots_ui_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI/CheckButton") | |||||
| screenshot_icon_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/ScreenshotIcon/CheckButton") | |||||
| waila_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila/CheckButton") | |||||
| resolution_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution/OptionButton") | |||||
| fullscreen_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen/CheckBox") | |||||
| vsync_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync/CheckBox") | |||||
| fov_slider = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider") | |||||
| fov_value_label = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/Value") | |||||
| metadata/_edit_vertical_guides_ = [349.0] | |||||
| [node name="Background" type="ColorRect" parent="."] | |||||
| custom_minimum_size = Vector2(400, 0) | |||||
| layout_mode = 1 | |||||
| anchors_preset = 13 | |||||
| anchor_left = 0.5 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| color = Color(0.192157, 0.239216, 0.352941, 1) | |||||
| [node name="MarginContainer" type="MarginContainer" parent="Background"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_constants/margin_left = 10 | |||||
| theme_override_constants/margin_top = 10 | |||||
| theme_override_constants/margin_right = 10 | |||||
| theme_override_constants/margin_bottom = 10 | |||||
| [node name="VBoxContainer" type="VBoxContainer" parent="Background/MarginContainer"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 4 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="Title" type="Label" parent="Background/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| theme_override_font_sizes/font_size = 40 | |||||
| text = "Settings" | |||||
| horizontal_alignment = 1 | |||||
| [node name="TabContainer" type="TabContainer" parent="Background/MarginContainer/VBoxContainer"] | |||||
| layout_mode = 2 | |||||
| theme_override_constants/side_margin = 0 | |||||
| theme_override_styles/panel = SubResource("StyleBoxFlat_80b2v") | |||||
| current_tab = 0 | |||||
| clip_tabs = false | |||||
| [node name="Game" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 0 | |||||
| [node name="BlockHighlight" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Block Highlighting" | |||||
| [node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="Waila" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Waila" | |||||
| [node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="QuickslotsUI" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Quickslots UI" | |||||
| [node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="HeldBlockUI" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Player Held Block" | |||||
| [node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="ScreenshotIcon" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/ScreenshotIcon"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." | |||||
| mouse_filter = 1 | |||||
| text = "Enable Save Screenshot" | |||||
| [node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/ScreenshotIcon"] | |||||
| layout_mode = 2 | |||||
| tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." | |||||
| button_pressed = true | |||||
| [node name="Graphics" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] | |||||
| visible = false | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 1 | |||||
| [node name="Resolution" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Resolution" | |||||
| [node name="OptionButton" type="OptionButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Resolution"] | |||||
| layout_mode = 2 | |||||
| selected = 0 | |||||
| item_count = 6 | |||||
| popup/item_0/text = "1280x720" | |||||
| popup/item_0/id = 0 | |||||
| popup/item_1/text = "1280x800" | |||||
| popup/item_1/id = 4 | |||||
| popup/item_2/text = "1920x1080" | |||||
| popup/item_2/id = 1 | |||||
| popup/item_3/text = "2560x1440" | |||||
| popup/item_3/id = 2 | |||||
| popup/item_4/text = "3440x1440" | |||||
| popup/item_4/id = 3 | |||||
| popup/item_5/text = "3840 x 2160" | |||||
| popup/item_5/id = 5 | |||||
| [node name="Fullscreen" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Fullscreen" | |||||
| [node name="CheckBox" type="CheckBox" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/Fullscreen"] | |||||
| layout_mode = 2 | |||||
| [node name="VSync" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "VSync" | |||||
| [node name="CheckBox" type="CheckBox" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/VSync"] | |||||
| layout_mode = 2 | |||||
| [node name="FOV" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "FOV" | |||||
| [node name="HSlider" type="HSlider" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| min_value = 60.0 | |||||
| max_value = 120.0 | |||||
| value = 75.0 | |||||
| rounded = true | |||||
| ticks_on_borders = true | |||||
| [node name="Value" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV"] | |||||
| layout_mode = 2 | |||||
| text = "75" | |||||
| [node name="HSeparator" type="HSeparator" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] | |||||
| layout_mode = 2 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="CenterContainer" type="CenterContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics"] | |||||
| layout_mode = 2 | |||||
| [node name="ApplyButton" type="Button" parent="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer"] | |||||
| layout_mode = 2 | |||||
| text = "Apply/Save" | |||||
| [node name="Audio" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] | |||||
| visible = false | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 2 | |||||
| [node name="Inputs" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] | |||||
| visible = false | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 3 | |||||
| [node name="BottomRow" type="MarginContainer" parent="Background"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 7 | |||||
| anchor_left = 0.5 | |||||
| anchor_top = 1.0 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 1.0 | |||||
| offset_left = -82.5 | |||||
| offset_top = -46.0 | |||||
| offset_right = 82.5 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 0 | |||||
| theme_override_constants/margin_bottom = 10 | |||||
| [node name="CloseButton" type="Button" parent="Background/BottomRow"] | |||||
| custom_minimum_size = Vector2(141, 36) | |||||
| layout_mode = 2 | |||||
| theme = ExtResource("2_mhswj") | |||||
| text = "Close Settings" | |||||
| [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton" to="." method="_on_block_highlighting_toggled"] | |||||
| [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/Waila/CheckButton" to="." method="_on_enable_waila_toggled"] | |||||
| [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI/CheckButton" to="." method="_on_quickslots_ui_toggled"] | |||||
| [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI/CheckButton" to="." method="_on_held_block_ui_toggled"] | |||||
| [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/ScreenshotIcon/CheckButton" to="." method="_on_screenshot_icon_button_toggled"] | |||||
| [connection signal="value_changed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider" to="." method="_on_fov_slider_changed"] | |||||
| [connection signal="pressed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer/ApplyButton" to="." method="_on_graphics_apply_button_pressed"] | |||||
| [connection signal="pressed" from="Background/BottomRow/CloseButton" to="." method="_on_close_button_pressed"] | |||||
| @ -0,0 +1,33 @@ | |||||
| class_name BaseMenu | |||||
| extends ColorRect | |||||
| @export var animation_player: AnimationPlayer | |||||
| var pause_menu: PauseMenu | |||||
| func init() -> void: | |||||
| reset_menu() | |||||
| update_animation_tracks() | |||||
| func close_menu() -> void: | |||||
| animation_player.play("hide") | |||||
| func open_menu() -> void: | |||||
| animation_player.play("show") | |||||
| func reset_menu() -> void: | |||||
| animation_player.play("RESET") | |||||
| ## Update the animation tracks to account for the varying sizes of the menu container[br] | |||||
| ## Requires:[br] | |||||
| ## Track 1 - Must be for the content_container[br] | |||||
| ## First Property - Must be position[br] | |||||
| ## Second Property - Visibility | |||||
| func update_animation_tracks() -> void: | |||||
| var hide_animation: Animation = animation_player.get_animation("hide") | |||||
| var show_animation: Animation = animation_player.get_animation("show") | |||||
| hide_animation.track_set_key_value(0, 1, Vector2(-size.x, hide_animation.track_get_key_value(0, 1).y)) | |||||
| show_animation.track_set_key_value(0, 0, Vector2(-size.x, show_animation.track_get_key_value(0, 0).y)) | |||||
| @ -0,0 +1 @@ | |||||
| uid://c71f7fatmvsra | |||||
| @ -0,0 +1,152 @@ | |||||
| [gd_scene load_steps=7 format=3 uid="uid://4itp2hjp14n2"] | |||||
| [ext_resource type="Theme" uid="uid://b5q8b0l6qp1dt" path="res://resources/pause_menu_theme.tres" id="1_3sxei"] | |||||
| [ext_resource type="Script" uid="uid://c71f7fatmvsra" path="res://scenes/ui/pause_menu/base_menu.gd" id="2_3sxei"] | |||||
| [sub_resource type="Animation" id="Animation_vx2qe"] | |||||
| length = 0.001 | |||||
| tracks/0/type = "value" | |||||
| tracks/0/imported = false | |||||
| tracks/0/enabled = true | |||||
| tracks/0/path = NodePath(".:position") | |||||
| tracks/0/interp = 1 | |||||
| tracks/0/loop_wrap = true | |||||
| tracks/0/keys = { | |||||
| "times": PackedFloat32Array(0), | |||||
| "transitions": PackedFloat32Array(1), | |||||
| "update": 0, | |||||
| "values": [Vector2(-400, 0)] | |||||
| } | |||||
| tracks/1/type = "value" | |||||
| tracks/1/imported = false | |||||
| tracks/1/enabled = true | |||||
| tracks/1/path = NodePath(".:visible") | |||||
| tracks/1/interp = 1 | |||||
| tracks/1/loop_wrap = true | |||||
| tracks/1/keys = { | |||||
| "times": PackedFloat32Array(0), | |||||
| "transitions": PackedFloat32Array(1), | |||||
| "update": 1, | |||||
| "values": [false] | |||||
| } | |||||
| [sub_resource type="Animation" id="Animation_q12vw"] | |||||
| resource_name = "hide" | |||||
| length = 0.2 | |||||
| step = 0.05 | |||||
| tracks/0/type = "value" | |||||
| tracks/0/imported = false | |||||
| tracks/0/enabled = true | |||||
| tracks/0/path = NodePath(".:position") | |||||
| tracks/0/interp = 1 | |||||
| tracks/0/loop_wrap = true | |||||
| tracks/0/keys = { | |||||
| "times": PackedFloat32Array(0, 0.2), | |||||
| "transitions": PackedFloat32Array(1, 1), | |||||
| "update": 0, | |||||
| "values": [Vector2(0, 0), Vector2(-400, 0)] | |||||
| } | |||||
| tracks/1/type = "value" | |||||
| tracks/1/imported = false | |||||
| tracks/1/enabled = true | |||||
| tracks/1/path = NodePath(".:visible") | |||||
| tracks/1/interp = 1 | |||||
| tracks/1/loop_wrap = true | |||||
| tracks/1/keys = { | |||||
| "times": PackedFloat32Array(0, 0.2), | |||||
| "transitions": PackedFloat32Array(1, 1), | |||||
| "update": 1, | |||||
| "values": [true, false] | |||||
| } | |||||
| [sub_resource type="Animation" id="Animation_3mo8w"] | |||||
| resource_name = "show" | |||||
| length = 0.2 | |||||
| step = 0.05 | |||||
| tracks/0/type = "value" | |||||
| tracks/0/imported = false | |||||
| tracks/0/enabled = true | |||||
| tracks/0/path = NodePath(".:position") | |||||
| tracks/0/interp = 1 | |||||
| tracks/0/loop_wrap = true | |||||
| tracks/0/keys = { | |||||
| "times": PackedFloat32Array(0, 0.2), | |||||
| "transitions": PackedFloat32Array(1, 1), | |||||
| "update": 0, | |||||
| "values": [Vector2(-400, 0), Vector2(0, 0)] | |||||
| } | |||||
| tracks/1/type = "value" | |||||
| tracks/1/imported = false | |||||
| tracks/1/enabled = true | |||||
| tracks/1/path = NodePath(".:visible") | |||||
| tracks/1/interp = 1 | |||||
| tracks/1/loop_wrap = true | |||||
| tracks/1/keys = { | |||||
| "times": PackedFloat32Array(0), | |||||
| "transitions": PackedFloat32Array(1), | |||||
| "update": 1, | |||||
| "values": [true] | |||||
| } | |||||
| [sub_resource type="AnimationLibrary" id="AnimationLibrary_q12vw"] | |||||
| _data = { | |||||
| &"RESET": SubResource("Animation_vx2qe"), | |||||
| &"hide": SubResource("Animation_q12vw"), | |||||
| &"show": SubResource("Animation_3mo8w") | |||||
| } | |||||
| [node name="BaseMenu" type="ColorRect" node_paths=PackedStringArray("animation_player")] | |||||
| custom_minimum_size = Vector2(400, 0) | |||||
| anchors_preset = 9 | |||||
| anchor_bottom = 1.0 | |||||
| offset_left = -400.0 | |||||
| grow_vertical = 2 | |||||
| theme = ExtResource("1_3sxei") | |||||
| color = Color(0.133333, 0.133333, 0.133333, 0.784314) | |||||
| script = ExtResource("2_3sxei") | |||||
| animation_player = NodePath("AnimationPlayer") | |||||
| [node name="AnimationPlayer" type="AnimationPlayer" parent="."] | |||||
| reset_on_save = false | |||||
| libraries = { | |||||
| &"": SubResource("AnimationLibrary_q12vw") | |||||
| } | |||||
| autoplay = "show" | |||||
| [node name="MainContent" type="MarginContainer" parent="."] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_constants/margin_left = 10 | |||||
| theme_override_constants/margin_top = 10 | |||||
| theme_override_constants/margin_right = 10 | |||||
| theme_override_constants/margin_bottom = 10 | |||||
| [node name="MenuContainer" type="VBoxContainer" parent="MainContent"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 4 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="Title" type="Label" parent="MainContent/MenuContainer"] | |||||
| layout_mode = 2 | |||||
| theme_type_variation = &"MenuTitle" | |||||
| text = "Menu Title" | |||||
| horizontal_alignment = 1 | |||||
| vertical_alignment = 1 | |||||
| [node name="BottomRow" type="MarginContainer" parent="."] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 7 | |||||
| anchor_left = 0.5 | |||||
| anchor_top = 1.0 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 1.0 | |||||
| offset_left = -82.5 | |||||
| offset_top = -46.0 | |||||
| offset_right = 82.5 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 0 | |||||
| theme_override_constants/margin_bottom = 10 | |||||
| @ -0,0 +1,16 @@ | |||||
| class_name PauseMenuMain | |||||
| extends BaseMenu | |||||
| # Signals | |||||
| func _on_exit_game_button_pressed() -> void: | |||||
| get_tree().quit() | |||||
| func _on_resume_button_pressed() -> void: | |||||
| close_menu() | |||||
| func _on_saves_button_pressed() -> void: | |||||
| pause_menu.open_menu.emit("SavesMenu") | |||||
| func _on_settings_button_pressed() -> void: | |||||
| pause_menu.open_menu.emit("SettingsMenu") | |||||
| @ -0,0 +1 @@ | |||||
| uid://bwvwpiwhp52e | |||||
| @ -0,0 +1,36 @@ | |||||
| [gd_scene load_steps=3 format=3 uid="uid://xy8pdtxcepqf"] | |||||
| [ext_resource type="PackedScene" uid="uid://4itp2hjp14n2" path="res://scenes/ui/pause_menu/base_menu.tscn" id="1_6fgdx"] | |||||
| [ext_resource type="Script" uid="uid://bwvwpiwhp52e" path="res://scenes/ui/pause_menu/main_menu.gd" id="2_4i143"] | |||||
| [node name="MainMenu" instance=ExtResource("1_6fgdx")] | |||||
| script = ExtResource("2_4i143") | |||||
| [node name="Title" parent="MainContent/MenuContainer" index="0"] | |||||
| text = "Paused" | |||||
| [node name="ButtonsContainer" type="VBoxContainer" parent="MainContent/MenuContainer" index="1"] | |||||
| layout_mode = 2 | |||||
| size_flags_vertical = 6 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="ResumeButton" type="Button" parent="MainContent/MenuContainer/ButtonsContainer" index="0"] | |||||
| layout_mode = 2 | |||||
| text = "Resume" | |||||
| [node name="SavesButton" type="Button" parent="MainContent/MenuContainer/ButtonsContainer" index="1"] | |||||
| layout_mode = 2 | |||||
| text = "Saves" | |||||
| [node name="SettingsButton" type="Button" parent="MainContent/MenuContainer/ButtonsContainer" index="2"] | |||||
| layout_mode = 2 | |||||
| text = "Settings" | |||||
| [node name="ExitGameButton" type="Button" parent="MainContent/MenuContainer/ButtonsContainer" index="3"] | |||||
| layout_mode = 2 | |||||
| text = "Exit Game" | |||||
| [connection signal="pressed" from="MainContent/MenuContainer/ButtonsContainer/ResumeButton" to="." method="_on_resume_button_pressed"] | |||||
| [connection signal="pressed" from="MainContent/MenuContainer/ButtonsContainer/SavesButton" to="." method="_on_saves_button_pressed"] | |||||
| [connection signal="pressed" from="MainContent/MenuContainer/ButtonsContainer/SettingsButton" to="." method="_on_settings_button_pressed"] | |||||
| [connection signal="pressed" from="MainContent/MenuContainer/ButtonsContainer/ExitGameButton" to="." method="_on_exit_game_button_pressed"] | |||||
| @ -0,0 +1,87 @@ | |||||
| ## Handle changing changing menus and running the show/hide animations for each menu. | |||||
| ## Each menu should extend BaseMenu | |||||
| class_name PauseMenu | |||||
| extends Panel | |||||
| signal open_menu(menu_name: String) | |||||
| @onready var menu_mapping: Dictionary[String, BaseMenu] = { | |||||
| "MainMenu": $MainMenu, | |||||
| "SettingsMenu": $SettingsMenu, | |||||
| "SavesMenu": $SavesMenu, | |||||
| } | |||||
| var _active_menu: String = "MainMenu" | |||||
| var _next_menu: String = "" | |||||
| func _ready() -> void: | |||||
| open_menu.connect(_on_change_menu) | |||||
| for menu: BaseMenu in get_children(): | |||||
| menu.animation_player.animation_finished.connect(_on_animation_finished) | |||||
| menu.pause_menu = self | |||||
| menu.init() | |||||
| SaveGameManager.create_save.connect(_on_create_save) | |||||
| SaveGameManager.load_save.connect(_on_load_save) | |||||
| func _unhandled_input(event: InputEvent) -> void: | |||||
| if event.is_action_pressed("ui_cancel") and !visible: | |||||
| _open_pause_menu() | |||||
| elif event.is_action_pressed("ui_cancel") and visible and _active_menu == "MainMenu": | |||||
| menu_mapping["MainMenu"].animation_player.play("hide") | |||||
| elif event.is_action_pressed("ui_cancel"): ## Always back out to the MainMenu - Future, maybe add _previous_menu to allow backing out to any menu | |||||
| open_menu.emit("MainMenu") | |||||
| ## Start the `hide` animation for the current menu. | |||||
| ## The `show` animation will play after the `hide` has completed, from `_on_animation_finished()`. | |||||
| func _change_menu(menu_name: String) -> void: | |||||
| visible = true | |||||
| _next_menu = menu_name | |||||
| if _next_menu == "": | |||||
| menu_mapping["MainMenu"].animation_player.play("hide") | |||||
| else: | |||||
| menu_mapping[_active_menu].animation_player.play("hide") | |||||
| func _close_pause_menu() -> void: | |||||
| visible = false | |||||
| _next_menu = "" | |||||
| Input.mouse_mode = Input.MOUSE_MODE_CAPTURED | |||||
| SignalManager.resume_game.emit() | |||||
| ## Run the `show` animation for the next menu | |||||
| ## If there is no next menu, close the pause menu | |||||
| func _handle_next_menu() -> void: | |||||
| if _next_menu == "": | |||||
| _active_menu = "MainMenu" | |||||
| _close_pause_menu() | |||||
| else: | |||||
| _active_menu = _next_menu | |||||
| _next_menu = "" | |||||
| menu_mapping[_active_menu].animation_player.play("show") | |||||
| func _open_pause_menu() -> void: | |||||
| Input.mouse_mode = Input.MOUSE_MODE_VISIBLE | |||||
| SignalManager.pause_game.emit() | |||||
| menu_mapping["MainMenu"].animation_player.play("show") | |||||
| ## When the hide animation finished, start show `show` animation for the next menu | |||||
| func _on_animation_finished(animation_name: String) -> void: | |||||
| if animation_name == "hide": | |||||
| _handle_next_menu() | |||||
| func _on_change_menu(menu_name: String) -> void: | |||||
| _change_menu(menu_name) | |||||
| func _on_create_save(_save: String) -> void: | |||||
| menu_mapping["SavesMenu"].reset_menu() | |||||
| _close_pause_menu() | |||||
| func _on_load_save(_save: String) -> void: | |||||
| menu_mapping["SavesMenu"].reset_menu() | |||||
| _close_pause_menu() | |||||
| @ -0,0 +1 @@ | |||||
| uid://domfn2obgmavw | |||||
| @ -0,0 +1,37 @@ | |||||
| [gd_scene load_steps=6 format=3 uid="uid://by0gd600mbcr5"] | |||||
| [ext_resource type="Script" uid="uid://domfn2obgmavw" path="res://scenes/ui/pause_menu/pause_menu.gd" id="1_ugqbi"] | |||||
| [ext_resource type="PackedScene" uid="uid://xy8pdtxcepqf" path="res://scenes/ui/pause_menu/main_menu.tscn" id="2_rv5mv"] | |||||
| [ext_resource type="PackedScene" uid="uid://uwlutbmfp8dv" path="res://scenes/ui/pause_menu/settings_menu.tscn" id="3_rv5mv"] | |||||
| [ext_resource type="PackedScene" uid="uid://dq83yv2um7sci" path="res://scenes/ui/pause_menu/saves_menu.tscn" id="4_rv5mv"] | |||||
| [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_4xojl"] | |||||
| bg_color = Color(0.176419, 0.176419, 0.176419, 0.462745) | |||||
| [node name="PauseMenu" type="Panel"] | |||||
| process_mode = 3 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_styles/panel = SubResource("StyleBoxFlat_4xojl") | |||||
| script = ExtResource("1_ugqbi") | |||||
| [node name="MainMenu" parent="." instance=ExtResource("2_rv5mv")] | |||||
| visible = false | |||||
| layout_mode = 1 | |||||
| offset_left = 0.0 | |||||
| offset_right = 400.0 | |||||
| [node name="SettingsMenu" parent="." instance=ExtResource("3_rv5mv")] | |||||
| visible = false | |||||
| layout_mode = 1 | |||||
| offset_left = 0.0 | |||||
| offset_right = 400.0 | |||||
| [node name="SavesMenu" parent="." instance=ExtResource("4_rv5mv")] | |||||
| visible = false | |||||
| layout_mode = 1 | |||||
| offset_left = 0.0 | |||||
| offset_right = 450.0 | |||||
| @ -1,7 +1,7 @@ | |||||
| [gd_scene load_steps=3 format=3 uid="uid://cyxieflejsggu"] | [gd_scene load_steps=3 format=3 uid="uid://cyxieflejsggu"] | ||||
| [ext_resource type="Script" uid="uid://cqabj86bq8whn" path="res://scenes/ui/menus/saves_manager/save_files_list.gd" id="1_sh1p7"] | |||||
| [ext_resource type="PackedScene" uid="uid://bb7poutsn4ex2" path="res://scenes/ui/menus/saves_manager/save_file.tscn" id="2_kb5u8"] | |||||
| [ext_resource type="Script" uid="uid://cqabj86bq8whn" path="res://scenes/ui/pause_menu/saves_manager/save_files_list.gd" id="1_sh1p7"] | |||||
| [ext_resource type="PackedScene" uid="uid://bb7poutsn4ex2" path="res://scenes/ui/pause_menu/saves_manager/save_file.tscn" id="2_kb5u8"] | |||||
| [node name="SaveFilesList" type="VBoxContainer"] | [node name="SaveFilesList" type="VBoxContainer"] | ||||
| clip_contents = true | clip_contents = true | ||||
| @ -0,0 +1 @@ | |||||
| uid://di8dm3fdxfwo1 | |||||
| @ -0,0 +1,97 @@ | |||||
| [gd_scene load_steps=8 format=3 uid="uid://dq83yv2um7sci"] | |||||
| [ext_resource type="PackedScene" uid="uid://4itp2hjp14n2" path="res://scenes/ui/pause_menu/base_menu.tscn" id="1_i4hg7"] | |||||
| [ext_resource type="Script" uid="uid://di8dm3fdxfwo1" path="res://scenes/ui/pause_menu/saves_menu.gd" id="2_q3hp2"] | |||||
| [ext_resource type="PackedScene" uid="uid://cyxieflejsggu" path="res://scenes/ui/pause_menu/saves_manager/save_files_list.tscn" id="3_0ok72"] | |||||
| [ext_resource type="Texture2D" uid="uid://ja8bc1h5x85o" path="res://assets/ui/save-normal.png" id="3_urnjr"] | |||||
| [ext_resource type="Texture2D" uid="uid://crqgyft4gfilt" path="res://assets/ui/save-pressed.png" id="4_31dcc"] | |||||
| [ext_resource type="PackedScene" uid="uid://bb7poutsn4ex2" path="res://scenes/ui/pause_menu/saves_manager/save_file.tscn" id="4_v5wg2"] | |||||
| [ext_resource type="Texture2D" uid="uid://o3l0j53mgkan" path="res://assets/ui/save-hover.png" id="5_0ok72"] | |||||
| [node name="SavesMenu" node_paths=PackedStringArray("show_save_ui_button", "new_save_ui", "save_name_input", "create_save_button", "create_save_cancel_button", "save_files_list_ui") instance=ExtResource("1_i4hg7")] | |||||
| custom_minimum_size = Vector2(450, 0) | |||||
| offset_left = -450.0 | |||||
| script = ExtResource("2_q3hp2") | |||||
| show_save_ui_button = NodePath("BottomRow/SaveButton") | |||||
| new_save_ui = NodePath("NewSaveUI") | |||||
| save_name_input = NodePath("NewSaveUI/MarginContainer/VBoxContainer/SaveNameInput") | |||||
| create_save_button = NodePath("NewSaveUI/MarginContainer/VBoxContainer/SaveButton") | |||||
| create_save_cancel_button = NodePath("NewSaveUI/MarginContainer/VBoxContainer/CancelButton") | |||||
| save_files_list_ui = NodePath("MainContent/MenuContainer/ScrollContainer/SaveFilesList") | |||||
| [node name="Title" parent="MainContent/MenuContainer" index="0"] | |||||
| text = "Save/Load Game" | |||||
| [node name="ScrollContainer" type="ScrollContainer" parent="MainContent/MenuContainer" index="1"] | |||||
| custom_minimum_size = Vector2(0, 500) | |||||
| layout_mode = 2 | |||||
| horizontal_scroll_mode = 0 | |||||
| [node name="SaveFilesList" parent="MainContent/MenuContainer/ScrollContainer" index="0" instance=ExtResource("3_0ok72")] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 6 | |||||
| [node name="SaveFilePanel" parent="MainContent/MenuContainer/ScrollContainer/SaveFilesList" index="0" instance=ExtResource("4_v5wg2")] | |||||
| layout_mode = 2 | |||||
| [node name="SaveButton" type="TextureButton" parent="BottomRow" index="0"] | |||||
| clip_contents = true | |||||
| custom_minimum_size = Vector2(32, 32) | |||||
| layout_mode = 2 | |||||
| tooltip_text = "New Save" | |||||
| texture_normal = ExtResource("3_urnjr") | |||||
| texture_pressed = ExtResource("4_31dcc") | |||||
| texture_hover = ExtResource("5_0ok72") | |||||
| ignore_texture_size = true | |||||
| stretch_mode = 5 | |||||
| [node name="NewSaveUI" type="Panel" parent="." index="3"] | |||||
| visible = false | |||||
| custom_minimum_size = Vector2(450, 100) | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="NewSaveUI" index="0"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 8 | |||||
| anchor_left = 0.5 | |||||
| anchor_top = 0.5 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 0.5 | |||||
| offset_left = -205.0 | |||||
| offset_top = -29.5 | |||||
| offset_right = 205.0 | |||||
| offset_bottom = 29.5 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 2 | |||||
| theme_override_constants/margin_left = 5 | |||||
| theme_override_constants/margin_top = 5 | |||||
| theme_override_constants/margin_right = 5 | |||||
| theme_override_constants/margin_bottom = 5 | |||||
| [node name="VBoxContainer" type="VBoxContainer" parent="NewSaveUI/MarginContainer" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 4 | |||||
| size_flags_vertical = 4 | |||||
| [node name="SaveNameLabel" type="Label" parent="NewSaveUI/MarginContainer/VBoxContainer" index="0"] | |||||
| layout_mode = 2 | |||||
| theme_override_font_sizes/font_size = 20 | |||||
| text = "Create New Save" | |||||
| [node name="SaveNameInput" type="LineEdit" parent="NewSaveUI/MarginContainer/VBoxContainer" index="1"] | |||||
| custom_minimum_size = Vector2(400, 0) | |||||
| layout_mode = 2 | |||||
| placeholder_text = "New Save File Name" | |||||
| [node name="SaveButton" type="Button" parent="NewSaveUI/MarginContainer/VBoxContainer" index="2"] | |||||
| layout_mode = 2 | |||||
| text = "Create Save" | |||||
| [node name="CancelButton" type="Button" parent="NewSaveUI/MarginContainer/VBoxContainer" index="3"] | |||||
| layout_mode = 2 | |||||
| text = "Cancel" | |||||
| @ -0,0 +1 @@ | |||||
| uid://ccei1q7fb022x | |||||
| @ -0,0 +1,240 @@ | |||||
| [gd_scene load_steps=4 format=3 uid="uid://uwlutbmfp8dv"] | |||||
| [ext_resource type="Script" uid="uid://ccei1q7fb022x" path="res://scenes/ui/pause_menu/settings_menu.gd" id="1_govsn"] | |||||
| [ext_resource type="PackedScene" uid="uid://4itp2hjp14n2" path="res://scenes/ui/pause_menu/base_menu.tscn" id="1_oec81"] | |||||
| [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_830fb"] | |||||
| content_margin_left = 10.0 | |||||
| content_margin_top = 10.0 | |||||
| content_margin_right = 10.0 | |||||
| content_margin_bottom = 10.0 | |||||
| bg_color = Color(0, 0, 0, 0.27451) | |||||
| corner_radius_top_left = 2 | |||||
| corner_radius_top_right = 2 | |||||
| corner_radius_bottom_right = 2 | |||||
| corner_radius_bottom_left = 2 | |||||
| [node name="SettingsMenu" node_paths=PackedStringArray("autosaves_input", "block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "screenshot_icon_input", "waila_input", "fov_slider", "fov_value_label", "resolution_input", "vsync_input", "window_mode_input") instance=ExtResource("1_oec81")] | |||||
| visible = false | |||||
| script = ExtResource("1_govsn") | |||||
| autosaves_input = NodePath("MainContent/MenuContainer/TabContainer/Game/Autosaves/CheckButton") | |||||
| block_highlight_input = NodePath("MainContent/MenuContainer/TabContainer/Game/BlockHighlight/CheckButton") | |||||
| held_block_ui_input = NodePath("MainContent/MenuContainer/TabContainer/Game/HeldBlockUI/CheckButton") | |||||
| quick_slots_ui_input = NodePath("MainContent/MenuContainer/TabContainer/Game/QuickslotsUI/CheckButton") | |||||
| screenshot_icon_input = NodePath("MainContent/MenuContainer/TabContainer/Game/ScreenshotIcon/CheckButton") | |||||
| waila_input = NodePath("MainContent/MenuContainer/TabContainer/Game/Waila/CheckButton") | |||||
| fov_slider = NodePath("MainContent/MenuContainer/TabContainer/Graphics/FOV/HSlider") | |||||
| fov_value_label = NodePath("MainContent/MenuContainer/TabContainer/Graphics/FOV/Value") | |||||
| resolution_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/Resolution/OptionButton") | |||||
| vsync_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/VSync/CheckBox") | |||||
| window_mode_input = NodePath("MainContent/MenuContainer/TabContainer/Graphics/WindowMode/OptionButton") | |||||
| [node name="Title" parent="MainContent/MenuContainer" index="0"] | |||||
| text = "Settings" | |||||
| [node name="TabContainer" type="TabContainer" parent="MainContent/MenuContainer" index="1"] | |||||
| layout_mode = 2 | |||||
| theme_override_constants/side_margin = 0 | |||||
| theme_override_styles/panel = SubResource("StyleBoxFlat_830fb") | |||||
| current_tab = 0 | |||||
| clip_tabs = false | |||||
| [node name="Game" type="VBoxContainer" parent="MainContent/MenuContainer/TabContainer" index="1"] | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 0 | |||||
| [node name="BlockHighlight" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Game" index="0"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Game/BlockHighlight" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Block Highlighting" | |||||
| [node name="CheckButton" type="CheckButton" parent="MainContent/MenuContainer/TabContainer/Game/BlockHighlight" index="1"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="Waila" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Game" index="1"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Game/Waila" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Waila" | |||||
| [node name="CheckButton" type="CheckButton" parent="MainContent/MenuContainer/TabContainer/Game/Waila" index="1"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="QuickslotsUI" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Game" index="2"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Game/QuickslotsUI" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Quickslots UI" | |||||
| [node name="CheckButton" type="CheckButton" parent="MainContent/MenuContainer/TabContainer/Game/QuickslotsUI" index="1"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="HeldBlockUI" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Game" index="3"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Game/HeldBlockUI" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Enable Player Held Block" | |||||
| [node name="CheckButton" type="CheckButton" parent="MainContent/MenuContainer/TabContainer/Game/HeldBlockUI" index="1"] | |||||
| layout_mode = 2 | |||||
| button_pressed = true | |||||
| [node name="ScreenshotIcon" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Game" index="4"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Game/ScreenshotIcon" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." | |||||
| mouse_filter = 1 | |||||
| text = "Enable Save Screenshot" | |||||
| [node name="CheckButton" type="CheckButton" parent="MainContent/MenuContainer/TabContainer/Game/ScreenshotIcon" index="1"] | |||||
| layout_mode = 2 | |||||
| tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." | |||||
| button_pressed = true | |||||
| [node name="Autosaves" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Game" index="5"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Game/Autosaves" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." | |||||
| mouse_filter = 1 | |||||
| text = "Enable Autosaves" | |||||
| [node name="CheckButton" type="CheckButton" parent="MainContent/MenuContainer/TabContainer/Game/Autosaves" index="1"] | |||||
| layout_mode = 2 | |||||
| tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." | |||||
| button_pressed = true | |||||
| [node name="Graphics" type="VBoxContainer" parent="MainContent/MenuContainer/TabContainer" index="2"] | |||||
| visible = false | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 1 | |||||
| [node name="Resolution" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="0"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/Resolution" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Resolution" | |||||
| [node name="OptionButton" type="OptionButton" parent="MainContent/MenuContainer/TabContainer/Graphics/Resolution" index="1"] | |||||
| layout_mode = 2 | |||||
| selected = 0 | |||||
| item_count = 6 | |||||
| popup/item_0/text = "1280x720" | |||||
| popup/item_0/id = 0 | |||||
| popup/item_1/text = "1280x800" | |||||
| popup/item_1/id = 4 | |||||
| popup/item_2/text = "1920x1080" | |||||
| popup/item_2/id = 1 | |||||
| popup/item_3/text = "2560x1440" | |||||
| popup/item_3/id = 2 | |||||
| popup/item_4/text = "3440x1440" | |||||
| popup/item_4/id = 3 | |||||
| popup/item_5/text = "3840 x 2160" | |||||
| popup/item_5/id = 5 | |||||
| [node name="WindowMode" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="1"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/WindowMode" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "Display Mode" | |||||
| [node name="OptionButton" type="OptionButton" parent="MainContent/MenuContainer/TabContainer/Graphics/WindowMode" index="1"] | |||||
| layout_mode = 2 | |||||
| item_count = 4 | |||||
| popup/item_0/text = "Window" | |||||
| popup/item_0/id = 0 | |||||
| popup/item_1/text = "Maximized" | |||||
| popup/item_1/id = 2 | |||||
| popup/item_2/text = "Fullscreen" | |||||
| popup/item_2/id = 3 | |||||
| popup/item_3/text = "Exclusive Fullscreen" | |||||
| popup/item_3/id = 4 | |||||
| [node name="VSync" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="2"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/VSync" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "VSync" | |||||
| [node name="CheckBox" type="CheckBox" parent="MainContent/MenuContainer/TabContainer/Graphics/VSync" index="1"] | |||||
| layout_mode = 2 | |||||
| [node name="FOV" type="HBoxContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="3"] | |||||
| layout_mode = 2 | |||||
| [node name="Label" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/FOV" index="0"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| text = "FOV" | |||||
| [node name="HSlider" type="HSlider" parent="MainContent/MenuContainer/TabContainer/Graphics/FOV" index="1"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 3 | |||||
| min_value = 60.0 | |||||
| max_value = 120.0 | |||||
| value = 75.0 | |||||
| rounded = true | |||||
| ticks_on_borders = true | |||||
| [node name="Value" type="Label" parent="MainContent/MenuContainer/TabContainer/Graphics/FOV" index="2"] | |||||
| layout_mode = 2 | |||||
| text = "75" | |||||
| [node name="HSeparator" type="HSeparator" parent="MainContent/MenuContainer/TabContainer/Graphics" index="4"] | |||||
| layout_mode = 2 | |||||
| theme_override_constants/separation = 20 | |||||
| [node name="CenterContainer" type="CenterContainer" parent="MainContent/MenuContainer/TabContainer/Graphics" index="5"] | |||||
| layout_mode = 2 | |||||
| [node name="ApplyButton" type="Button" parent="MainContent/MenuContainer/TabContainer/Graphics/CenterContainer" index="0"] | |||||
| layout_mode = 2 | |||||
| text = "Apply/Save" | |||||
| [node name="Audio" type="VBoxContainer" parent="MainContent/MenuContainer/TabContainer" index="3"] | |||||
| visible = false | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 2 | |||||
| [node name="Inputs" type="VBoxContainer" parent="MainContent/MenuContainer/TabContainer" index="4"] | |||||
| visible = false | |||||
| layout_mode = 2 | |||||
| metadata/_tab_index = 3 | |||||
| [node name="CloseButton" type="Button" parent="BottomRow" index="0"] | |||||
| custom_minimum_size = Vector2(141, 36) | |||||
| layout_mode = 2 | |||||
| text = "Close Settings" | |||||
| [connection signal="toggled" from="MainContent/MenuContainer/TabContainer/Game/BlockHighlight/CheckButton" to="." method="_on_block_highlighting_toggled"] | |||||
| [connection signal="toggled" from="MainContent/MenuContainer/TabContainer/Game/Waila/CheckButton" to="." method="_on_enable_waila_toggled"] | |||||
| [connection signal="toggled" from="MainContent/MenuContainer/TabContainer/Game/QuickslotsUI/CheckButton" to="." method="_on_quickslots_ui_toggled"] | |||||
| [connection signal="toggled" from="MainContent/MenuContainer/TabContainer/Game/HeldBlockUI/CheckButton" to="." method="_on_held_block_ui_toggled"] | |||||
| [connection signal="toggled" from="MainContent/MenuContainer/TabContainer/Game/ScreenshotIcon/CheckButton" to="." method="_on_screenshot_icon_button_toggled"] | |||||
| [connection signal="toggled" from="MainContent/MenuContainer/TabContainer/Game/Autosaves/CheckButton" to="." method="_on_autosaves_button_toggled"] | |||||
| [connection signal="value_changed" from="MainContent/MenuContainer/TabContainer/Graphics/FOV/HSlider" to="." method="_on_fov_slider_changed"] | |||||
| [connection signal="pressed" from="MainContent/MenuContainer/TabContainer/Graphics/CenterContainer/ApplyButton" to="." method="_on_graphics_apply_button_pressed"] | |||||
| [connection signal="pressed" from="BottomRow/CloseButton" to="." method="_on_close_button_pressed"] | |||||
| @ -1,157 +0,0 @@ | |||||
| [gd_scene load_steps=9 format=3 uid="uid://cbiygbgpfk220"] | |||||
| [ext_resource type="Script" uid="uid://bcq6vexsmyeol" path="res://scenes/ui/quick_slots.gd" id="1_cqw2g"] | |||||
| [ext_resource type="Texture2D" uid="uid://li36txj7oweq" path="res://assets/textures/dirt.png" id="2_kotkb"] | |||||
| [ext_resource type="StyleBox" uid="uid://dlaswvta2mvim" path="res://resources/inventory/quickslot-panel-highlight-stylebox.tres" id="2_ps55n"] | |||||
| [ext_resource type="Texture2D" uid="uid://ct1iawpfkdf5l" path="res://assets/textures/stone.png" id="3_cqw2g"] | |||||
| [ext_resource type="Texture2D" uid="uid://bgo4mb3atmbot" path="res://assets/textures/grass.png" id="3_yyyxx"] | |||||
| [ext_resource type="Texture2D" uid="uid://0mw651622h01" path="res://assets/textures/wood.png" id="4_yyyxx"] | |||||
| [ext_resource type="Texture2D" uid="uid://goygbpyqhych" path="res://assets/textures/leaves.png" id="5_ps55n"] | |||||
| [ext_resource type="Texture2D" uid="uid://cpllegyqnfnrh" path="res://assets/textures/glass.png" id="8_bup65"] | |||||
| [node name="QuickSlots" type="MarginContainer"] | |||||
| anchors_preset = 4 | |||||
| anchor_top = 0.5 | |||||
| anchor_bottom = 0.5 | |||||
| offset_top = -220.0 | |||||
| offset_right = 80.0 | |||||
| offset_bottom = 220.0 | |||||
| grow_vertical = 2 | |||||
| size_flags_horizontal = 0 | |||||
| theme_override_constants/margin_left = 8 | |||||
| theme_override_constants/margin_top = 8 | |||||
| theme_override_constants/margin_right = 8 | |||||
| theme_override_constants/margin_bottom = 8 | |||||
| script = ExtResource("1_cqw2g") | |||||
| highlight_theme = ExtResource("2_ps55n") | |||||
| [node name="GridContainer" type="GridContainer" parent="."] | |||||
| layout_mode = 2 | |||||
| theme_override_constants/h_separation = 8 | |||||
| theme_override_constants/v_separation = 8 | |||||
| [node name="Slot0" type="Panel" parent="GridContainer"] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| layout_mode = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="GridContainer/Slot0"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="GridContainer/Slot0/MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| texture = ExtResource("2_kotkb") | |||||
| [node name="Slot1" type="Panel" parent="GridContainer"] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| layout_mode = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="GridContainer/Slot1"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="GridContainer/Slot1/MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| texture = ExtResource("3_yyyxx") | |||||
| [node name="Slot3" type="Panel" parent="GridContainer"] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| layout_mode = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="GridContainer/Slot3"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="GridContainer/Slot3/MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| texture = ExtResource("3_cqw2g") | |||||
| [node name="Slot4" type="Panel" parent="GridContainer"] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| layout_mode = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="GridContainer/Slot4"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="GridContainer/Slot4/MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| texture = ExtResource("4_yyyxx") | |||||
| [node name="Slot5" type="Panel" parent="GridContainer"] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| layout_mode = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="GridContainer/Slot5"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="GridContainer/Slot5/MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| texture = ExtResource("5_ps55n") | |||||
| [node name="Slot6" type="Panel" parent="GridContainer"] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| layout_mode = 2 | |||||
| [node name="MarginContainer" type="MarginContainer" parent="GridContainer/Slot6"] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="GridContainer/Slot6/MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| texture = ExtResource("8_bup65") | |||||
| @ -0,0 +1,63 @@ | |||||
| [gd_scene load_steps=4 format=3 uid="uid://cbiygbgpfk220"] | |||||
| [ext_resource type="Script" uid="uid://bcq6vexsmyeol" path="res://scenes/ui/quickslots/quick_slots.gd" id="1_cqw2g"] | |||||
| [ext_resource type="StyleBox" uid="uid://dlaswvta2mvim" path="res://resources/inventory/quickslot-panel-highlight-stylebox.tres" id="2_ps55n"] | |||||
| [ext_resource type="PackedScene" uid="uid://c40k8ey6e54v1" path="res://scenes/ui/quickslots/quickslots_slot.tscn" id="3_bup65"] | |||||
| [node name="QuickSlots" type="MarginContainer" node_paths=PackedStringArray("slots_container")] | |||||
| anchors_preset = 7 | |||||
| anchor_left = 0.5 | |||||
| anchor_top = 1.0 | |||||
| anchor_right = 0.5 | |||||
| anchor_bottom = 1.0 | |||||
| offset_left = -364.0 | |||||
| offset_top = -80.0 | |||||
| offset_right = 364.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 0 | |||||
| theme_override_constants/margin_left = 8 | |||||
| theme_override_constants/margin_top = 8 | |||||
| theme_override_constants/margin_right = 8 | |||||
| theme_override_constants/margin_bottom = 8 | |||||
| script = ExtResource("1_cqw2g") | |||||
| highlight_theme = ExtResource("2_ps55n") | |||||
| slots_container = NodePath("SlotsContainer") | |||||
| quickslots_slot = ExtResource("3_bup65") | |||||
| [node name="SlotsContainer" type="GridContainer" parent="."] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 4 | |||||
| size_flags_vertical = 4 | |||||
| theme_override_constants/h_separation = 8 | |||||
| theme_override_constants/v_separation = 8 | |||||
| columns = 10 | |||||
| [node name="Slot0" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot1" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot2" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot3" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot4" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot5" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot6" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot7" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot8" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| [node name="Slot9" parent="SlotsContainer" instance=ExtResource("3_bup65")] | |||||
| layout_mode = 2 | |||||
| @ -0,0 +1,40 @@ | |||||
| class_name QuickSlotsSlot | |||||
| extends Panel | |||||
| @export var amount_label: Label | |||||
| @export var slot_texture: TextureRect | |||||
| var slot_index: int = 0 | |||||
| func _ready() -> void: | |||||
| InventoryManager.inventory_slot_updated.connect(_on_inventory_slot_updated) | |||||
| func init(_slot_index: int) -> void: | |||||
| slot_index = _slot_index | |||||
| refresh() | |||||
| func clear() -> void: | |||||
| slot_texture.texture = null | |||||
| amount_label.text = "" | |||||
| slot_texture.tooltip_text = "" | |||||
| func refresh() -> void: | |||||
| if InventoryManager.inventory.size() < 1: | |||||
| return clear() | |||||
| elif not InventoryManager.inventory.get(slot_index): | |||||
| return clear() | |||||
| elif InventoryManager.inventory[slot_index] == null: | |||||
| return clear() | |||||
| slot_texture.texture = load(InventoryManager.inventory[slot_index].item_texture) | |||||
| amount_label.text = "x" + str(InventoryManager.inventory[slot_index].amount) | |||||
| slot_texture.tooltip_text = InventoryManager.inventory[slot_index].name + "\n" + InventoryManager.inventory[slot_index].description | |||||
| func _on_inventory_slot_updated(_slot_index: int) -> void: | |||||
| if _slot_index != slot_index: return | |||||
| refresh() | |||||
| @ -0,0 +1 @@ | |||||
| uid://cq3yb4beq5f4s | |||||
| @ -0,0 +1,36 @@ | |||||
| [gd_scene load_steps=3 format=3 uid="uid://c40k8ey6e54v1"] | |||||
| [ext_resource type="Script" uid="uid://cq3yb4beq5f4s" path="res://scenes/ui/quickslots/quickslots_slot.gd" id="1_l6jhe"] | |||||
| [sub_resource type="LabelSettings" id="LabelSettings_7oxdy"] | |||||
| outline_size = 3 | |||||
| outline_color = Color(0, 0, 0, 1) | |||||
| [node name="Slot" type="Panel" node_paths=PackedStringArray("amount_label", "slot_texture")] | |||||
| custom_minimum_size = Vector2(64, 64) | |||||
| script = ExtResource("1_l6jhe") | |||||
| amount_label = NodePath("MarginContainer/AmountLabel") | |||||
| slot_texture = NodePath("MarginContainer/TextureRect") | |||||
| [node name="MarginContainer" type="MarginContainer" parent="."] | |||||
| layout_mode = 1 | |||||
| anchors_preset = 15 | |||||
| anchor_right = 1.0 | |||||
| anchor_bottom = 1.0 | |||||
| grow_horizontal = 2 | |||||
| grow_vertical = 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="TextureRect" type="TextureRect" parent="MarginContainer"] | |||||
| texture_filter = 1 | |||||
| layout_mode = 2 | |||||
| expand_mode = 2 | |||||
| [node name="AmountLabel" type="Label" parent="MarginContainer"] | |||||
| layout_mode = 2 | |||||
| size_flags_horizontal = 8 | |||||
| size_flags_vertical = 8 | |||||
| label_settings = SubResource("LabelSettings_7oxdy") | |||||