LaserWeapon reworked to hitscan

This commit is contained in:
2025-12-22 16:45:22 +03:00
parent 77981194dd
commit e5155584dd
23 changed files with 190 additions and 174 deletions
@@ -2,21 +2,46 @@ class_name AbstractLaserWeapon
extends AbstractWeapon
@export var damage : AbstractDamage
@export_range(-100.0, 100.0) var line_texture_speed := 7.0
@onready var sprite : AnimatedSprite2D = $AnimatedSprite2D
@onready var cooldown_timer : Timer = $CooldownTimer
@onready var ray_cast : RayCast2D = $RayCast2D
@onready var line : Line2D = $Line2D
@onready var hit_particles : GPUParticles2D = $HitParticles
func _ready() -> void:
sprite.play(SHOT_ANIMATION)
func shoot(ship_velocity: Vector2) -> bool:
var is_shot := super.shoot(ship_velocity)
if is_shot:
_can_shoot = false
cooldown_timer.start()
func _process(_delta: float) -> void:
var collision_point: Vector2
ray_cast.force_raycast_update()
if ray_cast.is_colliding():
collision_point = ray_cast.get_collision_point() - global_position
hit_particles.position = collision_point
hit_particles.show()
else:
collision_point = muzzle.position + ray_cast.target_position
hit_particles.hide()
return is_shot
line.clear_points()
line.add_point(muzzle.position)
line.add_point(collision_point)
func shoot(_ship_velocity: Vector2) -> bool:
if not _can_shoot: return false
if ray_cast.is_colliding():
AbstractProjectile._try_to_damage(ray_cast.get_collider(), damage)
_can_shoot = false
cooldown_timer.start()
return true
func _on_cooldown_timer_timeout() -> void: