diff --git a/src/CounterDrone.Core/Services/EnumMetadata.cs b/src/CounterDrone.Core/Services/EnumMetadata.cs index ba9c260..001d93d 100644 --- a/src/CounterDrone.Core/Services/EnumMetadata.cs +++ b/src/CounterDrone.Core/Services/EnumMetadata.cs @@ -2,19 +2,27 @@ using System.Collections.Generic; namespace CounterDrone.Core.Services { - /// 枚举元数据(前端下拉框数据源) + /// 枚举条目(前端下拉框数据源) + public class EnumItem + { + public string Name { get; set; } = ""; + public string ChineseName { get; set; } = ""; + public int Value { get; set; } + } + + /// 枚举元数据(中英文对照) public class EnumMetadata { - public Dictionary DroneType { get; set; } = new(); - public Dictionary PowerType { get; set; } = new(); - public Dictionary PlatformType { get; set; } = new(); - public Dictionary AerosolType { get; set; } = new(); - public Dictionary WeatherType { get; set; } = new(); - public Dictionary WindDirection { get; set; } = new(); - public Dictionary SceneType { get; set; } = new(); - public Dictionary FormationMode { get; set; } = new(); - public Dictionary TriggerMode { get; set; } = new(); - public Dictionary ReleaseMode { get; set; } = new(); - public Dictionary EquipmentRole { get; set; } = new(); + public List DroneType { get; set; } = new(); + public List PowerType { get; set; } = new(); + public List PlatformType { get; set; } = new(); + public List AerosolType { get; set; } = new(); + public List WeatherType { get; set; } = new(); + public List WindDirection { get; set; } = new(); + public List SceneType { get; set; } = new(); + public List FormationMode { get; set; } = new(); + public List TriggerMode { get; set; } = new(); + public List ReleaseMode { get; set; } = new(); + public List EquipmentRole { get; set; } = new(); } } diff --git a/src/CounterDrone.Core/Services/ScenarioService.cs b/src/CounterDrone.Core/Services/ScenarioService.cs index c1d4963..9ecc89e 100644 --- a/src/CounterDrone.Core/Services/ScenarioService.cs +++ b/src/CounterDrone.Core/Services/ScenarioService.cs @@ -234,20 +234,28 @@ namespace CounterDrone.Core.Services { return new EnumMetadata { - DroneType = EnumToDict(), - PowerType = EnumToDict(), - PlatformType = EnumToDict(), - AerosolType = EnumToDict(), - WeatherType = EnumToDict(), - WindDirection = EnumToDict(), - SceneType = EnumToDict(), - FormationMode = EnumToDict(), - TriggerMode = EnumToDict(), - ReleaseMode = EnumToDict(), - EquipmentRole = EnumToDict(), + DroneType = EnumToList(TranslateDrone), + PowerType = EnumToList(TranslatePower), + PlatformType = EnumToList(TranslatePlatform), + AerosolType = EnumToList(TranslateAerosol), + WeatherType = EnumToList(TranslateWeather), + WindDirection = EnumToList(TranslateWindDirection), + SceneType = EnumToList(TranslateScene), + FormationMode = EnumToList(TranslateFormation), + TriggerMode = EnumToList(TranslateTrigger), + ReleaseMode = EnumToList(TranslateRelease), + EquipmentRole = EnumToList(TranslateEquipmentRole), }; } + private static List EnumToList(Func translate) where T : Enum + { + var list = new List(); + foreach (T v in Enum.GetValues(typeof(T))) + list.Add(new EnumItem { Name = v.ToString(), ChineseName = translate(v), Value = Convert.ToInt32(v) }); + return list; + } + private static Dictionary EnumToDict() where T : Enum { var dict = new Dictionary(); @@ -256,6 +264,91 @@ namespace CounterDrone.Core.Services return dict; } + // ═══ 中文翻译 ═══ + private static string TranslateDrone(Models.DroneType t) => t switch + { + Models.DroneType.Rotor => "旋翼", + Models.DroneType.FixedWing => "固定翼", + Models.DroneType.HighSpeed => "高速目标", + _ => t.ToString(), + }; + private static string TranslatePower(Models.PowerType p) => p switch + { + Models.PowerType.Electric => "电推", + Models.PowerType.Piston => "活塞", + Models.PowerType.Jet => "喷气", + _ => p.ToString(), + }; + private static string TranslatePlatform(Models.PlatformType p) => p switch + { + Models.PlatformType.AirBased => "空基", + Models.PlatformType.GroundBased => "地基", + _ => p.ToString(), + }; + private static string TranslateAerosol(Models.AerosolType t) => t switch + { + Models.AerosolType.InertGas => "惰性气体(吸入式灭火)", + Models.AerosolType.ActiveMaterial => "活性材料(爆燃式)", + Models.AerosolType.ActiveFuel => "活性燃料(吸入式爆炸)", + _ => t.ToString(), + }; + private static string TranslateWeather(Models.WeatherType w) => w switch + { + Models.WeatherType.Sunny => "晴天", + Models.WeatherType.Overcast => "阴天", + Models.WeatherType.Fog => "雾天", + Models.WeatherType.Rain => "雨天", + Models.WeatherType.Night => "夜间", + _ => w.ToString(), + }; + private static string TranslateWindDirection(Models.WindDirection d) => d switch + { + Models.WindDirection.N => "北 (N)", + Models.WindDirection.NE => "东北 (NE)", + Models.WindDirection.E => "东 (E)", + Models.WindDirection.SE => "东南 (SE)", + Models.WindDirection.S => "南 (S)", + Models.WindDirection.SW => "西南 (SW)", + Models.WindDirection.W => "西 (W)", + Models.WindDirection.NW => "西北 (NW)", + _ => d.ToString(), + }; + private static string TranslateScene(Models.SceneType s) => s switch + { + Models.SceneType.Urban => "城市", + Models.SceneType.Plain => "平原", + Models.SceneType.Mountain => "山区", + Models.SceneType.Coast => "海岸", + _ => s.ToString(), + }; + private static string TranslateFormation(Models.FormationMode f) => f switch + { + Models.FormationMode.Single => "单机", + Models.FormationMode.Formation => "编队", + Models.FormationMode.Swarm => "蜂群", + _ => f.ToString(), + }; + private static string TranslateTrigger(Models.TriggerMode t) => t switch + { + Models.TriggerMode.Time => "时间触发", + Models.TriggerMode.Area => "区域触发", + Models.TriggerMode.Manual => "手动触发", + _ => t.ToString(), + }; + private static string TranslateRelease(Models.ReleaseMode r) => r switch + { + Models.ReleaseMode.Single => "单次", + Models.ReleaseMode.Continuous => "连续", + Models.ReleaseMode.Pulse => "脉冲", + _ => r.ToString(), + }; + private static string TranslateEquipmentRole(Models.EquipmentRole r) => r switch + { + Models.EquipmentRole.Detection => "探测设备", + Models.EquipmentRole.LaunchPlatform => "发射平台", + _ => r.ToString(), + }; + // ========== Scenario CRUD ========== public Scenario UpdateScenario(Scenario scenario) diff --git a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll index d7a9cd6..2aa92bf 100644 Binary files a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll and b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll differ diff --git a/unity_plugins/CounterDrone.Core.dll b/unity_plugins/CounterDrone.Core.dll index d7a9cd6..2aa92bf 100644 Binary files a/unity_plugins/CounterDrone.Core.dll and b/unity_plugins/CounterDrone.Core.dll differ