diff --git a/game/entities/weapons/abstract_projectile.gd b/game/entities/weapons/abstract_projectile.gd index 7c5a227..fba7e56 100644 --- a/game/entities/weapons/abstract_projectile.gd +++ b/game/entities/weapons/abstract_projectile.gd @@ -71,8 +71,8 @@ func _on_body_entered(body: Node2D) -> void: var health_component : Health = body.find_child("Health") if health_component and health_component.has_method("apply_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() diff --git a/game/entities/weapons/cannon/cannon_projectile.gd b/game/entities/weapons/cannon/cannon_projectile.gd index f4d8c80..3591c15 100644 --- a/game/entities/weapons/cannon/cannon_projectile.gd +++ b/game/entities/weapons/cannon/cannon_projectile.gd @@ -1 +1,2 @@ +class_name CannonProjectile extends AbstractProjectile diff --git a/game/entities/weapons/gatling/gatling_projectile.gd b/game/entities/weapons/gatling/gatling_projectile.gd index f4d8c80..2e296dd 100644 --- a/game/entities/weapons/gatling/gatling_projectile.gd +++ b/game/entities/weapons/gatling/gatling_projectile.gd @@ -1 +1,2 @@ +class_name GatlingProjectile extends AbstractProjectile diff --git a/game/entities/weapons/laser/laser_projectile.gd b/game/entities/weapons/laser/laser_projectile.gd index f4d8c80..63ca052 100644 --- a/game/entities/weapons/laser/laser_projectile.gd +++ b/game/entities/weapons/laser/laser_projectile.gd @@ -1 +1,2 @@ +class_name LaserProjectile extends AbstractProjectile diff --git a/game/entities/weapons/launcher/launcher_projectile.gd b/game/entities/weapons/launcher/launcher_projectile.gd index 4b8ba6d..92ef07e 100644 --- a/game/entities/weapons/launcher/launcher_projectile.gd +++ b/game/entities/weapons/launcher/launcher_projectile.gd @@ -1,3 +1,4 @@ +class_name LauncherProjectile extends AbstractProjectile diff --git a/game/entities/weapons/minelayer/minelayer_projectile.gd b/game/entities/weapons/minelayer/minelayer_projectile.gd index 044ec76..26fc708 100644 --- a/game/entities/weapons/minelayer/minelayer_projectile.gd +++ b/game/entities/weapons/minelayer/minelayer_projectile.gd @@ -1,3 +1,4 @@ +class_name MinelayerProjectile extends AbstractProjectile diff --git a/game/entities/weapons/plasma/plasma_projectile.gd b/game/entities/weapons/plasma/plasma_projectile.gd index f4d8c80..dd08fdc 100644 --- a/game/entities/weapons/plasma/plasma_projectile.gd +++ b/game/entities/weapons/plasma/plasma_projectile.gd @@ -1 +1,2 @@ +class_name PlasmaProjectile extends AbstractProjectile diff --git a/game/entities/weapons/railgun/railgun_projectile.gd b/game/entities/weapons/railgun/railgun_projectile.gd index a4426db..9eecaac 100644 --- a/game/entities/weapons/railgun/railgun_projectile.gd +++ b/game/entities/weapons/railgun/railgun_projectile.gd @@ -1,3 +1,4 @@ +class_name RailgunProjectile extends AbstractProjectile @@ -24,7 +25,7 @@ func _update_sprite(velocity: Vector2) -> void: sprite_right.show() -func _process_hit_for_projectile() -> void: +func _process_hit_for_projectile(_collided_body: Node2D) -> void: if piercing == 0: queue_free() else: diff --git a/game/entities/weapons/shrapnel/shrapnel_projectile.gd b/game/entities/weapons/shrapnel/shrapnel_projectile.gd index 8499277..695ecfd 100644 --- a/game/entities/weapons/shrapnel/shrapnel_projectile.gd +++ b/game/entities/weapons/shrapnel/shrapnel_projectile.gd @@ -1,3 +1,4 @@ +class_name ShrapnelProjectile extends AbstractProjectile diff --git a/game/entities/weapons/tesla/tesla_projectile.gd b/game/entities/weapons/tesla/tesla_projectile.gd index 6aa20ee..cc6aa56 100644 --- a/game/entities/weapons/tesla/tesla_projectile.gd +++ b/game/entities/weapons/tesla/tesla_projectile.gd @@ -1,3 +1,4 @@ +class_name TeslaProjectile extends AbstractProjectile @@ -10,11 +11,28 @@ extends AbstractProjectile @onready var jinkTimer : Timer = $JinkTimer +var _collided_foes : Array[AbstractShip] = [] + + func _ready() -> void: + damage = damage.duplicate() super._ready() _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: var random_delay := randf_range(jink_min_delay, jink_max_delay) jinkTimer.start(random_delay) @@ -60,10 +78,16 @@ func _get_nearest_foe() -> AbstractShip: func _get_foes() -> Array[AbstractShip]: var foes : Array[AbstractShip] = [] - if collide_enemies: - foes.append_array(get_tree().get_nodes_in_group("enemies")) + var flags_by_group : Dictionary[String, bool] = { + "enemies": collide_enemies, + "players": collide_players, + } - if collide_players: - foes.append_array(get_tree().get_nodes_in_group("players")) + for group in flags_by_group: + 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 diff --git a/game/entities/weapons/tesla/tesla_projectile.tscn b/game/entities/weapons/tesla/tesla_projectile.tscn index 7aa29ed..6ccca62 100644 --- a/game/entities/weapons/tesla/tesla_projectile.tscn +++ b/game/entities/weapons/tesla/tesla_projectile.tscn @@ -19,8 +19,8 @@ radius = 5.0 collision_layer = 0 collision_mask = 0 script = ExtResource("2_q73is") -jink_min_delay = 0.05 -jink_max_delay = 0.09999999999999999 +jink_min_delay = 0.02 +jink_max_delay = 0.05 deviation_angle = 90 no_deviation_distance = 50 damage = SubResource("Resource_1121u")