65 lines
1.4 KiB
GDScript
65 lines
1.4 KiB
GDScript
extends KinematicBody
|
|
|
|
# export variables
|
|
export(bool) var invert_open
|
|
export(bool) var card_door
|
|
export(int) var door_lvl
|
|
|
|
var outline: MeshInstance
|
|
|
|
# const
|
|
const OPENING_SPEED = 150
|
|
|
|
# private members
|
|
var _startingRotY : float
|
|
var _isMoving = false
|
|
var _isOpening = false
|
|
var _degrees = 0
|
|
var _opening_dir = 1
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
_startingRotY = global_transform.basis.get_euler().y
|
|
outline = get_node("DoorMesh/Outline") as MeshInstance
|
|
|
|
if invert_open:
|
|
_opening_dir = -1
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta):
|
|
if _isMoving:
|
|
_door_move(delta)
|
|
|
|
|
|
# called by player to interact with this scene
|
|
func do_interact(var player):
|
|
if card_door:
|
|
if player.keycard_lvl >= door_lvl:
|
|
_isMoving = true
|
|
_isOpening = !_isOpening
|
|
else:
|
|
print("keycard level too low")
|
|
elif player.key_chain.has(door_lvl) or door_lvl == 0:
|
|
_isMoving = true
|
|
_isOpening = !_isOpening
|
|
else:
|
|
print("you don't have the right key")
|
|
|
|
|
|
# opens or closes the door
|
|
func _door_move(delta):
|
|
if _isOpening:
|
|
if _degrees < 105:
|
|
_degrees += OPENING_SPEED * delta
|
|
else:
|
|
_degrees = 105
|
|
_isMoving = false
|
|
else:
|
|
if _degrees > 0:
|
|
_degrees -= OPENING_SPEED * delta
|
|
else:
|
|
_degrees = 0
|
|
_isMoving = false
|
|
|
|
rotate_y(_degrees * _opening_dir * PI/180 - global_transform.basis.get_euler().y + _startingRotY)
|