Files
academy2-game/autoload/doors.gd
Segey Lapin d6c8a24f5a stuff
2021-10-26 21:52:15 +03:00

73 lines
2.1 KiB
GDScript3

extends Node
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
var door_list = {}
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func register_door(obj: Node, name, door_obj, axis, cangle, oangle, spd):
assert(obj)
assert(door_obj)
var root_name = str(obj.get_path())
if !door_list.has(root_name):
door_list[root_name] = {}
var base = door_obj.transform
door_list[root_name][name] = {}
door_list[root_name][name].obj = door_obj
door_list[root_name][name].base = base
door_list[root_name][name].axis = axis
door_list[root_name][name].cangle = cangle
door_list[root_name][name].oangle = oangle
door_list[root_name][name].cur_angle = cangle
door_list[root_name][name].speed = spd
door_list[root_name][name].active = false
door_list[root_name][name].state = 0
func open_door(obj, name):
var root_name = str(obj.get_path())
if !door_list.has(root_name):
return
door_list[root_name][name].active = true
door_list[root_name][name].state = 1
func close_door(obj, name):
var root_name = str(obj.get_path())
if !door_list.has(root_name):
return
door_list[root_name][name].active = true
door_list[root_name][name].state = 0
func is_active(obj, name):
var root_name = str(obj.get_path())
if !door_list.has(root_name):
return false
return door_list[root_name][name].active
func get_state(obj, name):
var root_name = str(obj.get_path())
if !door_list.has(root_name):
return -1
return door_list[root_name][name].state
func _process(delta):
for e in door_list.keys():
for j in door_list[e].keys():
var m = door_list[e][j]
if m.active:
var change = min(1.0, m.speed * delta)
match m.state:
0:
if abs(m.cur_angle - m.cangle) < 0.001:
m.cur_angle = m.cangle
m.active = false
else:
m.cur_angle = lerp_angle(m.cur_angle, m.cangle, change)
1:
if abs(m.cur_angle - m.oangle) < 0.001:
m.cur_angle = m.oangle
m.active = false
else:
m.cur_angle = lerp_angle(m.cur_angle, m.oangle, change)
m.obj.transform.basis = m.base.basis.rotated(m.axis, m.cur_angle)