70 lines
1.8 KiB
GDScript
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"
|