package memory import ( "joylink.club/bj-rtsts-server/dto/data_proto" "joylink.club/bj-rtsts-server/dto/state_proto" "joylink.club/bj-rtsts-server/third_party/message" ) const ( SKQYS1 = "SKQYS1" //驾驶端1 SKQYS2 = "SKQYS2" //驾驶端2 JJZD = "JJZD" //紧急停车 QHFXKZ = "QHFXKZ" //驾驶方向 QYSB = "QYSB" //牵引制动手柄 ) // 获取列车控制图形数据 func findTrainTccGraphicData(vs *VerifySimulation) *data_proto.TccGraphicStorage { var tccGI *data_proto.TccGraphicStorage for _, id := range vs.MapIds { if QueryGiType(id) == data_proto.PictureType_TrainControlCab { tccGI = QueryGiData[*data_proto.TccGraphicStorage](id) break } } return tccGI } func findTrainTccGraphicDataButtons(tccG *data_proto.TccGraphicStorage) []*data_proto.TccButton { return tccG.TccButtons } func findTrainTccGraphicDataKeys(tccG *data_proto.TccGraphicStorage) []*data_proto.TccKey { return tccG.TccKeys } func findTrainTccGraphicDataHandlers(tccG *data_proto.TccGraphicStorage) []*data_proto.TccHandle { return tccG.TccHandles } func findTrainTccGraphicDataButton(tccG *data_proto.TccGraphicStorage, id uint32) (*data_proto.TccButton, bool) { for _, d := range findTrainTccGraphicDataButtons(tccG) { if d.Common.Id == id { return d, true } } return nil, false } func findTrainTccGraphicDataKey(tccG *data_proto.TccGraphicStorage, id uint32) (*data_proto.TccKey, bool) { for _, d := range findTrainTccGraphicDataKeys(tccG) { if d.Common.Id == id { return d, true } } return nil, false } func findTrainTccGraphicDataHandler(tccG *data_proto.TccGraphicStorage, id uint32) (*data_proto.TccHandle, bool) { for _, d := range findTrainTccGraphicDataHandlers(tccG) { if d.Common.Id == id { return d, true } } return nil, false } func initTrainVobc(trainLoad int64, trainIsUp bool) (*state_proto.TrainVobcState, uint32) { vobc := &state_proto.TrainVobcState{TrainLoad: int64(trainLoad), BrakingStatus: true, BrakeForce: DEFAULT_BRAKE_FORCE, DirectionForward: true} var trainActDir uint32 = 0 if trainIsUp { vobc.Tc1Active = true trainActDir = 1 } else { //vobc.Tc1Active = true vobc.Tc2Active = true trainActDir = 2 } return vobc, trainActDir } // 初始化列车控制数据 func initTrainTcc(vs *VerifySimulation, runDir bool) *state_proto.TrainControlState { var tccGI *data_proto.TccGraphicStorage for _, id := range vs.MapIds { if QueryGiType(id) == data_proto.PictureType_TrainControlCab { tccGI = QueryGiData[*data_proto.TccGraphicStorage](id) break } } tcc := &state_proto.TrainControlState{} if tccGI != nil { for _, b := range tccGI.TccButtons { if b.Code == JJZD { tcc.Ebutton = &state_proto.TrainControlState_EmergentButton{Id: b.Common.Id, Passed: false} } } for _, b := range tccGI.TccHandles { if b.Code == QYSB { tcc.PushHandler = &state_proto.TrainControlState_PushHandler{Id: b.Common.Id, Val: 0} } } ds := make([]*state_proto.TrainControlState_DriverKeySwitch, 0) for _, b := range tccGI.TccKeys { if b.GetType() == data_proto.TccKey_driverControllerActivationClint { val := false if b.Code == SKQYS1 && runDir { val = true } else if b.Code == SKQYS2 && !runDir { val = true } ds = append(ds, &state_proto.TrainControlState_DriverKeySwitch{Id: b.Common.Id, Val: val}) } else if b.GetType() == data_proto.TccKey_frontAndRearDirectionalControl { tcc.DirKey = &state_proto.TrainControlState_DirectionKeySwitch{Id: b.Common.Id, Val: uint32(message.IsTrue(true))} } } tcc.DriverKey = ds } return tcc }