[gd_scene format=3 uid="uid://bnu1873dubfwk"] [ext_resource type="Material" uid="uid://6ton7xdddycw" path="res://assets/materials/kaleidoscope_mosaic.tres" id="1_xvbr8"] [sub_resource type="GDScript" id="GDScript_exgcw"] resource_name = "ShieldDestroyer" script/source = "extends Area3D @export var shield : MeshInstance3D @export var trajectory_height : float @export var trajectory_speed : float @export var trajectory_acceleration : float @export var target_distance : float var time : float = 0 @onready var start : Vector3 = global_position @onready var target_position : Vector3 = shield.global_position + (shield.global_position - start).normalized() * target_distance var fly : bool = false func eval_trajectory(t : float) -> Vector3: return lerp(start, target_position, t) + Vector3(0.0, sin(sqrt(t) * PI), 0) * trajectory_height func _process(delta : float): if not fly: return time += delta * trajectory_speed var t : float = pow(time, trajectory_acceleration) look_at_from_position(eval_trajectory(t), eval_trajectory(t+0.1)) if t >= 1.0: var shield_damage : float = shield.get_instance_shader_parameter(\"damage\") + 0.25 shield.set_instance_shader_parameter(\"damage\", shield_damage) queue_free() fly = false if shield_damage >= 0.99: shield.get_parent().destroyed() func _body_entered(body : Node3D): if body is PlayerBody: body_entered.disconnect(_body_entered) fly = true func _ready(): body_entered.connect(_body_entered) " [sub_resource type="BoxMesh" id="BoxMesh_xvbr8"] material = ExtResource("1_xvbr8") size = Vector3(0.25, 0.25, 0.25) [sub_resource type="BoxMesh" id="BoxMesh_i3xuq"] material = ExtResource("1_xvbr8") size = Vector3(0.25, 0.25, 0.25) [sub_resource type="SphereShape3D" id="SphereShape3D_exgcw"] radius = 0.29481274 [node name="ShieldDestroyer" type="Area3D" unique_id=987592776] script = SubResource("GDScript_exgcw") trajectory_height = 5.0 trajectory_speed = 1.0 trajectory_acceleration = 5.0 target_distance = 2.0 [node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=536025302] transform = Transform3D(0.90197194, -0.15605302, -0.40260923, -0.355047, 0.2626082, -0.89720595, 0.24574009, 0.9521997, 0.18145907, -0.00020039082, 0.0007646084, -0.00036668777) mesh = SubResource("BoxMesh_xvbr8") [node name="MeshInstance3D2" type="MeshInstance3D" parent="." unique_id=1588132297] transform = Transform3D(0.90472734, -0.33938178, 0.257465, 0.4109857, 0.8543955, -0.3179605, -0.11206702, 0.393482, 0.9124762, -0.00020039082, 0.0007646084, -0.00036668777) mesh = SubResource("BoxMesh_i3xuq") [node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1756671502] shape = SubResource("SphereShape3D_exgcw")