godot-psd-training/trainings/trainingTotalOpenDoorFault/trainingTotalOpenDoorFault.gd

290 lines
8.6 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Node
## 实训名称
@export var trainingName: String = "实训"
## 场景描述
@export var trainingDesc: String = "场景描述"
var stepOperation = []
var handleStep = [
{
"stepName": "步骤一:站务员手指:上行整列故障门门头灯灭,列车已开门。站务员口呼:上行整列站台门故障,每节车厢手动开启1个站台门供乘客乘降。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "上行整列站台门故障,每节车厢手动开启1个站台门供乘客乘降。"
},
{
"stepName": "步骤二:用对讲机汇报值班站长:值班站长,上行整列站台门故障,请求支援。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "值班站长,上行整列站台门故障,请求支援。"
},
{
"stepName": "值班站长(机器人)自动回复:收到。",
"stepOperation": [],
"next": false,
"play": true,
"playPath": "res://Assets/training_speech/sd.mp3",
"stepTip": false,
"checkVoice": "",
},
{
"stepName": "步骤三用LCB开启任意一个故障门。",
"stepOperation": ["LCB2","LCB_Key2","confirmUseKey","LCB2RightRotate","LCB2RightRotate"],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "",
},
{
"stepName": "步骤四:站台门打开后,口呼:请您抓紧在此门上下车。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "请您抓紧在此门上下车。"
},
{
"stepName": "步骤五:通知司机:司机,上行乘客全部乘降完毕,请关门。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "司机,上行乘客全部乘降完毕,请关门。"
},
{
"stepName": "司机(机器人)自动回复:收到。",
"stepOperation": [],
"next": false,
"play": true,
"playPath": "res://Assets/training_speech/sd.mp3",
"stepTip": false,
"checkVoice": "",
},
{
"stepName": "步骤六站务员使用互锁解除发车将上行PSL互锁解除开关钥匙旋转至互锁解除位互锁解除指示灯点亮并保持互锁解除位。",
"stepOperation": ["PSL","HSJC_Key","confirmUseKey","InterlockReleaseSwitchRightRotate"],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": ""
},
{
"stepName": "步骤七:确认列车车尾超过站台安全门端门。口呼:列车已发出。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "列车已发出。"
},
{
"stepName": "步骤八松开上行PSL互锁解除开关钥匙并取出钥匙互锁解除指示灯熄灭。",
"stepOperation": ["InterlockReleaseSwitchLeftRotate","removeHSJCKeyOfWindowPsl"],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": ""
},
{
"stepName": "步骤九:口呼:乘客您好,此站台门故障,请您远离此门,注意安全。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "乘客您好,此站台门故障,请您远离此门,注意安全。"
},
{
"stepName": "步骤十使用LCB钥匙将站台门关闭并将钥匙打回自动位。",
"stepOperation": ["LCB2","LCB2LeftRotate","LCB2LeftRotate"],
"next": false,
"checkVoice": "",
"play": false,
"playPath": "",
"stepTip": true,
},
{
"stepName": "步骤十一:口呼:故障门处置完毕。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "故障门处置完毕。"
},
{
"stepName": "步骤十二:用对讲机汇报值班员、值班站长:值班站长、值班员,上行整列故障门已处理完毕。",
"stepOperation": [],
"next": false,
"play": false,
"playPath": "",
"stepTip": true,
"checkVoice": "值班站长、值班员,上行整列故障门已处理完毕。"
},
{
"stepName": "值班员回复:收到。值班站长(机器人)自动回复:收到。",
"stepOperation": [],
"next": false,
"checkVoice": "",
"play": true,
"playPath": "res://Assets/training_speech/sd.mp3",
"stepTip": false,
},
{
"stepName": "实训已完成!",
"stepOperation": [],
"next": false,
"checkVoice": "",
"play": false,
"playPath": "",
"stepTip": true,
},
]
## 步骤操作执行index
var stepOperationIndex = 0
## 步骤执行index
var handleStepIndex = 0
func _ready():
$TrainingDescDialog.title = trainingName
$TrainingDescDialog.updateSceneDesc(trainingDesc)
$TrainingDescDialog.grab_focus()
stepOperationIndex = 0
handleStepIndex = 0
func _on_training_desc_dialog_start_training():
$total.trainComeAndOpenScreenDoor()
$playOpenDoorMusicTimer.start()
$total.setAssignScreenDoorsOpenFault([TotalScene.ScreenDoor_name.screenDoor1,TotalScene.ScreenDoor_name.screenDoor2,TotalScene.ScreenDoor_name.screenDoor3,TotalScene.ScreenDoor_name.screenDoor4])
func nextStep():
if handleStepIndex < handleStep.size():
var step = handleStep[handleStepIndex]
handleStepIndex = handleStepIndex + 1
if step.stepTip == true and $total.trainingMode != TotalScene.Training_Mode.Exam:
$StepTip.updateOperationTip(step.stepName)
if step.stepOperation.size() > 0:
initStepOperation()
if step.next == true:
$StepTimer.wait_time = step.waitTime
$StepTimer.connect("timeout", nextStep)
$StepTimer.start()
if step.checkVoice:
await $VoiceCommunication.speech_record_check(step.checkVoice)
if step.stepName != "步骤四:站台门打开后,口呼:请您抓紧在此门上下车。" :
nextStep()
elif step.stepName == "步骤四:站台门打开后,口呼:请您抓紧在此门上下车。" :
$tellDriverTimer.start()
if step.play:
var sound = load(step.playPath)
await $VoiceCommunication.play_reply(sound)
if step.stepName == "司机(机器人)自动回复:收到。" :
$trainDoorCloseTimer.start()
else :
nextStep()
func setOperationNodeAndTip():
$total.currenNeedClickNode = stepOperation[stepOperationIndex]
if $total.trainingMode == TotalScene.Training_Mode.Teach:
$TrainTip.setTrainingTip($total.allClickEquipmentInfo[stepOperation[stepOperationIndex]])
func initStepOperation():
stepOperation = handleStep[handleStepIndex-1].stepOperation
stepOperationIndex = 0
setOperationNodeAndTip()
##与站台交互点击信号
func _on_total_current_click_check_signal(isCorrect):
if isCorrect:
if $total.currentClickNode == 'InterlockReleaseSwitchRightRotate' :
$total.trainLeave(true)
stepOperationIndex = stepOperationIndex + 1
$StepJudgment.hideError()
if stepOperationIndex < stepOperation.size():
setOperationNodeAndTip()
elif $total.currentClickNode != 'LCB2RightRotate' and $total.currentClickNode != 'LCB2LeftRotate':
$TrainTip.setTrainingTip('')
nextStep()
else :
$TrainTip.setTrainingTip('')
else:
if $total.trainingMode != TotalScene.Training_Mode.Exam:
$StepJudgment.showError()
##开门信号
func _on_total_screen_door_open_confirm_signal(screenDoor):
if screenDoor.name == "screenDoor2" :
nextStep()
##关门信号
func _on_total_screen_door_close_confirm_signal(screenDoor):
if screenDoor.name == "screenDoor2" :
nextStep()
##车门开门信号
func _on_total_train_door_open_confirm_signal(trainDoor: TrainDoor) -> void:
if trainDoor.name == "trainDoor2" :
nextStep()
##车门关门信号
func _on_total_train_door_close_confirm_signal(trainDoor: TrainDoor) -> void:
if trainDoor.name == "trainDoor2" :
nextStep()
func _on_confirm_dialog_two_cancel():
get_tree().paused = false
func _on_confirm_dialog_two_confirm():
get_tree().paused = false
get_tree().reload_current_scene()
func _on_fault_tip_dialog_close_requested() -> void:
$FaultTipDialog.hide()
func _on_fault_tip_dialog_comfirm_signal() -> void:
nextStep()
func _on_play_open_door_music_timer_timeout() -> void:
$AudioStreamPlayer.play()
func _on_tell_driver_timer_timeout() -> void:
nextStep()
func _on_train_door_close_timer_timeout() -> void:
$AudioStreamPlayer.play()
$total.closeOnlyTrainDoor()
func _on_step_tip_click_next_step() -> void:
var step = handleStep[handleStepIndex-1]
if step.checkVoice:
$VoiceCommunication._reset_record_state()
if step.stepName != "步骤四:站台门打开后,口呼:请您抓紧在此门上下车。" :
nextStep()
elif step.stepName == "步骤四:站台门打开后,口呼:请您抓紧在此门上下车。" :
$tellDriverTimer.start()