258 lines
8.1 KiB
C#
258 lines
8.1 KiB
C#
using ThreatSource.Utils;
|
||
using AirTransmission;
|
||
|
||
namespace ThreatSource.Simulation
|
||
{
|
||
/// <summary>
|
||
/// 仿真环境数据类,包含环境相关的参数
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 该类封装了仿真环境的关键参数:
|
||
/// - 大气参数(密度、温度、湿度)
|
||
/// - 气象条件(风速、能见度)
|
||
/// - 地理信息(地形、高程)
|
||
/// 用于模拟真实环境对仿真的影响
|
||
/// </remarks>
|
||
public class SimulationEnvironmentData
|
||
{
|
||
/// <summary>
|
||
/// 获取或设置大气密度,单位:千克/立方米
|
||
/// </summary>
|
||
public double AtmosphericDensity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 获取或设置风速向量,单位:米/秒
|
||
/// </summary>
|
||
public Vector3D WindVelocity { get; set; } = Vector3D.Zero;
|
||
|
||
/// <summary>
|
||
/// 获取或设置环境温度,单位:开尔文
|
||
/// </summary>
|
||
public double Temperature { get; set; }
|
||
|
||
/// <summary>
|
||
/// 获取或设置相对湿度,范围:0-1
|
||
/// </summary>
|
||
public double RelativeHumidity { get; set; }
|
||
|
||
/// <summary>
|
||
/// 获取或设置能见度,单位:米
|
||
/// </summary>
|
||
public double Visibility { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 第三方仿真环境适配器接口
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 该接口用于与外部仿真环境进行集成,提供实体查询和事件交互功能。
|
||
/// 实现此接口可以将威胁源仿真库与其他仿真系统对接。
|
||
/// </remarks>
|
||
public interface ISimulationAdapter
|
||
{
|
||
/// <summary>
|
||
/// 从外部仿真环境获取实体
|
||
/// </summary>
|
||
/// <param name="id">实体ID</param>
|
||
/// <returns>实体对象,如果不存在则返回null</returns>
|
||
object? GetEntity(string id);
|
||
|
||
/// <summary>
|
||
/// 发布事件到第三方仿真环境
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型</typeparam>
|
||
/// <param name="evt">要发布的事件</param>
|
||
/// <remarks>
|
||
/// 用于将威胁源仿真库中的事件同步到外部仿真环境
|
||
/// </remarks>
|
||
void PublishToExternalSimulation<T>(T evt);
|
||
|
||
/// <summary>
|
||
/// 从第三方仿真环境接收事件
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型</typeparam>
|
||
/// <param name="evt">接收到的事件</param>
|
||
/// <remarks>
|
||
/// 用于接收外部仿真环境的事件并在威胁源仿真库中处理
|
||
/// </remarks>
|
||
void ReceiveFromExternalSimulation<T>(T evt);
|
||
|
||
/// <summary>
|
||
/// 获取实体的状态
|
||
/// </summary>
|
||
/// <param name="id">实体ID</param>
|
||
/// <returns>实体的状态数据</returns>
|
||
object? GetEntityState(string id);
|
||
|
||
/// <summary>
|
||
/// 设置实体的环境数据
|
||
/// </summary>
|
||
/// <param name="id">实体ID</param>
|
||
/// <param name="data">实体的环境数据</param>
|
||
void SetEntityEnvironment(string id, SimulationEnvironmentData data);
|
||
|
||
/// <summary>
|
||
/// 同步仿真时间
|
||
/// </summary>
|
||
/// <param name="simulationTime">仿真时间</param>
|
||
void SynchronizeTime(double simulationTime);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 仿真管理器接口,定义仿真系统的核心功能
|
||
/// </summary>
|
||
/// <remarks>
|
||
/// 该接口定义了仿真系统应提供的基本功能:
|
||
/// - 事件系统:支持发布/订阅模式的事件处理
|
||
/// - 实体管理:实体的注册、注销和查询
|
||
/// - 仿真控制:启动、暂停、恢复和停止仿真
|
||
/// - 第三方集成:支持与外部仿真环境的对接
|
||
/// </remarks>
|
||
public interface ISimulationManager
|
||
{
|
||
/// <summary>
|
||
/// 获取当前仿真状态
|
||
/// </summary>
|
||
SimulationState State { get; }
|
||
|
||
/// <summary>
|
||
/// 获取当前仿真时间
|
||
/// </summary>
|
||
double CurrentTime { get; }
|
||
|
||
/// <summary>
|
||
/// 获取当前天气系统
|
||
/// </summary>
|
||
Weather? CurrentWeather { get; }
|
||
|
||
/// <summary>
|
||
/// 设置当前天气
|
||
/// </summary>
|
||
/// <param name="weather">天气条件</param>
|
||
void SetWeather(Weather weather);
|
||
|
||
/// <summary>
|
||
/// 启动仿真系统
|
||
/// </summary>
|
||
/// <param name="timeStep">时间步长</param>
|
||
void StartSimulation(double timeStep);
|
||
|
||
/// <summary>
|
||
/// 暂停仿真系统
|
||
/// </summary>
|
||
void PauseSimulation();
|
||
|
||
/// <summary>
|
||
/// 恢复仿真系统
|
||
/// </summary>
|
||
void ResumeSimulation();
|
||
|
||
/// <summary>
|
||
/// 停止仿真系统
|
||
/// </summary>
|
||
void StopSimulation();
|
||
|
||
/// <summary>
|
||
/// 更新仿真系统
|
||
/// </summary>
|
||
/// <param name="deltaTime">时间步长</param>
|
||
void Update(double deltaTime);
|
||
|
||
#region 事件系统
|
||
/// <summary>
|
||
/// 发布事件到仿真系统
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型</typeparam>
|
||
/// <param name="evt">要发布的事件</param>
|
||
void PublishEvent<T>(T evt);
|
||
|
||
/// <summary>
|
||
/// 订阅特定类型的事件
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型</typeparam>
|
||
/// <param name="handler">事件处理函数</param>
|
||
void SubscribeToEvent<T>(Action<T> handler);
|
||
|
||
/// <summary>
|
||
/// 取消订阅特定类型的事件
|
||
/// </summary>
|
||
/// <typeparam name="T">事件类型</typeparam>
|
||
/// <param name="handler">要取消的事件处理函数</param>
|
||
void UnsubscribeFromEvent<T>(Action<T> handler);
|
||
#endregion
|
||
|
||
#region 实体管理
|
||
/// <summary>
|
||
/// 注册实体到仿真系统
|
||
/// </summary>
|
||
/// <param name="id">实体ID</param>
|
||
/// <param name="entity">实体对象</param>
|
||
/// <returns>注册是否成功</returns>
|
||
bool RegisterEntity(string id, object entity);
|
||
|
||
/// <summary>
|
||
/// 从仿真系统注销实体
|
||
/// </summary>
|
||
/// <param name="id">要注销的实体ID</param>
|
||
/// <returns>注销是否成功</returns>
|
||
bool UnregisterEntity(string id);
|
||
|
||
/// <summary>
|
||
/// 根据ID获取实体
|
||
/// </summary>
|
||
/// <param name="id">实体ID</param>
|
||
/// <returns>实体对象,如果不存在则返回null</returns>
|
||
object? GetEntityById(string id);
|
||
|
||
/// <summary>
|
||
/// 获取特定类型的所有实体
|
||
/// </summary>
|
||
/// <typeparam name="T">实体类型</typeparam>
|
||
/// <returns>指定类型的实体列表</returns>
|
||
IReadOnlyList<T> GetEntitiesByType<T>() where T : class;
|
||
|
||
/// <summary>
|
||
/// 获取仿真系统中的所有实体
|
||
/// </summary>
|
||
/// <returns>所有实体的列表</returns>
|
||
IReadOnlyList<object> GetAllEntities();
|
||
#endregion
|
||
|
||
#region 第三方仿真环境集成
|
||
/// <summary>
|
||
/// 设置第三方仿真环境适配器
|
||
/// </summary>
|
||
/// <param name="adapter">要设置的适配器实例</param>
|
||
/// <remarks>
|
||
/// 用于配置与外部仿真环境的集成
|
||
/// </remarks>
|
||
void SetSimulationAdapter(ISimulationAdapter adapter);
|
||
|
||
/// <summary>
|
||
/// 获取当前的仿真环境适配器
|
||
/// </summary>
|
||
/// <returns>当前配置的适配器实例,如果未配置则返回null</returns>
|
||
ISimulationAdapter? GetSimulationAdapter();
|
||
#endregion
|
||
}
|
||
|
||
/// <summary>
|
||
/// 仿真状态
|
||
/// </summary>
|
||
public enum SimulationState
|
||
{
|
||
/// <summary>
|
||
/// 停止状态
|
||
/// </summary>
|
||
Stopped,
|
||
/// <summary>
|
||
/// 运行状态
|
||
/// </summary>
|
||
Running,
|
||
/// <summary>
|
||
/// 暂停状态
|
||
/// </summary>
|
||
Paused // 暂停状态
|
||
}
|
||
}
|