diff --git a/components/UI/ItemDropped.tscn b/components/UI/ItemDropped.tscn index 5b5e6dc..74e91a5 100644 --- a/components/UI/ItemDropped.tscn +++ b/components/UI/ItemDropped.tscn @@ -1,8 +1,87 @@ -[gd_scene load_steps=13 format=3 uid="uid://cxcvc1rjvm8i2"] +[gd_scene load_steps=16 format=3 uid="uid://cxcvc1rjvm8i2"] [ext_resource type="Script" path="res://scripts/Statemachine/ItemDropped.gd" id="1_v2djl"] [ext_resource type="Texture2D" uid="uid://bks8jmctleina" path="res://resources/items/baseball.svg" id="2_4hl42"] +[sub_resource type="Animation" id="Animation_l0b83"] +resource_name = "collect" +length = 0.3 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0, 2, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0, 0.3) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0, 2, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0, 0.3) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:modulate:a") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(1, -0.15, 0, 0.15, 0, 0, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0, 0.3) +} + +[sub_resource type="Animation" id="Animation_5i70v"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.5, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:modulate:a") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.15, 0, 0.15, 0), +"times": PackedFloat32Array(0) +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_2q7p1"] +_data = { +"RESET": SubResource("Animation_5i70v"), +"collect": SubResource("Animation_l0b83") +} + [sub_resource type="CircleShape2D" id="CircleShape2D_7lt1c"] radius = 2.0 @@ -57,6 +136,12 @@ unique_name_in_owner = true scale = Vector2(0.5, 0.5) texture = ExtResource("2_4hl42") +[node name="animator" type="AnimationPlayer" parent="texture"] +unique_name_in_owner = true +libraries = { +"": SubResource("AnimationLibrary_2q7p1") +} + [node name="hitbox" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_7lt1c") diff --git a/scripts/Statemachine/ItemDropped.gd b/scripts/Statemachine/ItemDropped.gd index e4821e8..a94bd1c 100644 --- a/scripts/Statemachine/ItemDropped.gd +++ b/scripts/Statemachine/ItemDropped.gd @@ -6,6 +6,7 @@ var stackCount: int = 1 var targetPlayer: EntityBase = null @onready var texture: Sprite2D = $"%texture" +@onready var animator: AnimationPlayer = $"%animator" func _ready(): apply_force(MathTool.randv2_range(30000), MathTool.randv2_range(10)) @@ -18,7 +19,7 @@ func _physics_process(_delta): apply_central_force((targetPlayer.position - position).normalized() * 1000) if position.distance_to(targetPlayer.position) < 60: targetPlayer.collectItem(item, stackCount) - queue_free() + collect() func findPlayer() -> EntityBase: var result = null @@ -29,6 +30,10 @@ func findPlayer() -> EntityBase: lastDistance = position.distance_to(player.position) result = player return result +func collect(): + animator.play("collect") + await animator.animation_finished + queue_free() static func generate( itemType: ItemStore.ItemType,