gun.gd 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. extends Node3D
  2. @onready var animation_player = $AnimationPlayer
  3. @onready var gun_audio_player = $"Gun Shoot"
  4. @onready var ammo_label = $ammo
  5. @onready var bullethole = preload("res://Scenes/bullethole.tscn")
  6. var reloading = false
  7. var shooting = false
  8. var max_ammo = 5
  9. var ammo = 5
  10. func fire(raycast, player):
  11. var hand = player.get_node("Neck/Hand")
  12. var camera = player.get_node("Neck/Camera3D")
  13. if reloading:
  14. animation_player.play("hand_reload")
  15. await animation_player.animation_finished
  16. ammo = 5
  17. reloading = false
  18. if shooting:
  19. animation_player.play("hand_fire")
  20. shooting = false
  21. if hand.get_child_count() > 0 and hand.get_child(0).is_in_group("gun"):
  22. var action = "fire"
  23. if GameManager.is_running_on_mobile(): action = "mobile_fire"
  24. if Input.is_action_pressed("reload"): reloading = true
  25. if Input.is_action_just_pressed(action) and ammo > 0 and not reloading:
  26. if not animation_player.is_playing():
  27. ammo = ammo - 1
  28. ammo_label.text = str(ammo) + "/5 ammo"
  29. gun_audio_player.playing = false
  30. gun_audio_player.playing = true
  31. if raycast.is_colliding():
  32. var target = raycast.get_collider()
  33. if target.is_in_group("killable"):
  34. target.die(camera.global_basis.z)
  35. if not GameManager.low_detail:
  36. var hole = bullethole.instantiate()
  37. target.add_child(hole)
  38. hole.global_position = raycast.get_collision_point()
  39. hole.look_at(hole.global_transform.origin + raycast.get_collision_normal(), Vector3.UP)
  40. if raycast.get_collision_normal() != Vector3.UP and raycast.get_collision_normal() != Vector3.DOWN:
  41. hole.rotate_object_local(Vector3(1, 0, 0), 90)
  42. shooting = true