Added tesla jumps

This commit is contained in:
2025-11-13 17:01:35 +03:00
parent aca8cb7b4f
commit 58f466d5aa
11 changed files with 41 additions and 9 deletions
+2 -2
View File
@@ -71,8 +71,8 @@ func _on_body_entered(body: Node2D) -> void:
var health_component : Health = body.find_child("Health") var health_component : Health = body.find_child("Health")
if health_component and health_component.has_method("apply_damage"): if health_component and health_component.has_method("apply_damage"):
health_component.apply_damage(damage) health_component.apply_damage(damage)
_process_hit_for_projectile() _process_hit_for_projectile(body)
func _process_hit_for_projectile() -> void: func _process_hit_for_projectile(_collided_body: Node2D) -> void:
queue_free() queue_free()
@@ -1 +1,2 @@
class_name CannonProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1 +1,2 @@
class_name GatlingProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1 +1,2 @@
class_name LaserProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1,3 +1,4 @@
class_name LauncherProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1,3 +1,4 @@
class_name MinelayerProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1 +1,2 @@
class_name PlasmaProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1,3 +1,4 @@
class_name RailgunProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -24,7 +25,7 @@ func _update_sprite(velocity: Vector2) -> void:
sprite_right.show() sprite_right.show()
func _process_hit_for_projectile() -> void: func _process_hit_for_projectile(_collided_body: Node2D) -> void:
if piercing == 0: if piercing == 0:
queue_free() queue_free()
else: else:
@@ -1,3 +1,4 @@
class_name ShrapnelProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -1,3 +1,4 @@
class_name TeslaProjectile
extends AbstractProjectile extends AbstractProjectile
@@ -10,11 +11,28 @@ extends AbstractProjectile
@onready var jinkTimer : Timer = $JinkTimer @onready var jinkTimer : Timer = $JinkTimer
var _collided_foes : Array[AbstractShip] = []
func _ready() -> void: func _ready() -> void:
damage = damage.duplicate()
super._ready() super._ready()
_start_jink_timer() _start_jink_timer()
func _process_hit_for_projectile(collided_body: Node2D) -> void:
if collided_body is AbstractShip:
_collided_foes.append(collided_body)
damage.value = floor(damage.value/2.0)
if damage.value == 0:
queue_free()
else:
_apply_random_deviation()
_start_jink_timer()
func _start_jink_timer() -> void: func _start_jink_timer() -> void:
var random_delay := randf_range(jink_min_delay, jink_max_delay) var random_delay := randf_range(jink_min_delay, jink_max_delay)
jinkTimer.start(random_delay) jinkTimer.start(random_delay)
@@ -60,10 +78,16 @@ func _get_nearest_foe() -> AbstractShip:
func _get_foes() -> Array[AbstractShip]: func _get_foes() -> Array[AbstractShip]:
var foes : Array[AbstractShip] = [] var foes : Array[AbstractShip] = []
if collide_enemies: var flags_by_group : Dictionary[String, bool] = {
foes.append_array(get_tree().get_nodes_in_group("enemies")) "enemies": collide_enemies,
"players": collide_players,
}
if collide_players: for group in flags_by_group:
foes.append_array(get_tree().get_nodes_in_group("players")) if not flags_by_group[group]: continue
var nodes := get_tree().get_nodes_in_group(group)
for node in nodes:
if not node in _collided_foes:
foes.append(node)
return foes return foes
@@ -19,8 +19,8 @@ radius = 5.0
collision_layer = 0 collision_layer = 0
collision_mask = 0 collision_mask = 0
script = ExtResource("2_q73is") script = ExtResource("2_q73is")
jink_min_delay = 0.05 jink_min_delay = 0.02
jink_max_delay = 0.09999999999999999 jink_max_delay = 0.05
deviation_angle = 90 deviation_angle = 90
no_deviation_distance = 50 no_deviation_distance = 50
damage = SubResource("Resource_1121u") damage = SubResource("Resource_1121u")