godot-psd-training/sceen/platform/screenDoor.gd
2024-05-06 09:54:45 +08:00

91 lines
2.4 KiB
GDScript

extends Node3D
##屏蔽门
class_name ScreenDoor
@onready var left_animation_player: AnimationPlayer = $LeftAnimationPlayer
@onready var right_animation_player: AnimationPlayer = $RightAnimationPlayer
##是否设置隔离带
var isSetIsolationStrip:bool = false
## 屏蔽门的状态枚举
enum ScreenDoor_State{
opening,# 正在开门
open,#开到位
closeing,#正在关门
close,# 关到位
}
##屏蔽门的状态
@onready var screenDoorState : ScreenDoor_State = ScreenDoor_State.close :
set(value):
if screenDoorState != value:
screenDoorState = value
if screenDoorState == ScreenDoor_State.opening :
left_animation_player.play("leftOpen")
right_animation_player.play("rightOpen")
elif screenDoorState == ScreenDoor_State.closeing :
left_animation_player.play("leftClose")
right_animation_player.play("rightClose")
##打开屏蔽门
func openScreenDoor ()-> void:
if screenDoorState == ScreenDoor_State.close :
screenDoorState=ScreenDoor_State.opening
##关闭屏蔽门
func closeScreenDoor ()-> void:
if screenDoorState == ScreenDoor_State.open :
screenDoorState=ScreenDoor_State.closeing
func _on_left_animation_player_animation_finished(anim_name: StringName) -> void:
if anim_name == 'leftOpen':
screenDoorState = ScreenDoor_State.open
elif anim_name == 'leftClose':
screenDoorState = ScreenDoor_State.close
## 屏蔽门的故障枚举
enum ScreenDoor_Fault_State{
noFault,#无故障
openFault,# 开门故障
closeFault,# 关门故障
pinchPeople,#夹人
glassBreakage,#玻璃破碎
}
##屏蔽门的故障状态
@onready var screenDoorFaultState : ScreenDoor_Fault_State = ScreenDoor_Fault_State.noFault :
set(value):
if screenDoorFaultState != value:
screenDoorFaultState = value
##设置故障
func setScreenDoorFault (faultType:ScreenDoor_Fault_State)-> void:
screenDoorFaultState = faultType
##恢复故障
func removeScreenDoorFault ()-> void:
screenDoorFaultState = ScreenDoor_Fault_State.noFault
##以下是lcb相关
class LcbKeyWindow :
var keyName: String
var keyState:LcbWindow.KNOB_STATE
func _init(keyName: String, keyState: LcbWindow.KNOB_STATE):
self.keyName = keyName
self.keyState = keyState
var lcbKey = LcbKeyWindow.new('',LcbWindow.KNOB_STATE.AUTO)
signal clickLcbSignalAndSent(screenDoor)
func _on_lcb_click() -> void:
clickLcbSignalAndSent.emit(self)
##点击屏蔽门
signal clicksScreenDoorSignal(screenDoor,mousePosition)