68 lines
2.0 KiB
GDScript
68 lines
2.0 KiB
GDScript
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)
|