viscosity/project/objects/shield_destroyer.tscn
2026-06-26 00:42:47 +02:00

75 lines
2.7 KiB
Text

[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")