From 6e9e18285b46300a1b05cc023320fd4b07d9e5ff Mon Sep 17 00:00:00 2001 From: Ryan Reed Date: Sat, 8 Mar 2025 13:11:22 -0500 Subject: [PATCH] Reworking DroppedBlock to utilize AnimationPlayer instead of tweens --- scenes/blocks/block.gd | 1 + scenes/blocks/dropped_block.gd | 38 ++++----------- scenes/blocks/dropped_block.gd.uid | 2 +- scenes/blocks/dropped_block.tscn | 77 +++++++++++++++++++++++++++++- scenes/world/world.gd | 5 +- 5 files changed, 88 insertions(+), 35 deletions(-) diff --git a/scenes/blocks/block.gd b/scenes/blocks/block.gd index 923bdbf..9e160aa 100644 --- a/scenes/blocks/block.gd +++ b/scenes/blocks/block.gd @@ -56,6 +56,7 @@ func _apply_material(face: MeshInstance3D, material: StandardMaterial3D) -> void func _apply_materials() -> void: if east_face == null: return + if resource == null: return # This could probably be improved/simplified _apply_material(east_face, resource.material_east) diff --git a/scenes/blocks/dropped_block.gd b/scenes/blocks/dropped_block.gd index 9f8a4d1..4d2f76e 100644 --- a/scenes/blocks/dropped_block.gd +++ b/scenes/blocks/dropped_block.gd @@ -2,36 +2,16 @@ class_name DroppedBlock extends Node3D -@export var block_tilt: float = 15.0 -#@export var bounce_height: float = 0.25 -#@export var bounce_duration: float = 1.0 -@export var spin_duration: float = 2.0 -@export var block_size_scale: float = 0.25 +@export var block_scale: float = .25 -@onready var start_position: Vector3 = self.position +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var block: Block = $Block -func drop_block(block_id: String) -> void: - _create_block(block_id) - _run_animation() - -func remove_block() -> void: - queue_free() - - -func _create_block(block_id: String) -> void: - var block: Block = World.BLOCK_PREFAB.instantiate() - block.rotation.z = block_tilt - block.set_id(block_id) - block.scale = Vector3(block_size_scale, block_size_scale, block_size_scale) - add_child(block) +func initialize(id: String, _position: Vector3) -> void: + _position.y -= .2 # Bring the block closer to the floor (Probably a better way to handle this) + position = _position + block.set_id(id) block.collision_shape.disabled = true - -func _run_animation() -> void: - var tween: Tween = create_tween().set_loops() - tween.tween_property( - self, - "rotation_degrees", - Vector3(0, 360, 0), - spin_duration - ).from_current() + block.scale = Vector3(block_scale, block_scale, block_scale) + animation_player.play("start_animation") diff --git a/scenes/blocks/dropped_block.gd.uid b/scenes/blocks/dropped_block.gd.uid index e1e5666..64c9fa3 100644 --- a/scenes/blocks/dropped_block.gd.uid +++ b/scenes/blocks/dropped_block.gd.uid @@ -1 +1 @@ -uid://bnqhdn88dg38n +uid://dkd2qbndc3q1o diff --git a/scenes/blocks/dropped_block.tscn b/scenes/blocks/dropped_block.tscn index b6380db..fefe431 100644 --- a/scenes/blocks/dropped_block.tscn +++ b/scenes/blocks/dropped_block.tscn @@ -1,6 +1,79 @@ -[gd_scene load_steps=2 format=3 uid="uid://cadej8hyabido"] +[gd_scene load_steps=6 format=3 uid="uid://bn2olldntd7a6"] -[ext_resource type="Script" uid="uid://bnqhdn88dg38n" path="res://scenes/blocks/dropped_block.gd" id="1_50ggx"] +[ext_resource type="Script" uid="uid://dkd2qbndc3q1o" path="res://scenes/blocks/dropped_block.gd" id="1_50ggx"] +[ext_resource type="PackedScene" uid="uid://col07xd76y60h" path="res://scenes/blocks/block.tscn" id="1_chlk1"] + +[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("Block:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Block:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0.261799)] +} + +[sub_resource type="Animation" id="Animation_50ggx"] +resource_name = "start_animation" +length = 2.0 +loop_mode = 1 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Block:position") +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), +"update": 0, +"values": [Vector3(0, 0, 0), Vector3(0, 0.1, 0), Vector3(0, 0, 0), Vector3(0, -0.1, 0), Vector3(0, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Block:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1, 2), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector3(0, 0, 0.261799), Vector3(0, 3.14159, 0.261799), Vector3(0, 6.28319, 0.261799)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_kym7p"] +_data = { +&"RESET": SubResource("Animation_kym7p"), +&"start_animation": SubResource("Animation_50ggx") +} [node name="DroppedBlock" type="Node3D"] script = ExtResource("1_50ggx") + +[node name="Block" parent="." instance=ExtResource("1_chlk1")] +transform = Transform3D(0.965926, -0.258819, 0, 0.258819, 0.965926, 0, 0, 0, 1, 0, 0, 0) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_kym7p") +} +autoplay = "start_animation" diff --git a/scenes/world/world.gd b/scenes/world/world.gd index 35d3c48..cb104b9 100644 --- a/scenes/world/world.gd +++ b/scenes/world/world.gd @@ -19,7 +19,7 @@ func _ready() -> void: create_block("004", Vector3(1, 2, 2)) create_block("003", Vector3(-2, 3, 2)) - create_dropped_block("004", Vector3(0, 2, -2)) + create_dropped_block("003", Vector3(0, 2, -2)) func create_block(id: String, block_position: Vector3) -> void: @@ -31,9 +31,8 @@ func create_block(id: String, block_position: Vector3) -> void: func create_dropped_block(id: String, block_position: Vector3) -> void: var block: DroppedBlock = DROPPED_BLOCK_PREFAB.instantiate() - block.position = block_position add_child(block) - block.drop_block(id) + block.initialize(id, block_position) func _initialize_ground() -> void: for x: int in range(-10, 11):