From cb3bf3522db7ef32110ff85fccc1bffdc2cc9ac6 Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Tue, 4 Mar 2025 16:04:57 -0500 Subject: [PATCH] Creating item database and loading block data from these resources --- data_structure/block.gd | 6 ++++++ data_structure/block.gd.uid | 1 + data_structure/db_items.gd | 19 ++++++++++++++++++ data_structure/db_items.gd.uid | 1 + data_structure/db_items.tscn | 6 ++++++ data_structure/item.gd | 7 +++++++ data_structure/item.gd.uid | 1 + project.godot | 2 +- resources/blocks/001_dirt.tres | 10 ++++++++++ resources/blocks/002_stone.tres | 12 ++++++++++++ root.tscn | 10 ++++++++++ scenes/blocks/block.gd | 34 +++++++++++++++++---------------- scenes/world/world.gd | 12 ++++-------- 13 files changed, 96 insertions(+), 25 deletions(-) create mode 100644 data_structure/block.gd create mode 100644 data_structure/block.gd.uid create mode 100644 data_structure/db_items.gd create mode 100644 data_structure/db_items.gd.uid create mode 100644 data_structure/db_items.tscn create mode 100644 data_structure/item.gd create mode 100644 data_structure/item.gd.uid create mode 100644 resources/blocks/001_dirt.tres create mode 100644 resources/blocks/002_stone.tres create mode 100644 root.tscn diff --git a/data_structure/block.gd b/data_structure/block.gd new file mode 100644 index 0000000..2f0e612 --- /dev/null +++ b/data_structure/block.gd @@ -0,0 +1,6 @@ +class_name BlockResource +extends ItemResource + + +# TODO: Replace with "missing texture" resource +@export var material: StandardMaterial3D = preload("res://assets/materials/dirt.tres") diff --git a/data_structure/block.gd.uid b/data_structure/block.gd.uid new file mode 100644 index 0000000..9400d76 --- /dev/null +++ b/data_structure/block.gd.uid @@ -0,0 +1 @@ +uid://dwrmy4mx0mw18 diff --git a/data_structure/db_items.gd b/data_structure/db_items.gd new file mode 100644 index 0000000..4f12698 --- /dev/null +++ b/data_structure/db_items.gd @@ -0,0 +1,19 @@ +class_name DBItems +extends Node + + +#region Singleton +static var ref: DBItems + +func _init() -> void: + if not ref: + ref = self + else: + queue_free() +#endregion + + +@onready var data: Dictionary = { + "001": preload("res://resources/blocks/001_dirt.tres"), + "002": preload("res://resources/blocks/002_stone.tres"), +} diff --git a/data_structure/db_items.gd.uid b/data_structure/db_items.gd.uid new file mode 100644 index 0000000..44556c7 --- /dev/null +++ b/data_structure/db_items.gd.uid @@ -0,0 +1 @@ +uid://bm3oi0opccjif diff --git a/data_structure/db_items.tscn b/data_structure/db_items.tscn new file mode 100644 index 0000000..1547757 --- /dev/null +++ b/data_structure/db_items.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://c0epfh4sqjcjq"] + +[ext_resource type="Script" uid="uid://bm3oi0opccjif" path="res://data_structure/db_items.gd" id="1_jp5j0"] + +[node name="DBItems" type="Node"] +script = ExtResource("1_jp5j0") diff --git a/data_structure/item.gd b/data_structure/item.gd new file mode 100644 index 0000000..2cabbc3 --- /dev/null +++ b/data_structure/item.gd @@ -0,0 +1,7 @@ +class_name ItemResource +extends Resource + + +@export var id: String = "000" +@export var name: String = "Item Name" +@export var description: String = "Item Description" diff --git a/data_structure/item.gd.uid b/data_structure/item.gd.uid new file mode 100644 index 0000000..9e090e8 --- /dev/null +++ b/data_structure/item.gd.uid @@ -0,0 +1 @@ +uid://bdx4q355l5ugl diff --git a/project.godot b/project.godot index 0f5560e..b9a5974 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Skyblock" -run/main_scene="uid://mkfitwqnerku" +run/main_scene="uid://cgx0nawwjjj7g" config/features=PackedStringArray("4.4", "Forward Plus") config/icon="res://icon.svg" diff --git a/resources/blocks/001_dirt.tres b/resources/blocks/001_dirt.tres new file mode 100644 index 0000000..d2c8aa6 --- /dev/null +++ b/resources/blocks/001_dirt.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="BlockResource" load_steps=2 format=3 uid="uid://bu0yoee1rs1se"] + +[ext_resource type="Script" uid="uid://dwrmy4mx0mw18" path="res://data_structure/block.gd" id="1_ljghb"] + +[resource] +script = ExtResource("1_ljghb") +id = "001" +name = "Dirt" +description = "Block of dirt" +metadata/_custom_type_script = "uid://dwrmy4mx0mw18" diff --git a/resources/blocks/002_stone.tres b/resources/blocks/002_stone.tres new file mode 100644 index 0000000..3ee0b1c --- /dev/null +++ b/resources/blocks/002_stone.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="BlockResource" load_steps=3 format=3 uid="uid://cpddnknmxpohc"] + +[ext_resource type="Material" uid="uid://cx7m27qa4ds4s" path="res://assets/materials/stone.tres" id="1_6chm7"] +[ext_resource type="Script" uid="uid://dwrmy4mx0mw18" path="res://data_structure/block.gd" id="1_63t5s"] + +[resource] +script = ExtResource("1_63t5s") +material = ExtResource("1_6chm7") +id = "002" +name = "Stone" +description = "Block of stone" +metadata/_custom_type_script = "uid://dwrmy4mx0mw18" diff --git a/root.tscn b/root.tscn new file mode 100644 index 0000000..97f822f --- /dev/null +++ b/root.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=3 format=3 uid="uid://cgx0nawwjjj7g"] + +[ext_resource type="PackedScene" uid="uid://c0epfh4sqjcjq" path="res://data_structure/db_items.tscn" id="1_pyidc"] +[ext_resource type="PackedScene" uid="uid://mkfitwqnerku" path="res://scenes/world/world.tscn" id="2_vvh5c"] + +[node name="Root" type="Node"] + +[node name="DBItems" parent="." instance=ExtResource("1_pyidc")] + +[node name="World" parent="." instance=ExtResource("2_vvh5c")] diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 077bb4d..82b7be0 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -2,29 +2,31 @@ class_name Block extends StaticBody3D -enum Types { - DIRT, - STONE, -} - -var materials_map: Dictionary[Types, StandardMaterial3D] = { - Types.DIRT: preload("res://assets/materials/dirt.tres"), - Types.STONE: preload("res://assets/materials/stone.tres"), -} - -@export var material: StandardMaterial3D -@export var type: Types - @onready var block_faces: Node3D = $BlockFaces +var id: String +var resource: BlockResource + func _ready() -> void: _apply_materials() -func apply_material() -> void: - material = materials_map[type] +func set_id(block_id: String) -> void: + id = block_id + _get_resource_data() + _apply_materials() + func _apply_materials() -> void: + if block_faces == null: return + for face: MeshInstance3D in block_faces.get_children(): - face.set_surface_override_material(0, material) + face.set_surface_override_material(0, resource.material) + +func _get_resource_data() -> void: + if not id: + printerr("Block ID was expected but was not received") + return + + resource = DBItems.ref.data[id] diff --git a/scenes/world/world.gd b/scenes/world/world.gd index 0cd9d29..4a3e89c 100644 --- a/scenes/world/world.gd +++ b/scenes/world/world.gd @@ -8,23 +8,19 @@ const BLOCK_PREFAB: PackedScene = preload("res://scenes/blocks/block.tscn") func _ready() -> void: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED _initialize_ground() - #create_block(Block.Types.DIRT, Vector3.ZERO) - #create_block(Block.Types.STONE, Vector3.ONE) -func create_block(block_type: Block.Types, block_position: Vector3) -> void: +func create_block(id: String, block_position: Vector3) -> void: var block: Block = BLOCK_PREFAB.instantiate() block.position = block_position block.name = "%s" % [block_position] - block.type = block_type - block.apply_material() + block.set_id(id) + add_child(block) func _initialize_ground() -> void: for x: int in range(-10, 11): for z: int in range(-10, 11): - var random_type: int = randi_range(0 ,1) var ground_position: Vector3 = Vector3(x, 0, z) - create_block(random_type, ground_position) - #create_block(Block.Types.STONE, ground_position) + create_block("001", ground_position)