Files
wretched/entities/grabject.gd
2025-08-12 04:49:06 -04:00

70 lines
1.8 KiB
GDScript

extends RigidBody3D
var grabject : bool = true
var low_height : bool = false
@export var model : String = "mug"
@export var impact_loud : bool = false
@export var impact_lethal : bool = false
@export var impact_annoyonly : bool = false
@export var impact_sound : String = "genericimpact"
@export var prompt : String = "Grab mug"
@export var icon : String = "hand"
var icon_offset : float = 0.0
var collided_this_frame : bool = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
if model == "mug" or "mug_full":
$mesh_mugge.visible = true
$shape_mugge.disabled = false
$shape_mugge_secondary.disabled = false
icon_offset = $shape_mugge.shape.height / 2
if model == "mug_full":
$mesh_mugge/coffee.visible = true
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
pass
func _physics_process(_delta: float) -> void:
if linear_velocity.length() < 0.025:
$SleepTimer.start(2)
func sleep():
freeze = true
func hold(delay):
freeze = true
$DelayTimer.start(delay)
func hold2():
set_collision_layer_value(1, false)
if model == "mug" or model == "mug_full":
$mesh_mugge.visible = false
if model == "mug_full":
mug_spill(global_transform.origin)
global_transform.origin.y += 500
func unhold(spawnlocation):
global_transform.origin = spawnlocation
freeze = false
if model == "mug" or model == "mug_full":
$mesh_mugge.visible = true
func throw(spawnlocation, direction, force):
unhold(spawnlocation)
apply_central_impulse(direction * force)
func handle_collision(_hush):
var colliders = get_colliding_bodies()
for body in colliders:
print(body.get_name())
if !collided_this_frame and body.get("npc"):
body.impact()
func mug_spill(_location):
$mesh_mugge/coffee.visible = false
model = "mug"
prompt = "Grab mug"