Files
fps_project_1/scripts/rat.gd
2025-02-17 19:59:58 -06:00

83 lines
2.4 KiB
GDScript

extends CharacterBody3D
var number_of_drops = 1
const MAX_LV = 20
const MAX_AV = 10
@export var dead_rat : Resource
@export var SPEED = 7
var end_hole
var control_node
var rng = RandomNumberGenerator.new()
@onready var level_control = get_tree().current_scene
@onready var anim_player = $AnimationPlayer
@onready var nav_agent = $NavigationAgent3D
@onready var ray = $RayCast3D
@onready var ray_2 = $RayCast3D2
@onready var ray_3 = $RayCast3D3
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _physics_process(delta):
# Navigation
if end_hole != null: #REMOVE WHEN FIXED LEVEL RELOAD
nav_agent.set_target_position(end_hole.global_transform.origin)
var next_nav_point = nav_agent.get_next_path_position()
velocity = (next_nav_point - global_transform.origin).normalized() * SPEED
look_at(end_hole.global_transform.origin, Vector3.UP)
move_and_slide()
func breaking(bullet_velocity):
#pickup drop
while number_of_drops > 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)
number_of_drops -= 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()