33 lines
917 B
GDScript
33 lines
917 B
GDScript
extends Area3D
|
|
|
|
var parent: PoliceCar
|
|
|
|
func _ready() -> void:
|
|
assert(get_parent() is PoliceCar)
|
|
parent = get_parent()
|
|
|
|
func hit(proj: Node3D, _damage: float) -> bool:
|
|
if proj == null: return false
|
|
if proj is not PlayerProjectile: return false
|
|
|
|
var projectile := proj as PlayerProjectile
|
|
if not projectile.can_hit_weak_points: return false
|
|
|
|
var angle := projectile.velocity.angle_to(-parent.velocity)
|
|
var weak_point_hit := rad_to_deg(angle) < 25.
|
|
|
|
if weak_point_hit:
|
|
var explosion := preload("res://player/explosion/explosion.tscn").instantiate()
|
|
explosion.position = parent.position
|
|
explosion.scale = Vector3.ONE * 1.5
|
|
parent.add_sibling(explosion)
|
|
|
|
var label_vfx := preload("res://utils/label_vfx/label_vfx.tscn").instantiate()
|
|
label_vfx.position = parent.position
|
|
parent.add_sibling(label_vfx)
|
|
|
|
parent.kill(proj.global_position)
|
|
|
|
SignalBus.perfect_shot_hit.emit()
|
|
|
|
return weak_point_hit
|