【生产地图公里标信息】

This commit is contained in:
weizhihong 2023-10-19 16:38:46 +08:00
parent 30c4210a5d
commit 0aa3290e73
4 changed files with 48 additions and 3 deletions

View File

@ -33,7 +33,7 @@ func NewButtonEntity(w ecs.World, data *repository.Button, entityMap map[string]
component.UidType.SetValue(entry, component.Uid{Id: uid}) component.UidType.SetValue(entry, component.Uid{Id: uid})
// 带灯按钮 // 带灯按钮
if data.HasLight() { if data.HasLight() {
entry.AddComponent(component.SingleLightType, unsafe.Pointer(NewLightHEntity(w))) entry.AddComponent(component.SingleLightType, unsafe.Pointer(NewLightEntity(w)))
} }
entityMap[uid] = entry entityMap[uid] = entry
} }
@ -56,7 +56,7 @@ func NewAlarmEntity(w ecs.World, alarm *repository.Alarm, entityMap map[string]*
func NewIBPLightEntity(w ecs.World, uid string, entityMap map[string]*ecs.Entry) *ecs.Entry { func NewIBPLightEntity(w ecs.World, uid string, entityMap map[string]*ecs.Entry) *ecs.Entry {
entry, ok := entityMap[uid] entry, ok := entityMap[uid]
if !ok { if !ok {
entry = w.Entry(w.Create(component.LightTag, component.HdTag, component.UidType, component.LightDriveType, component.BitStateType)) entry = w.Entry(w.Create(component.LightTag, component.UidType, component.LightDriveType, component.BitStateType))
component.UidType.SetValue(entry, component.Uid{Id: uid}) component.UidType.SetValue(entry, component.Uid{Id: uid})
entityMap[uid] = entry entityMap[uid] = entry
} }

8
repository/coordinate.go Normal file
View File

@ -0,0 +1,8 @@
package repository
// 检测点
type MapCoordinate struct {
Coordinate string // 坐标系
MinCoordinate int64 // 坐标系最小值
MaxCoordinate int64 // 坐标系最大值
}

View File

@ -2,6 +2,7 @@ package repository
import ( import (
"fmt" "fmt"
"math"
"joylink.club/rtsssimulation/repository/model/proto" "joylink.club/rtsssimulation/repository/model/proto"
) )
@ -9,6 +10,7 @@ import (
type Repository struct { type Repository struct {
id string id string
version string version string
coordinate *MapCoordinate // 基准坐标系类型,在列车画图时统一坐标系
physicalSectionMap map[string]*PhysicalSection physicalSectionMap map[string]*PhysicalSection
checkPointMap map[string]*CheckPoint checkPointMap map[string]*CheckPoint
turnoutMap map[string]*Turnout turnoutMap map[string]*Turnout
@ -244,6 +246,41 @@ func (repo *Repository) getKilometerConvert(cs1, cs2 string) (*proto.KilometerCo
return convert, nil return convert, nil
} }
// 获取地图坐标信息
func (repo Repository) generateCoordinateInfo() *MapCoordinate {
if repo.coordinate != nil {
return repo.coordinate
}
coordinate := &MapCoordinate{
MinCoordinate: int64(math.MaxInt64),
MaxCoordinate: int64(math.MinInt64),
}
for _, data := range repo.checkPointMap {
if data.km == nil || data.km.CoordinateSystem == "" {
continue
}
if coordinate.Coordinate == "" {
coordinate.Coordinate = data.km.CoordinateSystem
}
km := repo.ConvertKilometer(data.km, coordinate.Coordinate)
if km.Value < coordinate.MinCoordinate {
coordinate.MinCoordinate = km.Value
}
if km.Value > coordinate.MaxCoordinate {
coordinate.MaxCoordinate = km.Value
}
}
if coordinate.Coordinate == "" {
panic("无计轴公里标信息")
}
repo.coordinate = coordinate
return repo.coordinate
}
func (repo Repository) GetCoordinateInfo() *MapCoordinate {
return repo.coordinate
}
func buildKilometerConvertKey(cs1 string, cs2 string) string { func buildKilometerConvertKey(cs1 string, cs2 string) string {
return cs1 + cs2 return cs1 + cs2
} }

View File

@ -114,8 +114,8 @@ func buildModels(source *proto.Repository, repository *Repository) {
for _, protoData := range source.Mkxs { for _, protoData := range source.Mkxs {
m := NewMkx(protoData.Id) m := NewMkx(protoData.Id)
repository.mkxMap[m.Id()] = m repository.mkxMap[m.Id()] = m
} }
repository.generateCoordinateInfo()
} }
func buildModelRelationship(source *proto.Repository, repository *Repository) error { func buildModelRelationship(source *proto.Repository, repository *Repository) error {