Browse Source

Initial inventory work

pull/4/head
Ryan Reed 1 month ago
parent
commit
5ee3d3dafa
19 changed files with 232 additions and 1 deletions
  1. +2
    -0
      autoloads/inventory_manager.gd
  2. +5
    -0
      project.godot
  3. +2
    -0
      resources/blocks/001_dirt.tres
  4. +2
    -0
      resources/blocks/002_stone.tres
  5. +2
    -0
      resources/blocks/003_wood.tres
  6. +2
    -0
      resources/blocks/004_leaves.tres
  7. +10
    -0
      resources/inventory/player_inventory_empty.tres
  8. +14
    -0
      resources/inventory/player_inventory_testing.tres
  9. +6
    -0
      resources/inventory_resource.gd
  10. +1
    -0
      resources/inventory_resource.gd.uid
  11. +2
    -0
      resources/item_resource.gd
  12. +68
    -0
      scenes/ui/inventory/inventory.gd
  13. +1
    -0
      scenes/ui/inventory/inventory.gd.uid
  14. +47
    -0
      scenes/ui/inventory/inventory.tscn
  15. +21
    -0
      scenes/ui/inventory/item_rect.gd
  16. +1
    -0
      scenes/ui/inventory/item_rect.gd.uid
  17. +38
    -0
      scenes/ui/inventory/item_rect.tscn
  18. +1
    -0
      scenes/ui/ui.gd
  19. +7
    -1
      scenes/ui/ui.tscn

+ 2
- 0
autoloads/inventory_manager.gd View File

@ -5,6 +5,8 @@ signal previous_quick_slot
signal select_quick_slot(slot_index: int)
signal quick_slot_item_changed(item_id: String)
signal item_picked_up(item_id: String, amount: int)
signal inventory_opened
signal inventory_closed
var quick_slot_item_id: String = "001"


+ 5
- 0
project.godot View File

@ -134,6 +134,11 @@ quickslot_previous={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":16,"position":Vector2(173, 17),"global_position":Vector2(182, 63),"factor":1.0,"button_index":5,"canceled":false,"pressed":true,"double_click":false,"script":null)
]
}
open_inventory={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null)
]
}
[layer_names]


+ 2
- 0
resources/blocks/001_dirt.tres View File

@ -8,5 +8,7 @@ script = ExtResource("1_ljghb")
material_east = ExtResource("1_n1cq6")
id = "001"
name = "Dirt"
amount = 998
description = "Block of dirt"
item_texture = "uid://li36txj7oweq"
metadata/_custom_type_script = "uid://dwrmy4mx0mw18"

+ 2
- 0
resources/blocks/002_stone.tres View File

@ -8,5 +8,7 @@ script = ExtResource("1_63t5s")
material_east = ExtResource("1_6chm7")
id = "002"
name = "Stone"
amount = 998
description = "Block of stone"
item_texture = "uid://ct1iawpfkdf5l"
metadata/_custom_type_script = "uid://dwrmy4mx0mw18"

+ 2
- 0
resources/blocks/003_wood.tres View File

@ -14,5 +14,7 @@ material_top = ExtResource("1_1n8h6")
material_bottom = ExtResource("1_1n8h6")
id = "003"
name = "Wood"
amount = 998
description = "Wood log"
item_texture = "uid://0mw651622h01"
metadata/_custom_type_script = "uid://dwrmy4mx0mw18"

+ 2
- 0
resources/blocks/004_leaves.tres View File

@ -8,5 +8,7 @@ script = ExtResource("3_kuops")
material_east = ExtResource("1_dbmit")
id = "004"
name = "Leaves"
amount = 998
description = "Tree leaves"
item_texture = "uid://goygbpyqhych"
metadata/_custom_type_script = "uid://dwrmy4mx0mw18"

+ 10
- 0
resources/inventory/player_inventory_empty.tres View File

@ -0,0 +1,10 @@
[gd_resource type="Resource" script_class="InventoryResource" load_steps=3 format=3 uid="uid://cnpw7y1csu774"]
[ext_resource type="Script" uid="uid://becun6dj78v8d" path="res://resources/inventory_resource.gd" id="1_o2th4"]
[ext_resource type="Script" uid="uid://bdx4q355l5ugl" path="res://resources/item_resource.gd" id="1_udg6i"]
[resource]
script = ExtResource("1_o2th4")
inventory = Array[ExtResource("1_udg6i")]([])
max_stack_size = 999
metadata/_custom_type_script = "uid://becun6dj78v8d"

+ 14
- 0
resources/inventory/player_inventory_testing.tres View File

@ -0,0 +1,14 @@
[gd_resource type="Resource" script_class="InventoryResource" load_steps=7 format=3 uid="uid://blfp6tiir282o"]
[ext_resource type="Script" uid="uid://becun6dj78v8d" path="res://resources/inventory_resource.gd" id="1_4v6mg"]
[ext_resource type="Script" uid="uid://bdx4q355l5ugl" path="res://resources/item_resource.gd" id="1_gg8jx"]
[ext_resource type="Resource" uid="uid://bu0yoee1rs1se" path="res://resources/blocks/001_dirt.tres" id="2_rssib"]
[ext_resource type="Resource" uid="uid://cpddnknmxpohc" path="res://resources/blocks/002_stone.tres" id="3_rlc1a"]
[ext_resource type="Resource" uid="uid://bvudydis6w27b" path="res://resources/blocks/003_wood.tres" id="4_rlc1a"]
[ext_resource type="Resource" uid="uid://4knt6o2ohku3" path="res://resources/blocks/004_leaves.tres" id="5_p27bu"]
[resource]
script = ExtResource("1_4v6mg")
inventory = Array[ExtResource("1_gg8jx")]([ExtResource("2_rssib"), ExtResource("3_rlc1a"), ExtResource("4_rlc1a"), ExtResource("5_p27bu")])
max_stack_size = 999
metadata/_custom_type_script = "uid://becun6dj78v8d"

+ 6
- 0
resources/inventory_resource.gd View File

@ -0,0 +1,6 @@
class_name InventoryResource
extends Resource
@export var inventory: Array[ItemResource] = []
@export var max_stack_size: int = 999

+ 1
- 0
resources/inventory_resource.gd.uid View File

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

+ 2
- 0
resources/item_resource.gd View File

@ -4,4 +4,6 @@ extends Resource
@export var id: String = "000"
@export var name: String = "Item Name"
@export var amount: int = 999
@export var description: String = "Item Description"
@export_file var item_texture: String = "res://icon.svg"

+ 68
- 0
scenes/ui/inventory/inventory.gd View File

@ -0,0 +1,68 @@
class_name Inventory
extends Control
@export var inventory_resource: InventoryResource
@export var item_rect_scene: PackedScene
@export var grid_container: GridContainer
func _input(event: InputEvent) -> void:
if event.is_action_pressed("open_inventory"):
toggle_inventory()
func _ready() -> void:
for item_resource: ItemResource in inventory_resource.inventory:
print(item_resource.name + " - " + str(item_resource.amount))
add_item(item_resource)
func add_item(item_resource: ItemResource) -> void:
var item_rect: InventoryItemRect = find_item_rect(item_resource)
if item_rect != null:
if item_rect.item_resource.amount + item_resource.amount >= inventory_resource.max_stack_size:
item_rect.on_stack_full(true)
return
item_rect.item_resource.amount += item_resource.amount
item_rect.update_rect()
else:
item_rect = item_rect_scene.instantiate()
grid_container.add_child(item_rect)
item_rect.item_resource = item_resource
item_rect.update_rect()
func find_item_rect(item_resource: ItemResource) -> InventoryItemRect:
var rect: InventoryItemRect = null
for container: InventoryItemRect in grid_container.get_children():
if container.item_resource.id == item_resource.id:
rect = container
break
return rect
func subtract_item(item_resource: ItemResource) -> void:
var item_rect: InventoryItemRect = find_item_rect(item_resource)
if item_rect != null:
if item_rect.item_resource.amount >= inventory_resource.max_stack_size:
item_rect.on_stack_full(false)
item_rect.item_resource.amount -= item_resource.amount
item_rect.update_rect()
if item_rect.item_resource.amount < 1: # Empty stack
item_rect.queue_free()
else:
push_error("Attempting to subtract amount (" + str(item_resource.amount) + " from nonexistent inventory item (" + str(item_resource.name) + ")")
func toggle_inventory() -> void:
visible = not visible
if visible:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
InventoryManager.inventory_opened.emit()
get_tree().paused = true
else:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
InventoryManager.inventory_closed.emit()
get_tree().paused = false

+ 1
- 0
scenes/ui/inventory/inventory.gd.uid View File

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

+ 47
- 0
scenes/ui/inventory/inventory.tscn View File

@ -0,0 +1,47 @@
[gd_scene load_steps=4 format=3 uid="uid://dcr25y1lw4wjp"]
[ext_resource type="Script" uid="uid://dybecq130mxhn" path="res://scenes/ui/inventory/inventory.gd" id="1_s6ek7"]
[ext_resource type="Resource" uid="uid://cnpw7y1csu774" path="res://resources/inventory/player_inventory_empty.tres" id="2_avmd0"]
[ext_resource type="PackedScene" uid="uid://boueuk2hnfvg" path="res://scenes/ui/inventory/item_rect.tscn" id="3_xeaml"]
[node name="Inventory" type="Control" node_paths=PackedStringArray("grid_container")]
process_mode = 3
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_s6ek7")
inventory_resource = ExtResource("2_avmd0")
item_rect_scene = ExtResource("3_xeaml")
grid_container = NodePath("Background/MarginContainer/VBoxContainer/GridContainer")
[node name="Background" 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="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 = 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="Background/MarginContainer"]
layout_mode = 2
[node name="GridContainer" type="GridContainer" parent="Background/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/h_separation = 256
theme_override_constants/v_separation = 256
columns = 4

+ 21
- 0
scenes/ui/inventory/item_rect.gd View File

@ -0,0 +1,21 @@
class_name InventoryItemRect
extends Panel
@export var item_resource: ItemResource
@onready var amount_label: Label = $AmountLabel
@onready var item_texture: TextureRect = $ItemTexture
func update_rect() -> void:
item_texture.texture = load(item_resource.item_texture)
amount_label.text = "x" + str(item_resource.amount)
tooltip_text = item_resource.name
func on_stack_full(is_full: bool) -> void:
if is_full:
amount_label.add_theme_color_override("font_color", Color(1, 0, 0))
else:
amount_label.add_theme_color_override("font_color", Color(1, 1, 1))

+ 1
- 0
scenes/ui/inventory/item_rect.gd.uid View File

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

+ 38
- 0
scenes/ui/inventory/item_rect.tscn View File

@ -0,0 +1,38 @@
[gd_scene load_steps=3 format=3 uid="uid://boueuk2hnfvg"]
[ext_resource type="Texture2D" uid="uid://dknv7amroftm8" path="res://icon.svg" id="1_o0kom"]
[ext_resource type="Script" uid="uid://cknl6i0jce5jr" path="res://scenes/ui/inventory/item_rect.gd" id="1_oderi"]
[node name="ItemRect" type="Panel"]
anchors_preset = -1
anchor_right = 0.111111
anchor_bottom = 0.197531
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_oderi")
metadata/_edit_use_anchors_ = true
[node name="ItemTexture" type="TextureRect" parent="."]
custom_minimum_size = Vector2(64, 64)
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("1_o0kom")
stretch_mode = 4
[node name="AmountLabel" type="Label" parent="."]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -40.0
offset_top = -23.0
offset_right = -3.0
grow_horizontal = 0
grow_vertical = 0
text = "x100"

+ 1
- 0
scenes/ui/ui.gd View File

@ -3,6 +3,7 @@ extends CanvasLayer
@onready var crosshair: CenterContainer = $Crosshair
@onready var inventory: Inventory = $Inventory
@onready var options_menu: MarginContainer = $OptionsMenu
@onready var quick_slots: MarginContainer = $QuickSlots
@onready var waila: Waila = $Waila


+ 7
- 1
scenes/ui/ui.tscn View File

@ -1,9 +1,11 @@
[gd_scene load_steps=5 format=3 uid="uid://c7fj7wla8bd70"]
[gd_scene load_steps=7 format=3 uid="uid://c7fj7wla8bd70"]
[ext_resource type="Script" uid="uid://bslimr2y4lnvq" path="res://scenes/ui/ui.gd" id="1_aac20"]
[ext_resource type="PackedScene" uid="uid://dvogu3djluqsn" path="res://scenes/ui/waila.tscn" id="1_u7n8c"]
[ext_resource type="PackedScene" uid="uid://w6wtjosjn1qu" path="res://scenes/ui/options_menu.tscn" id="2_f5cxw"]
[ext_resource type="PackedScene" uid="uid://cbiygbgpfk220" path="res://scenes/ui/quick_slots.tscn" id="4_g5kmx"]
[ext_resource type="PackedScene" uid="uid://dcr25y1lw4wjp" path="res://scenes/ui/inventory/inventory.tscn" id="5_0dwhk"]
[ext_resource type="Resource" uid="uid://blfp6tiir282o" path="res://resources/inventory/player_inventory_testing.tres" id="6_pfayw"]
[node name="UI" type="CanvasLayer"]
script = ExtResource("1_aac20")
@ -32,6 +34,10 @@ visible = false
[node name="QuickSlots" parent="." instance=ExtResource("4_g5kmx")]
[node name="Inventory" parent="." instance=ExtResource("5_0dwhk")]
visible = false
inventory_resource = ExtResource("6_pfayw")
[connection signal="toggled" from="OptionsMenu/PanelContainer/MarginContainer/LeftContainer/VBoxContainer/BlockHighlights/CheckButton" to="." method="_on_block_highlights_toggled"]
[connection signal="toggled" from="OptionsMenu/PanelContainer/MarginContainer/LeftContainer/VBoxContainer/Waila/CheckButton" to="." method="_on_waila_toggled"]
[connection signal="pressed" from="OptionsMenu/PanelContainer/MarginContainer/CenterContainer/HBoxContainer/CloseButton" to="." method="_on_close_button_pressed"]


Loading…
Cancel
Save