Files
fps_project_1/scripts/chest_1.gd

67 lines
1.7 KiB
GDScript

extends RigidBody3D
class_name Chest
@export var weapon_drops : Array[Resource]
@export var health : float = 30
@export var outline_meshes : Array[MeshInstance3D]
@onready var serial_label: Label3D = $chest_lid/serial_number
var serial_number
var open = false
var drop_weapon
@onready var anim_player: AnimationPlayer = $AnimationPlayer
@onready var item_spawn: RayCast3D = $itemspawn
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
drop_weapon = weapon_drops.pick_random().instantiate()
if serial_number == null:
serial_number = GameGlobals.chests_spawned
GameGlobals.chests_spawned += 1
serial_label.text = "#" + str(serial_number).pad_zeros(4)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func hit(dam):
health -= dam
if !open and health <= 0:
open_chest()
func open_chest():
anim_player.play("open")
if outline_meshes != null:
for i in outline_meshes:
i.visible = false
open = true
func spawn_drop():
drop_weapon.position = item_spawn.global_position
drop_weapon.transform.basis = item_spawn.global_transform.basis
drop_weapon.scale = Vector3(1,1,1)
drop_weapon.linear_velocity += Vector3(0,0,-5.0) * item_spawn.global_transform.basis
get_tree().current_scene.add_child(drop_weapon)
func interact():
hit(1)
func save():
var save_dict = {
"filename" : get_scene_file_path(),
"parent" : get_parent().get_path(),
"pos_x" : position.x,
"pos_y" : position.y,
"pos_z" : position.z,
"rot_x" : rotation.x,
"rot_y" : rotation.y,
"rot_z" : rotation.z,
"drop_weapon" : drop_weapon,
"health" : health,
"serial_number" : serial_number
}
return save_dict