62 lines
1.4 KiB
GDScript
62 lines
1.4 KiB
GDScript
class_name Geep extends "gear.gd"
|
|
|
|
func gear_name():
|
|
return "Geep"
|
|
func continuous():
|
|
return false
|
|
func use_basis():
|
|
return idle_basis()
|
|
|
|
# multiplier of player's speed
|
|
const speed = 2
|
|
# how far the vehicle lifts the player off the ground
|
|
const lift = 2
|
|
|
|
var box = null
|
|
var driver = null
|
|
var active = false
|
|
|
|
func init_driver(player):
|
|
driver = player
|
|
if not box:
|
|
box = Vector3(driver.get_node("CollisionShape3D").shape.size)
|
|
|
|
func mount():
|
|
active = true
|
|
position = Vector3(-driver.get_node("Pivot/Container").position)
|
|
position.y += 1
|
|
driver.message(
|
|
"Press [%s] to exit the Geep"
|
|
% Util.input_action_string("gear_use"))
|
|
driver.get_node("CameraGimbal").position.y += lift
|
|
driver.get_node("Pivot/Mesh").position.y += lift
|
|
driver.get_node("CollisionShape3D").shape.size = $GearMesh/Vehicle/CollisionShape3D.shape.size
|
|
driver.protected = true
|
|
driver.suspended = true
|
|
|
|
func unmount():
|
|
active = false
|
|
position = Vector3.ZERO
|
|
driver.message("")
|
|
driver.get_node("CameraGimbal").position = Vector3.ZERO
|
|
driver.get_node("Pivot/Mesh").position = Vector3.ZERO
|
|
driver.get_node("CollisionShape3D").shape.size = box
|
|
driver.protected = false
|
|
driver.suspended = false
|
|
|
|
func on_use(player):
|
|
init_driver(player)
|
|
if active:
|
|
unmount()
|
|
else:
|
|
mount()
|
|
|
|
func on_unequip(player):
|
|
init_driver(player)
|
|
unmount()
|
|
|
|
func _physics_process(_delta):
|
|
if not active:
|
|
return
|
|
|
|
driver.move_player(0, -speed)
|