extends Node3D @onready var animationtree: AnimationTree = $AnimationPlayer/AnimationTree @onready var timer: Timer = $CooldownTimer @export_category("Firing") @export var MuzzleFlash: PackedScene @export var Origin: Node3D @export var BulletOrigin: Node3D var statemachine: AnimationNodeStateMachinePlayback # Called when the node enters the scene tree for the first time. func _ready() -> void: self.statemachine = animationtree['parameters/playback'] func _input(event: InputEvent) -> void: if event is not InputEventMouseButton: return if not event.is_action_pressed('player_shoot'): return if self.timer.time_left > 0: return if Player.Instance.PlayerState == Player.PlayerStates.SPRINTING: return var travelTarget = 'Fire' if Player.Instance.PlayerState == Player.PlayerStates.CROUCHING: travelTarget = 'Crouched Fire' self.animationtree.set('parameters/' + travelTarget + '/blend_position', randf_range(0, 2)) self.statemachine.travel(travelTarget) fireBullet() self.timer.start() func fireBullet() -> void: var instance = self.MuzzleFlash.instantiate(PackedScene.GEN_EDIT_STATE_INSTANCE) Origin.add_child(instance) var query = PhysicsRayQueryParameters3D.create(BulletOrigin.global_position, BulletOrigin.global_position + BulletOrigin.global_basis.z * -200) var result = get_world_3d().direct_space_state.intersect_ray(query) if not result: print('No result') return var health = result.collider.get_node('Health') if health: print("Dealing Damage") result.collider.health.take_damage(1, Vector2(0,0)) return print('No Health Element')