123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- extends Node3D
- @onready var animation_player = $AnimationPlayer
- @onready var gun_audio_player = $"Gun Shoot"
- @onready var ammo_label = $ammo
- @onready var bullethole = preload("res://Scenes/bullethole.tscn")
- var reloading = false
- var shooting = false
- var max_ammo = 5
- var ammo = 5
- func fire(raycast, player):
- var hand = player.get_node("Neck/Hand")
- var camera = player.get_node("Neck/Camera3D")
-
- if reloading:
- animation_player.play("hand_reload")
- await animation_player.animation_finished
- ammo = 5
- reloading = false
-
- if shooting:
- animation_player.play("hand_fire")
- shooting = false
-
- if hand.get_child_count() > 0 and hand.get_child(0).is_in_group("gun"):
- var action = "fire"
- if GameManager.is_running_on_mobile(): action = "mobile_fire"
-
- if Input.is_action_pressed("reload"): reloading = true
- if Input.is_action_just_pressed(action) and ammo > 0 and not reloading:
- if not animation_player.is_playing():
- ammo = ammo - 1
- ammo_label.text = str(ammo) + "/5 ammo"
- gun_audio_player.playing = false
- gun_audio_player.playing = true
- if raycast.is_colliding():
- var target = raycast.get_collider()
- if target.is_in_group("killable"):
- target.die(camera.global_basis.z)
-
- if not GameManager.low_detail:
- var hole = bullethole.instantiate()
- target.add_child(hole)
- hole.global_position = raycast.get_collision_point()
- hole.look_at(hole.global_transform.origin + raycast.get_collision_normal(), Vector3.UP)
- if raycast.get_collision_normal() != Vector3.UP and raycast.get_collision_normal() != Vector3.DOWN:
- hole.rotate_object_local(Vector3(1, 0, 0), 90)
-
- shooting = true
|