From 3b8fb4ee86e90ae6345b38c76688bcf81d4c87e3 Mon Sep 17 00:00:00 2001
From: tian <11429339@qq.com>
Date: Sun, 14 Jun 2026 15:52:05 +0800
Subject: [PATCH] refactor: code cleanup - warnings, dead code, naming
Warnings (9 to 0): events declared nullable, _cache nullable, IDamageModel param nullable.
Dead code removed: DefaultFormations class + FormationTemplate; AlgorithmTypes legacy types (ThreatProfile/DefenseRecommendation/DefenseSolution/MultiGroupRecommendation/RecommendedPlatform/RecommendedDetection); DroneEntity CurrentWaypointIndex/FormationOffsetX/Y/ApplyFormationOffset/wind params; Vector3 operators+Length+DistanceTo; CloudExpansionModel Phase2Duration/TimeToDensity; Kinematics EstimatedShellTime/GaussianConcentration; InterceptCandidate write-only fields (CoverageDuration/FlightTime/ShellFlightTime); ParticleParams EmitRate/ColorHex.
Naming: DefaultDefensePlanner -> DefensePlanner (only impl of IDefensePlanner); inCloudTime -> inCloudDistance (returns meters not seconds); DamageAssessment class summary fixed; wind comments clarified (drone wind removed vs cloud wind active).
Tests: 191 pass, 0 warnings.
---
.../Algorithms/AlgorithmTypes.cs | 80 ------------------
.../Algorithms/CloudExpansionModel.cs | 13 ---
.../Algorithms/DamageAssessment.cs | 2 +-
...ultDefensePlanner.cs => DefensePlanner.cs} | 14 +--
.../Algorithms/Kinematics.cs | 16 ----
src/CounterDrone.Core/DefaultFireUnits.cs | 2 +-
src/CounterDrone.Core/DefaultFormations.cs | 42 ---------
.../Simulation/DroneEntity.cs | 26 +-----
.../Simulation/SimulationEngine.cs | 20 ++---
.../CounterDrone.Core/CounterDrone.Core.dll | Bin 135168 -> 125952 bytes
.../Scripts/Managers/ManagerVerification.cs | 2 +-
.../Scripts/Managers/SimulationBootstrap.cs | 2 +-
.../Scripts/Managers/SimulationRunner.cs | 2 +-
.../DefensePlannerTests.cs | 10 +--
.../DroneEntityTests.cs | 12 +--
.../CounterDrone.Core.Tests/EdgeCaseTests.cs | 6 +-
.../FullPipelineTests.cs | 2 +-
.../SimulationEngineTests.cs | 2 +-
18 files changed, 38 insertions(+), 215 deletions(-)
rename src/CounterDrone.Core/Algorithms/{DefaultDefensePlanner.cs => DefensePlanner.cs} (97%)
delete mode 100644 src/CounterDrone.Core/DefaultFormations.cs
diff --git a/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs b/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs
index 5433b6c..913bcbf 100644
--- a/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs
+++ b/src/CounterDrone.Core/Algorithms/AlgorithmTypes.cs
@@ -3,53 +3,6 @@ using CounterDrone.Core.Models;
namespace CounterDrone.Core.Algorithms
{
- /// 威胁画像
- public class ThreatProfile
- {
- public CombatScene Environment { get; set; } = new();
- public List Targets { get; set; } = new();
- public RoutePlan Route { get; set; } = new();
- public List Waypoints { get; set; } = new();
- public List ControlZones { get; set; } = new();
- /// 偏好平台类型(null = 算法自行决定,当前默认地基)
- public PlatformType? PreferredPlatformType { get; set; }
- }
-
- /// 防御推荐方案
- public class DefenseRecommendation
- {
- public DefenseSolution Best { get; set; } = new();
- public DefenseSolution Critical { get; set; } = new();
- }
-
- /// 单套防御方案
- public class DefenseSolution
- {
- public AerosolType RecommendedAerosolType { get; set; }
- public string AerosolRationale { get; set; } = string.Empty;
- public CloudDispersal RecommendedCloud { get; set; } = new();
-
- public List Platforms { get; set; } = new();
- public List Detections { get; set; } = new();
-
- public float InterceptProbability { get; set; }
- public string SummaryRationale { get; set; } = string.Empty;
-
- public List FireSchedule { get; set; } = new();
-
- /// 此方案占用的平台起始索引(多编队合并用)
- public int PlatformOffset { get; set; }
- }
-
- /// 多编队推荐结果
- public class MultiGroupRecommendation
- {
- /// 每组的独立方案
- public List GroupSolutions { get; set; } = new();
- /// 合并后的总发射计划
- public List MergedFireSchedule { get; set; } = new();
- }
-
/// 火力单元(完整的武器系统)
public class FireUnit
{
@@ -121,47 +74,17 @@ namespace CounterDrone.Core.Algorithms
}
}
- public class RecommendedPlatform
- {
- public PlatformType Type { get; set; }
- public Vector3 Position { get; set; }
- public int Quantity { get; set; }
- public int MunitionCount { get; set; }
- public float CoverageVolume { get; set; }
- public float Cooldown { get; set; } = 5f;
- public float MuzzleVelocity { get; set; } = 800f;
- /// 空基平台巡航速度 m/s
- public float CruiseSpeed { get; set; } = 55f;
- /// 空基平台投放高度 m
- public float ReleaseAltitude { get; set; }
- }
-
- public class RecommendedDetection
- {
- public Vector3 Position { get; set; }
- public float DetectionRadius { get; set; }
- public int Quantity { get; set; }
- }
-
/// 三维向量(纯 C#,不依赖 UnityEngine)
public struct Vector3
{
public float X, Y, Z;
public Vector3(float x, float y, float z) { X = x; Y = y; Z = z; }
-
- public static Vector3 operator +(Vector3 a, Vector3 b) => new(a.X + b.X, a.Y + b.Y, a.Z + b.Z);
- public static Vector3 operator -(Vector3 a, Vector3 b) => new(a.X - b.X, a.Y - b.Y, a.Z - b.Z);
- public static Vector3 operator *(Vector3 a, float s) => new(a.X * s, a.Y * s, a.Z * s);
- public float Length => (float)System.Math.Sqrt(X * X + Y * Y + Z * Z);
- public float DistanceTo(Vector3 other) => (this - other).Length;
}
/// 粒子渲染参数
public class ParticleParams
{
- public float EmitRate { get; set; } = 100;
public float Opacity { get; set; } = 1.0f;
- public string ColorHex { get; set; } = "#FFFFFF";
public float SizeMultiplier { get; set; } = 1.0f;
}
@@ -184,10 +107,7 @@ namespace CounterDrone.Core.Algorithms
public FireUnit Unit { get; set; } = null!;
public AerosolType AmmoType { get; set; }
public float EarliestInterceptTime { get; set; }
- public float CoverageDuration { get; set; }
public float KillProbability { get; set; }
- public float FlightTime { get; set; } // 弹药/平台飞行时间
- public float ShellFlightTime { get; set; } // 仅地基用
}
/// 单元分配:一个火力单元被分配给一个威胁的配置
diff --git a/src/CounterDrone.Core/Algorithms/CloudExpansionModel.cs b/src/CounterDrone.Core/Algorithms/CloudExpansionModel.cs
index 713b207..a007717 100644
--- a/src/CounterDrone.Core/Algorithms/CloudExpansionModel.cs
+++ b/src/CounterDrone.Core/Algorithms/CloudExpansionModel.cs
@@ -20,8 +20,6 @@ namespace CounterDrone.Core.Algorithms
/// Phase 2 结束时的有效半径(30s 湍流膨胀)
public float TurbulentRadius => RadiusAt(30f);
- /// Phase 2 边界时间
- public float Phase2Duration => 30f;
/// 湍流膨胀系数 k
public float TurbulentExpansionK => (float)_ammo.TurbulentExpansionK;
@@ -55,17 +53,6 @@ namespace CounterDrone.Core.Algorithms
return volume > 0.001f ? (float)_ammo.SourceStrength / volume : (float)_ammo.CoreDensity;
}
- /// 达到指定浓度所需时间(密度随膨胀下降,较晚时间密度更低)
- /// 浓度首次低于threshold的时间(s),如果不会低于则返回MaxDuration
- public float TimeToDensity(float threshold)
- {
- // 密度 ≈ SourceStrength / (4/3 π R³),随R增大而下降
- // 求R使得密度=threshold: R³ = SourceStrength / (threshold * 4π/3)
- float src = (float)_ammo.SourceStrength;
- float volume = src / Math.Max(threshold, 0.000001f);
- float r = (float)Math.Pow(volume * 3f / (4f * (float)Math.PI), 1f / 3f);
- return TimeToReach(r);
- }
/// 覆盖指定距离需要的云团数量
/// 需要覆盖的距离 (m)
diff --git a/src/CounterDrone.Core/Algorithms/DamageAssessment.cs b/src/CounterDrone.Core/Algorithms/DamageAssessment.cs
index ab6d39c..b44c6ae 100644
--- a/src/CounterDrone.Core/Algorithms/DamageAssessment.cs
+++ b/src/CounterDrone.Core/Algorithms/DamageAssessment.cs
@@ -3,7 +3,7 @@ using CounterDrone.Core.Models;
namespace CounterDrone.Core.Algorithms
{
- /// 毁伤评估——路径积分计算无人机穿过云团的暴露时间
+ /// 毁伤评估——路径积分计算无人机穿过云团的路径长度(米),用于换算暴露时间
public static class DamageAssessment
{
/// 线段 (p1→p2) 在球体内的长度,换算为路径长度 (m)
diff --git a/src/CounterDrone.Core/Algorithms/DefaultDefensePlanner.cs b/src/CounterDrone.Core/Algorithms/DefensePlanner.cs
similarity index 97%
rename from src/CounterDrone.Core/Algorithms/DefaultDefensePlanner.cs
rename to src/CounterDrone.Core/Algorithms/DefensePlanner.cs
index 22c8ac2..593954e 100644
--- a/src/CounterDrone.Core/Algorithms/DefaultDefensePlanner.cs
+++ b/src/CounterDrone.Core/Algorithms/DefensePlanner.cs
@@ -5,15 +5,15 @@ using CounterDrone.Core.Models;
namespace CounterDrone.Core.Algorithms
{
- /// 默认防御规划器 — 五步流水线,全部调用与引擎共享的物理工具类
- public class DefaultDefensePlanner : IDefensePlanner
+ /// 防御规划器 — 五步流水线,全部调用与引擎共享的物理工具类
+ public class DefensePlanner : IDefensePlanner
{
private readonly List _ammoCatalog;
private readonly IDamageModel _damageModel;
private readonly PlannerConfig _config;
- public DefaultDefensePlanner(List ammoCatalog, PlannerConfig config,
- IDamageModel damageModel = null)
+ public DefensePlanner(List ammoCatalog, PlannerConfig config,
+ IDamageModel? damageModel = null)
{
_ammoCatalog = ammoCatalog ?? throw new ArgumentNullException(nameof(ammoCatalog));
_config = config ?? throw new ArgumentNullException(nameof(config));
@@ -290,10 +290,7 @@ namespace CounterDrone.Core.Algorithms
Unit = unit,
AmmoType = ammoType,
EarliestInterceptTime = interceptTime,
- CoverageDuration = effectiveR * 2f,
KillProbability = prob,
- FlightTime = shellTime,
- ShellFlightTime = shellTime,
};
}
@@ -324,10 +321,7 @@ namespace CounterDrone.Core.Algorithms
Unit = unit,
AmmoType = ammoType,
EarliestInterceptTime = interceptTime,
- CoverageDuration = effectiveR * 2f,
KillProbability = prob,
- FlightTime = totalTime,
- ShellFlightTime = fallTime,
};
}
diff --git a/src/CounterDrone.Core/Algorithms/Kinematics.cs b/src/CounterDrone.Core/Algorithms/Kinematics.cs
index 9528f88..d9421d5 100644
--- a/src/CounterDrone.Core/Algorithms/Kinematics.cs
+++ b/src/CounterDrone.Core/Algorithms/Kinematics.cs
@@ -55,12 +55,6 @@ namespace CounterDrone.Core.Algorithms
return range / (muzzleVelocity * cosAngle);
}
- /// 炮弹飞行时间:抛物线轨迹到目标点的时间(自动求解发射角,下行段命中)
- public static float EstimatedShellTime(float horizontalDist, float muzzleVelocity)
- {
- return ParabolicShellTime(horizontalDist, 0f, muzzleVelocity);
- }
-
/// 抛物线飞行时间:解 tan(θ) 二次方程求到达 (horizontalDist, heightDiff) 的时间
public static float ParabolicShellTime(float horizontalDist, float heightDiff, float muzzleVelocity)
{
@@ -232,16 +226,6 @@ namespace CounterDrone.Core.Algorithms
var denom = (float)Math.Pow(2f * (float)Math.PI, 1.5f) * sigmaY * sigmaY * sigmaZ;
return denom > 0.001f ? sourceStrength / denom : 0f;
}
-
- /// 高斯烟团某点浓度 C(x,y,z) — 简化:相对中心的偏移
- public static float GaussianConcentration(float q, float sx, float sy, float sz, float offsetY, float offsetZ)
- {
- var norm = q / ((float)Math.Pow(2f * (float)Math.PI, 1.5f) * sx * sy * sz);
- var ey = (float)Math.Exp(-0.5f * offsetY * offsetY / (sy * sy));
- var ez = (float)Math.Exp(-0.5f * offsetZ * offsetZ / (sz * sz));
- var ezr = (float)Math.Exp(-0.5f * offsetZ * offsetZ / (sz * sz));
- return norm * ey * (ez + ezr);
- }
public static bool PointInPolygon(float px, float pz, ReadOnlySpan<(float X, float Z)> vertices)
{
if (vertices.Length < 3) return false;
diff --git a/src/CounterDrone.Core/DefaultFireUnits.cs b/src/CounterDrone.Core/DefaultFireUnits.cs
index 19756d8..7afd5c6 100644
--- a/src/CounterDrone.Core/DefaultFireUnits.cs
+++ b/src/CounterDrone.Core/DefaultFireUnits.cs
@@ -4,7 +4,7 @@ namespace CounterDrone.Core
{
public static class DefaultFireUnits
{
- private static List _cache;
+ private static List? _cache;
public static List GetAll()
{
diff --git a/src/CounterDrone.Core/DefaultFormations.cs b/src/CounterDrone.Core/DefaultFormations.cs
deleted file mode 100644
index d0fb979..0000000
--- a/src/CounterDrone.Core/DefaultFormations.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System.Collections.Generic;
-
-namespace CounterDrone.Core
-{
- public static class DefaultFormations
- {
- private static List _cache;
-
- public static List GetAll()
- {
- if (_cache != null) return _cache;
- _cache = new List
- {
- new() { Id = "single", Name = "单机", FormationMode = 0, LateralCount = 1, LongitudinalCount = 1 },
- new() { Id = "line-abreast-3", Name = "3机横队", FormationMode = 1, LateralCount = 3, LongitudinalCount = 1,
- LateralSpacing = 50 },
- new() { Id = "line-abreast-5", Name = "5机横队", FormationMode = 1, LateralCount = 5, LongitudinalCount = 1,
- LateralSpacing = 50 },
- new() { Id = "column-3", Name = "3机纵队", FormationMode = 1, LateralCount = 1, LongitudinalCount = 3,
- LongitudinalSpacing = 100 },
- new() { Id = "box-2x2", Name = "2×2方队", FormationMode = 1, LateralCount = 2, LongitudinalCount = 2,
- LateralSpacing = 50, LongitudinalSpacing = 100 },
- new() { Id = "swarm-10", Name = "蜂群(10架)", FormationMode = 2, LateralCount = 10, LongitudinalCount = 1,
- LateralSpacing = 30 },
- };
- return _cache;
- }
-
- public static FormationTemplate GetById(string id) => GetAll().Find(t => t.Id == id);
- }
-
- public class FormationTemplate
- {
- public string Id { get; set; } = "";
- public string Name { get; set; } = "";
- public int FormationMode { get; set; }
- public int LateralCount { get; set; } = 1;
- public int LongitudinalCount { get; set; } = 1;
- public double LateralSpacing { get; set; }
- public double LongitudinalSpacing { get; set; }
- }
-}
diff --git a/src/CounterDrone.Core/Simulation/DroneEntity.cs b/src/CounterDrone.Core/Simulation/DroneEntity.cs
index 8ecf7e2..2240195 100644
--- a/src/CounterDrone.Core/Simulation/DroneEntity.cs
+++ b/src/CounterDrone.Core/Simulation/DroneEntity.cs
@@ -14,7 +14,6 @@ namespace CounterDrone.Core.Simulation
public float Wingspan { get; }
public float TypicalSpeed { get; }
public List Route { get; }
- public int CurrentWaypointIndex { get; private set; }
public float PosX { get; private set; }
public float PosY { get; private set; }
public float PosZ { get; private set; }
@@ -25,8 +24,6 @@ namespace CounterDrone.Core.Simulation
public float PrevX { get; private set; }
public float PrevY { get; private set; }
public float PrevZ { get; private set; }
- public float FormationOffsetX { get; set; }
- public float FormationOffsetY { get; set; }
/// 沿航路已飞行弧长(米),由 RouteGeometry 驱动
private float _traveledArc;
@@ -79,36 +76,19 @@ namespace CounterDrone.Core.Simulation
}
}
- private void ApplyFormationOffset(int latIdx, float latSpacing, int longIdx, float longSpacing, FormationMode mode)
- {
- if (latIdx == 0 && longIdx == 0) return;
- switch (mode)
- {
- case FormationMode.Formation:
- FormationOffsetY = latIdx * latSpacing;
- FormationOffsetX = -longIdx * longSpacing;
- break;
- case FormationMode.Swarm:
- var rng = new Random((latIdx + longIdx * 100) * 137);
- FormationOffsetX = (float)(rng.NextDouble() - 0.5) * latSpacing * 3;
- FormationOffsetY = (float)(rng.NextDouble() - 0.5) * latSpacing * 3;
- break;
- }
- }
-
public void SavePreviousPosition()
{
PrevX = PosX; PrevY = PosY; PrevZ = PosZ;
}
- public void Update(float deltaTime, float windSpeed, WindDirection windDir)
+ public void Update(float deltaTime)
{
if (Status != DroneStatus.Flying) return;
if (Route.Count == 0) return;
// 运动模型统一在 RouteGeometry:弧长推进 + 位置查询。
- // 无人机严格沿航路匀速飞行,不受风偏影响(风偏已移除,见风偏补偿说明)。
- // windSpeed/windDir 保留签名供未来飞控模型使用,当前不参与运动。
+ // 无人机严格按航路匀速飞行。无人机不受风偏影响(真实无人机有飞控修正航向),
+ // 但云团受风偏影响(见 SimulationEngine 毁伤判定的云团参考系修正)。
float totalLen = RouteGeometry.TotalLength(Route);
if (totalLen <= 0f)
{
diff --git a/src/CounterDrone.Core/Simulation/SimulationEngine.cs b/src/CounterDrone.Core/Simulation/SimulationEngine.cs
index 3ef9ba9..4141624 100644
--- a/src/CounterDrone.Core/Simulation/SimulationEngine.cs
+++ b/src/CounterDrone.Core/Simulation/SimulationEngine.cs
@@ -28,12 +28,12 @@ namespace CounterDrone.Core.Simulation
public IReadOnlyList Munitions => _munitions;
public IReadOnlyList Events => _allEvents;
- public event Action OnMunitionLaunched;
- public event Action OnCloudGenerated;
- public event Action OnDroneDestroyed;
- public event Action OnDroneReachedTarget;
- public event Action OnZoneIntruded;
- public event Action OnSimulationEnded;
+ public event Action? OnMunitionLaunched;
+ public event Action? OnCloudGenerated;
+ public event Action? OnDroneDestroyed;
+ public event Action? OnDroneReachedTarget;
+ public event Action? OnZoneIntruded;
+ public event Action? OnSimulationEnded;
private List _drones = new();
private List _platforms = new();
@@ -237,7 +237,7 @@ namespace CounterDrone.Core.Simulation
// 5. 无人机移动
foreach (var drone in _drones.Where(d => d.Status == DroneStatus.Flying))
{
- drone.Update(scaledDt, (float)_scene.WindSpeed, (WindDirection)_scene.WindDirection);
+ drone.Update(scaledDt);
if (drone.Status == DroneStatus.ReachedTarget)
{
OnDroneReachedTarget?.Invoke(drone);
@@ -257,14 +257,14 @@ namespace CounterDrone.Core.Simulation
{
float ccx = cloud.Dispersion.Center.X, ccy = cloud.Dispersion.Center.Y, ccz = cloud.Dispersion.Center.Z;
// 无人机线段换算到云团参考系:相对位置 = drone - cloud
- float inCloudTime = DamageAssessment.PathInSphere(
+ float inCloudDistance = DamageAssessment.PathInSphere(
drone.PrevX - (ccx - cloudDx), drone.PrevY - (ccy - cloudDy), drone.PrevZ - (ccz - cloudDz),
drone.PosX - ccx, drone.PosY - ccy, drone.PosZ - ccz,
0f, 0f, 0f,
cloud.Dispersion.EffectiveRadius);
- if (inCloudTime > 0 && cloud.Dispersion.CoreDensity >= (float)_ammoSpec.EffectiveConcentration)
+ if (inCloudDistance > 0 && cloud.Dispersion.CoreDensity >= (float)_ammoSpec.EffectiveConcentration)
{
- float exposureIncrement = inCloudTime / (drone.TypicalSpeed / 3.6f);
+ float exposureIncrement = inCloudDistance / (drone.TypicalSpeed / 3.6f);
drone.ExposureTime += exposureIncrement;
var dmg = _damageModel.CalculateDamage(drone.TargetType, drone.PowerType, cloud.AerosolType, cloud.Dispersion.CoreDensity, drone.ExposureTime, exposureIncrement);
drone.ApplyDamage(dmg);
diff --git a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll
index 34d7ca735bcfbe2009a778c70f0f072882c78af5..5e2c73cf9db50b6ff263768d6bd4fb7981bc0e8a 100644
GIT binary patch
literal 125952
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