bullet.gd 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. extends CharacterBody2D
  2. class_name Bullet
  3. var base_speed = 2000.0
  4. var speed_bound = 1000.0
  5. var speed = base_speed
  6. var target_node: Node2D = null
  7. var damage = 0
  8. var timeout: Timer = Timer.new()
  9. var last_vector: Vector2 = Vector2(0, 0)
  10. func get_class():
  11. return "Bullet"
  12. func _ready():
  13. timeout.set_wait_time(10.0)
  14. add_child(timeout)
  15. timeout.start()
  16. timeout.connect("timeout", _on_timeout)
  17. speed = base_speed
  18. func _process(delta: float):
  19. if target_node != null:
  20. if target_node.dead:
  21. target_node = null
  22. else:
  23. look_at(target_node.get_global_position())
  24. func _on_timeout():
  25. get_parent().remove_child(self)
  26. queue_free()
  27. func _physics_process(delta):
  28. if target_node != null and speed > speed_bound + 1.0:
  29. last_vector = Vector2(target_node.get_global_position() - get_global_position()).normalized()
  30. velocity = last_vector * speed
  31. else:
  32. velocity = last_vector * speed
  33. speed -= delta * base_speed
  34. speed = max(speed, speed_bound)
  35. move_and_slide()