Added aiming for tesla
This commit is contained in:
@@ -21,6 +21,6 @@ metadata/_custom_type_script = "uid://dxk56xdihfw4m"
|
||||
|
||||
[node name="Tesla" instance=ExtResource("1_rpud7")]
|
||||
script = ExtResource("2_08si3")
|
||||
sector_angle = 180
|
||||
sector_angle = 10
|
||||
Projectile = ExtResource("2_1rrdy")
|
||||
reloaders = Array[ExtResource("3_08si3")]([SubResource("Resource_1rrdy"), SubResource("Resource_08si3")])
|
||||
|
||||
@@ -1 +1,69 @@
|
||||
extends AbstractProjectile
|
||||
|
||||
|
||||
@export_range(0.01, 0.5) var jink_min_delay: float = 0.01
|
||||
@export_range(0.01, 0.5) var jink_max_delay: float = 0.01
|
||||
@export_range(0, 360) var deviation_angle: int = 0
|
||||
@export_range(0, 1000) var no_deviation_distance: int = 0
|
||||
|
||||
|
||||
@onready var jinkTimer : Timer = $JinkTimer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super._ready()
|
||||
_start_jink_timer()
|
||||
|
||||
|
||||
func _start_jink_timer() -> void:
|
||||
var random_delay := randf_range(jink_min_delay, jink_max_delay)
|
||||
jinkTimer.start(random_delay)
|
||||
|
||||
|
||||
func _on_jink_timer_timeout() -> void:
|
||||
var foe := _get_nearest_foe()
|
||||
if foe:
|
||||
_target_foe(foe)
|
||||
if position.distance_to(foe.position) > no_deviation_distance:
|
||||
_apply_random_deviation()
|
||||
else:
|
||||
_apply_random_deviation()
|
||||
|
||||
_start_jink_timer()
|
||||
|
||||
|
||||
func _target_foe(foe: AbstractShip) -> void:
|
||||
var current_speed := _velocity.length()
|
||||
var foe_direction := position.direction_to(foe.position)
|
||||
_velocity = current_speed * foe_direction
|
||||
|
||||
|
||||
func _apply_random_deviation() -> void:
|
||||
var deviation_rad := deg_to_rad(deviation_angle)
|
||||
var random_angle := randfn(0.0, deviation_rad / 6.0)
|
||||
_velocity = _velocity.rotated(random_angle)
|
||||
|
||||
|
||||
func _get_nearest_foe() -> AbstractShip:
|
||||
var nearest_foe : AbstractShip = null
|
||||
var minimal_distance := 1000000
|
||||
|
||||
for foe in _get_foes():
|
||||
var distance := floori(position.distance_to(foe.position))
|
||||
if distance < minimal_distance:
|
||||
minimal_distance = distance
|
||||
nearest_foe = foe
|
||||
|
||||
return nearest_foe
|
||||
|
||||
|
||||
func _get_foes() -> Array[AbstractShip]:
|
||||
var foes : Array[AbstractShip] = []
|
||||
|
||||
if collide_enemies:
|
||||
foes.append_array(get_tree().get_nodes_in_group("enemies"))
|
||||
|
||||
if collide_players:
|
||||
foes.append_array(get_tree().get_nodes_in_group("players"))
|
||||
|
||||
return foes
|
||||
|
||||
@@ -19,6 +19,10 @@ radius = 5.0
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
script = ExtResource("2_q73is")
|
||||
jink_min_delay = 0.05
|
||||
jink_max_delay = 0.09999999999999999
|
||||
deviation_angle = 90
|
||||
no_deviation_distance = 50
|
||||
damage = SubResource("Resource_1121u")
|
||||
speed = 900
|
||||
|
||||
@@ -27,3 +31,8 @@ texture = SubResource("PlaceholderTexture2D_1oexk")
|
||||
|
||||
[node name="CollisionShape2D" parent="." index="1"]
|
||||
shape = SubResource("CircleShape2D_l65ib")
|
||||
|
||||
[node name="JinkTimer" type="Timer" parent="." index="3"]
|
||||
one_shot = true
|
||||
|
||||
[connection signal="timeout" from="JinkTimer" to="." method="_on_jink_timer_timeout"]
|
||||
|
||||
Reference in New Issue
Block a user