extends CharacterBody3D class_name Rat @export var dead_rat : Resource @export var SPEED = 5 @export var state_machine : StateMachine @onready var level_control = get_tree().current_scene @onready var anim_player = $AnimationPlayer @onready var nav_agent = $NavigationAgent3D var end_hole var number_of_drops = 1 const MAX_LV = 20 const MAX_AV = 10 # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): move_and_slide() func breaking(bullet_velocity): var drops_left = number_of_drops #pickup drop while drops_left > 0: var pickup_spawn = level_control.ITEM_PICKUP.instantiate() var item_stats = level_control.pickup_spawn(false) ##SET VARIABLES pickup_spawn.pickup_type = item_stats["pickup_type"] pickup_spawn.ammo_type = item_stats["ammo_type"] pickup_spawn.value = item_stats["value"] var lv_x = randf_range(-MAX_LV,MAX_LV) var lv_y = randf_range(0,MAX_LV) var lv_z = randf_range(-MAX_LV,MAX_LV) var av_x = randf_range(-MAX_AV,MAX_AV) var av_y = randf_range(-MAX_AV,MAX_AV) var av_z = randf_range(-MAX_AV,MAX_AV) # Random Item Drop pickup_spawn.position = self.global_position pickup_spawn.transform.basis = self.global_transform.basis pickup_spawn.linear_velocity += self.global_transform.basis * Vector3(lv_x,lv_y,lv_z) pickup_spawn.angular_velocity += self.global_transform.basis * Vector3(av_x,av_y,av_z) get_tree().get_root().add_child(pickup_spawn) drops_left -= 1 #animate dead var spawn_broken = dead_rat.instantiate() spawn_broken.position = global_position spawn_broken.transform.basis = global_transform.basis spawn_broken.rotation = rotation var bits = spawn_broken.get_children() for bit in bits: if bit is RigidBody3D: bit.linear_velocity += bullet_velocity if bit is GPUParticles3D: bit.emitting = true var pieces = spawn_broken.get_children() get_tree().get_root().add_child(spawn_broken) queue_free() func _on_navigation_agent_3d_velocity_computed(safe_velocity: Vector3) -> void: state_machine.current_state.velocity_computed(safe_velocity)