rts-sim-module/entity/iscs_bas.go
2023-12-27 18:11:27 +08:00

182 lines
5.8 KiB
Go

package entity
import (
"joylink.club/ecs"
"joylink.club/rtsssimulation/component"
"joylink.club/rtsssimulation/component/component_proto"
"joylink.club/rtsssimulation/consts"
"joylink.club/rtsssimulation/repository/model/proto"
)
// NewWireCabinetEntity 创建线柜实体
func NewWireCabinetEntity(w ecs.World, id string) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.WireCabinetType, component.DeviceExceptionType))
component.UidType.SetValue(e, component.Uid{Id: id})
wd.EntityMap[id] = e
}
return e
}
// NewNetworkSwitchEntity 创建网络交换机实体
func NewNetworkSwitchEntity(w ecs.World, id string) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.NetworkSwitchType, component.DeviceExceptionType))
component.UidType.SetValue(e, component.Uid{Id: id})
component.NetworkSwitchType.Set(e, &component.NetworkSwitch{Normal: true})
wd.EntityMap[id] = e
}
return e
}
// NewAirPavilionEntity 创建风亭实体
func NewAirPavilionEntity(w ecs.World, id string, apType proto.AirPavilion_Type) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.AirPavilionType))
//
switch apType {
case proto.AirPavilion_ExhaustPavilion:
e.AddComponent(component.ExhaustPavilionTag)
case proto.AirPavilion_AirSupplyPavilion:
e.AddComponent(component.AirSupplyPavilionTag)
}
//
component.UidType.SetValue(e, component.Uid{Id: id})
component.AirPavilionType.Set(e, &component.AirPavilion{Normal: true})
wd.EntityMap[id] = e
}
return e
}
// NewValveEntity 创建阀门实体
func NewValveEntity(w ecs.World, id string, valveType proto.Valve_Type) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.ValveType, component.ValveControllerType, component.TwoPositionTransformType, component.DeviceExceptionType))
component.UidType.SetValue(e, component.Uid{Id: id})
//默认全关位置
component.TwoPositionTransformType.Set(e, &component.TwoPositionTransform{TwoPositionTransform: component_proto.TwoPositionTransform{Pos: consts.TwoPosMin}})
component.ValveControllerType.Set(e, &component.ValveController{TargetOpenRate: 0})
//
switch valveType {
case proto.Valve_ElectricControlValve:
e.AddComponent(component.ElectricControlValveTag)
case proto.Valve_ElectricAirValve:
e.AddComponent(component.ElectricAirValveTag)
case proto.Valve_CombinationAirValve:
e.AddComponent(component.CombinationAirValveTag)
case proto.Valve_ElectricButterflyValve:
e.AddComponent(component.ElectricButterflyValveTag)
}
//
wd.EntityMap[id] = e
}
return e
}
// NewGasMixingChamberEntity 创建混合室静压箱实体
func NewGasMixingChamberEntity(w ecs.World, id string) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.GasMixingChamberType))
component.UidType.SetValue(e, component.Uid{Id: id})
wd.EntityMap[id] = e
}
return e
}
// NewCombinationAirConditionerEntity 创建组合式空调实体
func NewCombinationAirConditionerEntity(w ecs.World, id string) *ecs.Entry {
return newAirConditioningEntity(w, id, component.CombinationAirConditionerTag)
}
func newAirConditioningEntity(w ecs.World, id string, tag *ecs.ComponentType[struct{}]) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.MotorType, component.AirConditioningType, component.FluidDriverType, component.DeviceExceptionType, tag))
component.UidType.SetValue(e, component.Uid{Id: id})
wd.EntityMap[id] = e
}
return e
}
// NewPurificationDeviceEntity 创建净化装置实体
func NewPurificationDeviceEntity(w ecs.World, id string) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.PurificationDeviceType, component.DeviceExceptionType))
component.UidType.SetValue(e, component.Uid{Id: id})
wd.EntityMap[id] = e
}
return e
}
// NewAirCurtainEntity 创建空气幕实体
func NewAirCurtainEntity(w ecs.World, id string) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.AirCurtainType, component.DeviceExceptionType))
component.UidType.SetValue(e, component.Uid{Id: id})
wd.EntityMap[id] = e
}
return e
}
// NewGasEnvironmentEntity 创建气体环境实体
func NewGasEnvironmentEntity(w ecs.World, id string) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.GasEnvironmentType))
component.UidType.SetValue(e, component.Uid{Id: id})
wd.EntityMap[id] = e
}
return e
}
// NewFanEntity 创建风机实体
func NewFanEntity(w ecs.World, id string, fanType proto.Fan_Type) *ecs.Entry {
wd := GetWorldData(w)
e, ok := wd.EntityMap[id]
if !ok {
e = w.Entry(w.Create(component.UidType, component.MotorType, component.FluidDriverType, component.DeviceExceptionType))
component.UidType.SetValue(e, component.Uid{Id: id})
component.MotorType.Set(e, &component.Motor{Speed: 0, Forward: true, Ms: component.MsOff})
//
switch fanType {
case proto.Fan_CommonFan:
{
e.AddComponent(component.CommonFanTag)
}
case proto.Fan_FcBypassFan:
{
e.AddComponent(component.MotorFcType)
e.AddComponent(component.FanBypassUnitType)
e.AddComponent(component.FcBypassFanTag)
}
case proto.Fan_SoftStartFan:
{
e.AddComponent(component.SoftStartFanTag)
}
case proto.Fan_HighLowSpeedFan:
{
e.AddComponent(component.FanHighLowSpeedModeType)
e.AddComponent(component.HighLowSpeedFanTag)
}
}
//
wd.EntityMap[id] = e
}
return e
}