75 lines
2.7 KiB
Text
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")
|