From b9fd6bb3affa5b5121beef7339218d9c15b82172 Mon Sep 17 00:00:00 2001 From: Dustin Date: Sun, 6 Apr 2025 08:40:33 -0700 Subject: [PATCH] Working towards item pickups and player inventory --- assets/items/doodad.tres | 27 +++++++++++++++ assets/items/mushroom_icon.png | Bin 0 -> 401 bytes assets/items/mushroom_icon.png.import | 35 ++++++++++++++++++++ project.godot | 18 ++++++++++ src/Interactables/ItemPickup.gd | 17 ++++++++++ src/Interactables/ItemPickup.tscn | 9 +++++ src/classes/inventory_manager.gd | 46 ++++++++++++++++++++++++++ src/classes/item.gd | 19 +++++++++++ 8 files changed, 171 insertions(+) create mode 100644 assets/items/doodad.tres create mode 100644 assets/items/mushroom_icon.png create mode 100644 assets/items/mushroom_icon.png.import create mode 100644 src/Interactables/ItemPickup.gd create mode 100644 src/Interactables/ItemPickup.tscn create mode 100644 src/classes/inventory_manager.gd create mode 100644 src/classes/item.gd diff --git a/assets/items/doodad.tres b/assets/items/doodad.tres new file mode 100644 index 0000000..8b65333 --- /dev/null +++ b/assets/items/doodad.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" load_steps=7 format=2] + +[ext_resource path="res://src/classes/item.gd" type="Script" id=1] +[ext_resource path="res://assets/levels/LegacyFantasy-High_Forest/Tiles/Tiles.png" type="Texture" id=2] +[ext_resource path="res://assets/items/mushroom_icon.png" type="Texture" id=3] + +[sub_resource type="AtlasTexture" id=1] +atlas = ExtResource( 2 ) +region = Rect2( 256, 240, 32, 32 ) + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 2 ) +region = Rect2( 288, 240, 32, 32 ) + +[sub_resource type="SpriteFrames" id=3] +animations = [ { +"frames": [ SubResource( 1 ), SubResource( 2 ) ], +"loop": true, +"name": "default", +"speed": 1.0 +} ] + +[resource] +script = ExtResource( 1 ) +name = "mushroom" +inventory_icon = ExtResource( 3 ) +in_game_sprite = SubResource( 3 ) diff --git a/assets/items/mushroom_icon.png b/assets/items/mushroom_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd47df6e226d7f24a8a826d572362e0d5d62b90 GIT binary patch literal 401 zcmV;C0dD?@P)Px$OG!jQR5*>Lk}*reP!xqv5-Y)}Ac#tlLNH6DlPEYC(Sq0_f}0=&1b>4#6+v<8 zPtZwl6I|-j7DW&uK_oR&Q;>p#E-r%Fp?Y1+^EEF7BxgMD-gCdpeLzA<)rt@xN2Qv+L*-%`ifdz@Ezo`D(>dD0RR*AePKO*9ho;w-yzHRn;fX|)I}zxK=W)08iTN2g5T-k$v1CZ zfkGhAJew>-h1>2h{9yk;nUsQ$);aOlU|Sp@(*J~ROUt>!%|KDex5V0@1C_|;193db*B5>8Ku_pWPKX!L&q0Ber= vk%CI=%XGB6MN1=t6jvAdmH(r}0g3ek(;#$n;m-B(00000NkvXXu0mjfU+1d@ literal 0 HcmV?d00001 diff --git a/assets/items/mushroom_icon.png.import b/assets/items/mushroom_icon.png.import new file mode 100644 index 0000000..6a76e8e --- /dev/null +++ b/assets/items/mushroom_icon.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/mushroom_icon.png-692f5daaafe395b280b8df070c417867.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/items/mushroom_icon.png" +dest_files=[ "res://.import/mushroom_icon.png-692f5daaafe395b280b8df070c417867.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/project.godot b/project.godot index 2bfcaa4..2d21481 100644 --- a/project.godot +++ b/project.godot @@ -54,6 +54,21 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://lib/templates/Interactable/Interactable_Receiver.gd" }, { +"base": "Resource", +"class": "InventoryManager", +"language": "GDScript", +"path": "res://src/classes/inventory_manager.gd" +}, { +"base": "Resource", +"class": "Item", +"language": "GDScript", +"path": "res://src/classes/item.gd" +}, { +"base": "Interactable", +"class": "ItemPickup", +"language": "GDScript", +"path": "res://src/Interactables/ItemPickup.gd" +}, { "base": "Node2D", "class": "Level", "language": "GDScript", @@ -129,6 +144,9 @@ _global_script_class_icons={ "HealthPickup": "", "Interactable": "", "Interactable_Receiver": "", +"InventoryManager": "", +"Item": "", +"ItemPickup": "", "Level": "", "LevelTransition": "", "Modifier_Receiver": "", diff --git a/src/Interactables/ItemPickup.gd b/src/Interactables/ItemPickup.gd new file mode 100644 index 0000000..8047382 --- /dev/null +++ b/src/Interactables/ItemPickup.gd @@ -0,0 +1,17 @@ +class_name ItemPickup +extends Interactable + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/src/Interactables/ItemPickup.tscn b/src/Interactables/ItemPickup.tscn new file mode 100644 index 0000000..83c4b57 --- /dev/null +++ b/src/Interactables/ItemPickup.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/Interactables/ItemPickup.gd" type="Script" id=1] + +[node name="ItemPickup" type="Area2D"] +script = ExtResource( 1 ) + +[connection signal="body_entered" from="." to="." method="_on_Interactable_Component_body_entered"] +[connection signal="body_exited" from="." to="." method="_on_Interactable_Component_body_exited"] diff --git a/src/classes/inventory_manager.gd b/src/classes/inventory_manager.gd new file mode 100644 index 0000000..6c263c7 --- /dev/null +++ b/src/classes/inventory_manager.gd @@ -0,0 +1,46 @@ +class_name InventoryManager +extends Resource + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +var primary_selection: Item +var secondary_selection: Item + +# count of items in dictionary value +var _items :Dictionary + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + +func add_to_inventory(_item :Item) -> int: + if _items.has(_item): + _items[_item] += 1 + else: + _items[_item] = 1 + return _items[_item] + + +func remove_from_inventory (_item :Item) -> int: + if _items.has(_item): + _items[_item] -= 1 + if _items[_item] == 0: + _items.erase(_item) + return 0 + else: + return _items[_item] + else: + return 0 + + +func clear_item_from_inventory (_item :Item) -> void: + if _items.has(_item): + _items.erase(_item) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass diff --git a/src/classes/item.gd b/src/classes/item.gd new file mode 100644 index 0000000..7604f3e --- /dev/null +++ b/src/classes/item.gd @@ -0,0 +1,19 @@ +class_name Item +extends Resource + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" +export var name :String +export var inventory_icon :Texture +export var in_game_sprite :SpriteFrames + +# Called when the node enters the scene tree for the first time. +func _ready(): + assert ( name != '', "Name never given to Item" + self.resource_path ) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass