stuff
This commit is contained in:
72
autoload/doors.gd
Normal file
72
autoload/doors.gd
Normal file
@@ -0,0 +1,72 @@
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user