extends Node3D @export_group("Gun Feel") @export var gun_name : String @export var gun_icon : Texture2D @export_enum("Light", "Medium", "Heavy", "Shotgun", "Rocket","Melee") var ammo_type: int @export var collision_shape : Node @export var fov_zoom_amt = 0 @export var ads : bool = false @export var recoil_amount : Vector3 = Vector3(0,.2,.2) @export var bullet_damage = 1 @export_group("Gun Assets") @export_subgroup("Main Assets") @export var anim_player : Node @export_subgroup("Audio Clips") @export var audio_fire : Node @onready var player = get_tree().current_scene.player @onready var level_control = get_tree().current_scene @onready var muzzle_smoke = preload("res://assets/muzzle_smoke.tscn") @onready var blade_ray: RayCast3D = $MacheteHandle/blade_ray var max_ammo = 0 var start_mags = 0 var start_position var start_rotation var random_spread_start var cycle_count_start var cycle_count var rng = RandomNumberGenerator.new() var gun_index # Called when the node enters the scene tree for the first time. func _ready(): collision_shape.disabled = true # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta): if blade_ray.is_colliding(): var body = blade_ray.get_collider() if body.has_method("hit"): body.hit(bullet_damage) func shoot(delta): if !anim_player.is_playing(): #audio and anims anim_player.play("shoot") vibration() player.recoil.add_recoil(Vector3(0,recoil_amount.y,recoil_amount.z),10,10) player.recoil.add_gun_recoil(recoil_amount.x) SignalBus.emit_signal("shot_fired") func collider_enable(): collision_shape.disabled = false func collider_disable(): collision_shape.disabled = true func swapped_out(): queue_free() func vibration(): Input.start_joy_vibration(0,.1,.5,.1) func _on_area_3d_body_entered(body: Node3D) -> void: if body.has_method("hit"): body.hit(bullet_damage) if body.is_in_group("breakable"): var current_velocity = transform.basis * Vector3(0,0,-1) body.breaking(current_velocity)