调整仿真创建接口返回error

调整一些接口返回添加error
This commit is contained in:
walker 2023-10-20 15:05:56 +08:00
parent 41a7f7a585
commit 5c41a01e69
6 changed files with 30 additions and 20 deletions

View File

@ -30,7 +30,7 @@ func GetWorldData(w ecs.World) *component.WorldData {
if ok { if ok {
return component.WorldDataType.Get(entry) return component.WorldDataType.Get(entry)
} }
panic("不存在世界数据") panic("不存在世界数据组件")
} }
// 根据uid获取对象实体 // 根据uid获取对象实体

View File

@ -24,10 +24,10 @@ func LoadTurnouts(w ecs.World) error {
case proto.Turnout_ZDJ9_Double: case proto.Turnout_ZDJ9_Double:
err = LoadTurnoutZdj9Two(w, turnout, entry, data.EntityMap) err = LoadTurnoutZdj9Two(w, turnout, entry, data.EntityMap)
default: default:
panic(fmt.Sprintf("id=%s的道岔没有转辙机型号数据", turnout.Id())) return fmt.Errorf("id=%s的道岔没有转辙机型号数据", turnout.Id())
} }
if err != nil { if err != nil {
panic(fmt.Sprintf("加载道岔异常: %s", err.Error())) return err
} }
} }
return nil return nil
@ -129,7 +129,7 @@ func LoadTurnoutZdj9Two(w ecs.World, turnout *repository.Turnout, entry *ecs.Ent
} }
nils := zdj9TwoElectronic.CheckNilReference() nils := zdj9TwoElectronic.CheckNilReference()
if len(nils) > 0 { if len(nils) > 0 {
return fmt.Errorf("未知的道岔[%s]ZDJ9双机继电器组合数据异常,缺失:[%s]", turnout.Id(), strings.Join(nils, ",")) return fmt.Errorf("道岔[%s]ZDJ9双机继电器组合数据异常,缺失:[%s]", turnout.Id(), strings.Join(nils, ","))
} else { } else {
// 给道岔添加电路组件 // 给道岔添加电路组件
entry.AddComponent(component.Zdj9TwoElectronicType, unsafe.Pointer(zdj9TwoElectronic)) entry.AddComponent(component.Zdj9TwoElectronicType, unsafe.Pointer(zdj9TwoElectronic))
@ -137,7 +137,7 @@ func LoadTurnoutZdj9Two(w ecs.World, turnout *repository.Turnout, entry *ecs.Ent
entry.AddComponent(component.Zdj9TwoDriveType) entry.AddComponent(component.Zdj9TwoDriveType)
} }
} else if size > 0 && size < 3 { } else if size > 0 && size < 3 {
return fmt.Errorf("id=[%s]的道岔是ZDJ9双机牵引,但继电器组合类型少于3个(应为TDC、TDFJ1、TDFJ2三个组合)", turnout.Id()) return fmt.Errorf("id=[%s]的道岔是ZDJ9双机牵引,继电器组合类型应为3个,现有%d个", turnout.Id(), size)
} }
return nil return nil
} }

View File

@ -13,9 +13,9 @@ const (
) )
// 初始化仿真 // 初始化仿真
func NewSimulation(repo *repository.Repository) ecs.World { func NewSimulation(repo *repository.Repository) (ecs.World, error) {
w := ecs.NewWorld(RtssSimulationTick) w := ecs.NewWorld(RtssSimulationTick)
sys.BindSystem(w) sys.BindSystem(w)
entity.Load(w, repo) err := entity.Load(w, repo)
return w return w, err
} }

@ -1 +1 @@
Subproject commit 37e06d2aaf64828da677131dfb790bd0de7cef56 Subproject commit 8b25469d6ef3e8aeb1a19326d879293a9958bfe8

View File

@ -209,13 +209,14 @@ func (repo *Repository) AddPhysicalSection(section *PhysicalSection) {
repo.physicalSectionMap[section.Id()] = section repo.physicalSectionMap[section.Id()] = section
} }
func (repo *Repository) ConvertKilometer(km *proto.Kilometer, cs string) *proto.Kilometer { func (repo *Repository) ConvertKilometer(km *proto.Kilometer, cs string) (*proto.Kilometer, error) {
if km.CoordinateSystem == cs { if km.CoordinateSystem == cs {
return km return km, nil
} }
kc, err := repo.getKilometerConvert(km.CoordinateSystem, cs) kc, err := repo.getKilometerConvert(km.CoordinateSystem, cs)
if err != nil { if err != nil {
panic(err) return nil, err
// panic(err)
} }
var sourceCsKm *proto.Kilometer var sourceCsKm *proto.Kilometer
var targetCsKm *proto.Kilometer var targetCsKm *proto.Kilometer
@ -230,7 +231,7 @@ func (repo *Repository) ConvertKilometer(km *proto.Kilometer, cs string) *proto.
if value < 0 { if value < 0 {
panic(fmt.Sprintf("公里标[%v]转换为坐标系[%s]的公里标的值[%d]小于0", km, cs, value)) panic(fmt.Sprintf("公里标[%v]转换为坐标系[%s]的公里标的值[%d]小于0", km, cs, value))
} }
return &proto.Kilometer{Value: value, CoordinateSystem: cs} return &proto.Kilometer{Value: value, CoordinateSystem: cs}, nil
} }
func (repo *Repository) addKilometerConvert(kc *proto.KilometerConvert) { func (repo *Repository) addKilometerConvert(kc *proto.KilometerConvert) {
@ -247,7 +248,7 @@ func (repo *Repository) getKilometerConvert(cs1, cs2 string) (*proto.KilometerCo
} }
// 获取地图坐标信息 // 获取地图坐标信息
func (repo *Repository) generateCoordinateInfo(coordinateSystem string) { func (repo *Repository) generateCoordinateInfo(coordinateSystem string) error {
coordinate := &MapCoordinate{ coordinate := &MapCoordinate{
Coordinate: "MAIN_LINE", Coordinate: "MAIN_LINE",
MinCoordinate: int64(math.MaxInt64), MinCoordinate: int64(math.MaxInt64),
@ -260,7 +261,10 @@ func (repo *Repository) generateCoordinateInfo(coordinateSystem string) {
if data.km == nil || data.km.CoordinateSystem == "" { if data.km == nil || data.km.CoordinateSystem == "" {
continue continue
} }
km := repo.ConvertKilometer(data.km, coordinate.Coordinate) km, err := repo.ConvertKilometer(data.km, coordinate.Coordinate)
if err != nil {
return err
}
if km.Value < coordinate.MinCoordinate { if km.Value < coordinate.MinCoordinate {
coordinate.MinCoordinate = km.Value coordinate.MinCoordinate = km.Value
} }
@ -269,9 +273,11 @@ func (repo *Repository) generateCoordinateInfo(coordinateSystem string) {
} }
} }
if coordinate.Coordinate == "" { if coordinate.Coordinate == "" {
panic("无计轴公里标信息") return fmt.Errorf("无计轴公里标信息")
// panic("无计轴公里标信息")
} }
repo.coordinate = coordinate repo.coordinate = coordinate
return nil
} }
func (repo Repository) GetCoordinateInfo() *MapCoordinate { func (repo Repository) GetCoordinateInfo() *MapCoordinate {

View File

@ -24,9 +24,12 @@ func BuildRepository(source *proto.Repository) (*Repository, error) {
return nil, errors.New("数据校验未通过") return nil, errors.New("数据校验未通过")
} }
repository := newRepository(source.Id, source.Version) repository := newRepository(source.Id, source.Version)
buildModels(source, repository) err := buildModels(source, repository)
if err != nil {
return nil, err
}
zap.S().Debug("基础模型构建完毕") zap.S().Debug("基础模型构建完毕")
err := buildModelRelationship(source, repository) err = buildModelRelationship(source, repository)
zap.S().Debug("模型关系构建完毕") zap.S().Debug("模型关系构建完毕")
if err != nil { if err != nil {
return nil, err return nil, err
@ -47,7 +50,7 @@ func buildRepositoryKey(id string, version string) string {
return id + "_" + version return id + "_" + version
} }
func buildModels(source *proto.Repository, repository *Repository) { func buildModels(source *proto.Repository, repository *Repository) error {
for _, protoData := range source.KilometerConverts { for _, protoData := range source.KilometerConverts {
repository.addKilometerConvert(protoData) repository.addKilometerConvert(protoData)
} }
@ -115,7 +118,8 @@ func buildModels(source *proto.Repository, repository *Repository) {
m := NewMkx(protoData.Id) m := NewMkx(protoData.Id)
repository.mkxMap[m.Id()] = m repository.mkxMap[m.Id()] = m
} }
repository.generateCoordinateInfo(source.MainCoordinateSystem) err := repository.generateCoordinateInfo(source.MainCoordinateSystem)
return err
} }
func buildModelRelationship(source *proto.Repository, repository *Repository) error { func buildModelRelationship(source *proto.Repository, repository *Repository) error {