diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 231cc0b..8ad8bdc 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -2,21 +2,17 @@ class_name Block extends StaticBody3D -@onready var collision_shape: CollisionShape3D = $CollisionShape3D -@onready var highlight_mesh: MeshInstance3D = $HighlightMesh -@onready var block_mesh: MeshInstance3D = $BlockMesh +@export var block_mesh: BlockMesh +@export var collision_shape: CollisionShape3D +@export var highlight_mesh: MeshInstance3D var id: String -var resource: BlockResource func _exit_tree() -> void: if Waila.ref.get_target() == self: Waila.ref.release_target() -func _ready() -> void: - _apply_material() - func get_id() -> String: return id @@ -36,21 +32,7 @@ func release() -> void: func set_id(block_id: String) -> void: id = block_id - _load_resource_data() - _apply_material() - - -func _apply_material() -> void: - if block_mesh == null: return - if resource == null: return - block_mesh.set_surface_override_material(0, resource.material_texture) - -func _load_resource_data() -> void: - if not id: - printerr("Could not load resource data. Block ID was empty.") - return - - if not id in DBItems.data: - printerr("Could not load resource data. Unknown Block ID: ", id) - return - resource = DBItems.data[id] + if id in DBItems.data: + block_mesh.apply_material(DBItems.data[id].material_texture) + else: + printerr("Unknown Block ID: ", id) diff --git a/scenes/blocks/block.tscn b/scenes/blocks/block.tscn index 68e4edc..f08fe97 100644 --- a/scenes/blocks/block.tscn +++ b/scenes/blocks/block.tscn @@ -1,8 +1,8 @@ -[gd_scene load_steps=10 format=3 uid="uid://b8evbp40gnomt"] +[gd_scene load_steps=8 format=3 uid="uid://b8evbp40gnomt"] [ext_resource type="Script" uid="uid://buvqmrrtmxs2h" path="res://scenes/blocks/block.gd" id="1_7fut1"] [ext_resource type="Material" uid="uid://bgc6efqf8aiqo" path="res://assets/materials/block_highlight.tres" id="2_524ei"] -[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="3_qi7hx"] +[ext_resource type="PackedScene" uid="uid://c8dch55d3txns" path="res://scenes/blocks/block_mesh.tscn" id="3_60een"] [ext_resource type="PackedScene" uid="uid://baki8rbf1ti0r" path="res://save_load/components/save_data_component.tscn" id="4_60een"] [ext_resource type="Resource" uid="uid://dfos8np8agysk" path="res://save_load/resources/node_types/block_data_resource.tres" id="5_60een"] @@ -12,14 +12,11 @@ material = ExtResource("2_524ei") size = Vector3(1.01, 1.01, 1.01) -[sub_resource type="BoxMesh" id="BoxMesh_e15ke"] - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4e127"] -albedo_texture = ExtResource("3_qi7hx") -texture_filter = 0 - -[node name="Block" type="StaticBody3D"] +[node name="Block" type="StaticBody3D" node_paths=PackedStringArray("block_mesh", "collision_shape", "highlight_mesh")] script = ExtResource("1_7fut1") +block_mesh = NodePath("BlockMesh") +collision_shape = NodePath("CollisionShape3D") +highlight_mesh = NodePath("HighlightMesh") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] visible = false @@ -29,9 +26,8 @@ shape = SubResource("BoxShape3D_n5naa") visible = false mesh = SubResource("BoxMesh_7fut1") -[node name="BlockMesh" type="MeshInstance3D" parent="."] -mesh = SubResource("BoxMesh_e15ke") -surface_material_override/0 = SubResource("StandardMaterial3D_4e127") +[node name="BlockMesh" parent="." instance=ExtResource("3_60een")] +skeleton = NodePath("") [node name="SaveDataComponent" parent="." instance=ExtResource("4_60een")] save_data_resource = ExtResource("5_60een") diff --git a/scenes/blocks/block_mesh.gd b/scenes/blocks/block_mesh.gd new file mode 100644 index 0000000..3bc0551 --- /dev/null +++ b/scenes/blocks/block_mesh.gd @@ -0,0 +1,6 @@ +class_name BlockMesh +extends MeshInstance3D + + +func apply_material(material_texture: StandardMaterial3D) -> void: + set_surface_override_material(0, material_texture) diff --git a/scenes/blocks/block_mesh.gd.uid b/scenes/blocks/block_mesh.gd.uid new file mode 100644 index 0000000..32ec587 --- /dev/null +++ b/scenes/blocks/block_mesh.gd.uid @@ -0,0 +1 @@ +uid://c2rjyhwln6bmh diff --git a/scenes/blocks/block_mesh.tscn b/scenes/blocks/block_mesh.tscn new file mode 100644 index 0000000..6f7f469 --- /dev/null +++ b/scenes/blocks/block_mesh.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=5 format=3 uid="uid://c8dch55d3txns"] + +[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="1_idwey"] +[ext_resource type="Script" uid="uid://c2rjyhwln6bmh" path="res://scenes/blocks/block_mesh.gd" id="2_06oav"] + +[sub_resource type="BoxMesh" id="BoxMesh_idwey"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bqoxu"] +albedo_texture = ExtResource("1_idwey") +texture_filter = 0 + +[node name="BlockMesh" type="MeshInstance3D"] +mesh = SubResource("BoxMesh_idwey") +surface_material_override/0 = SubResource("StandardMaterial3D_bqoxu") +script = ExtResource("2_06oav") diff --git a/scenes/blocks/dropped_block.gd b/scenes/blocks/dropped_block.gd index 5212e95..6a622bb 100644 --- a/scenes/blocks/dropped_block.gd +++ b/scenes/blocks/dropped_block.gd @@ -6,11 +6,10 @@ extends RigidBody3D ## This is to ensure that the item isn't picked up immediately after throwing @export var pickup_timeout: int = 1 @export var animation_player: AnimationPlayer -@export var block_mesh: MeshInstance3D +@export var block_mesh: BlockMesh @export var pickup_area: Area3D var id: String -var resource: BlockResource var impulse: Vector3 = Vector3.ZERO @@ -41,24 +40,10 @@ func initialize(block_id: String, start_position: Vector3, drop_direction: Vecto func set_id(block_id: String) -> void: id = block_id - _load_resource_data() - _apply_material() - - -func _apply_material() -> void: - if block_mesh == null: return - if resource == null: return - block_mesh.set_surface_override_material(0, resource.material_texture) - -func _load_resource_data() -> void: - if not id: - printerr("Could not load resource data. Block ID was empty.") - return - - if not id in DBItems.data: - printerr("Could not load resource data. Unknown Block ID: ", id) - return - resource = DBItems.data[id] + if id in DBItems.data: + block_mesh.apply_material(DBItems.data[id].material_texture) + else: + printerr("Unknown Block ID: ", id) func _on_pickup_area_body_entered(body: Node3D) -> void: diff --git a/scenes/blocks/dropped_block.tscn b/scenes/blocks/dropped_block.tscn index 01beab1..0473dae 100644 --- a/scenes/blocks/dropped_block.tscn +++ b/scenes/blocks/dropped_block.tscn @@ -1,21 +1,21 @@ -[gd_scene load_steps=10 format=3 uid="uid://dq6alec7d35gc"] +[gd_scene load_steps=8 format=3 uid="uid://dq6alec7d35gc"] [ext_resource type="Script" uid="uid://d2uws50yjvp6w" path="res://scenes/blocks/dropped_block.gd" id="1_y8usf"] -[ext_resource type="Texture2D" uid="uid://dsvk3faenewrl" path="res://assets/textures/grass-block.png" id="4_jhjal"] +[ext_resource type="PackedScene" uid="uid://c8dch55d3txns" path="res://scenes/blocks/block_mesh.tscn" id="2_5kft2"] [sub_resource type="Animation" id="Animation_kym7p"] length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("BlockMesh:position") +tracks/0/path = NodePath("BlockMesh:scale") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0, -0.2, 0)] +"values": [Vector3(1, 1, 1)] } tracks/1/type = "value" tracks/1/imported = false @@ -27,19 +27,19 @@ tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0, 0, 0.261799)] +"values": [Vector3(0, 0, 0)] } tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("BlockMesh:scale") +tracks/2/path = NodePath("BlockMesh:position") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0.25, 0.25, 0.25)] +"values": [Vector3(0, 0, 0)] } [sub_resource type="Animation" id="Animation_50ggx"] @@ -50,14 +50,14 @@ step = 0.1 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("BlockMesh:position") +tracks/0/path = NodePath("BlockMesh:scale") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [Vector3(0, -0.2, 0), Vector3(0, -0.3, 0), Vector3(0, -0.2, 0), Vector3(0, -0.1, 0), Vector3(0, -0.2, 0)] +"values": [Vector3(0.25, 0.25, 0.25)] } tracks/1/type = "value" tracks/1/imported = false @@ -74,14 +74,14 @@ tracks/1/keys = { tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true -tracks/2/path = NodePath("BlockMesh:scale") +tracks/2/path = NodePath("BlockMesh:position") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), +"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), "update": 0, -"values": [Vector3(0.25, 0.25, 0.25)] +"values": [Vector3(0, -0.2, 0), Vector3(0, -0.3, 0), Vector3(0, -0.2, 0), Vector3(0, -0.1, 0), Vector3(0, -0.2, 0)] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_kym7p"] @@ -92,14 +92,7 @@ _data = { [sub_resource type="BoxShape3D" id="BoxShape3D_kkyxx"] -[sub_resource type="BoxMesh" id="BoxMesh_e15ke"] - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4e127"] -albedo_texture = ExtResource("4_jhjal") -texture_filter = 0 - [sub_resource type="SphereShape3D" id="SphereShape3D_5kft2"] -radius = 1.0 [node name="DroppedBlock" type="RigidBody3D" node_paths=PackedStringArray("animation_player", "block_mesh", "pickup_area")] collision_layer = 4 @@ -118,21 +111,17 @@ autoplay = "RESET" visible = false shape = SubResource("BoxShape3D_kkyxx") -[node name="BlockMesh" type="MeshInstance3D" parent="."] -transform = Transform3D(0.241481, -0.0647047, 0, 0.0647047, 0.241481, 0, 0, 0, 0.25, 0, -0.2, 0) -mesh = SubResource("BoxMesh_e15ke") -skeleton = NodePath("") -surface_material_override/0 = SubResource("StandardMaterial3D_4e127") +[node name="BlockMesh" parent="." instance=ExtResource("2_5kft2")] [node name="PickupArea" type="Area3D" parent="."] transform = Transform3D(0.965926, -0.258819, 0, 0.258819, 0.965926, 0, 0, 0, 1, 0, 0, 0) -visible = false collision_layer = 4 collision_mask = 2 monitoring = false monitorable = false [node name="CollisionShape3D" type="CollisionShape3D" parent="PickupArea"] +visible = false shape = SubResource("SphereShape3D_5kft2") [connection signal="body_entered" from="PickupArea" to="." method="_on_pickup_area_body_entered"]