98 lines
2.6 KiB
C#
98 lines
2.6 KiB
C#
using System;
|
|
using ActiveProtect.Simulation;
|
|
using ActiveProtect.Utility;
|
|
|
|
namespace ActiveProtect.Models
|
|
{
|
|
/// <summary>
|
|
/// 告警设备基类
|
|
/// </summary>
|
|
public abstract class WarnerBase : SimulationElement, IWarner
|
|
{
|
|
/// <summary>
|
|
/// 是否处于告警状态
|
|
/// </summary>
|
|
public bool IsWarning { get; protected set; }
|
|
|
|
/// <summary>
|
|
/// 告警持续时间(秒)
|
|
/// </summary>
|
|
protected double WarningDuration { get; set; }
|
|
|
|
/// <summary>
|
|
/// 当前告警时间(秒)
|
|
/// </summary>
|
|
protected double CurrentWarningTime { get; set; }
|
|
|
|
/// <summary>
|
|
/// 所属坦克ID
|
|
/// </summary>
|
|
protected string TankId { get; set; }
|
|
|
|
protected WarnerBase(string id, Vector3D position, Orientation orientation,
|
|
ISimulationManager manager, string tankId, double warningDuration)
|
|
: base(id, position, orientation, 0, manager)
|
|
{
|
|
TankId = tankId;
|
|
WarningDuration = warningDuration;
|
|
CurrentWarningTime = 0;
|
|
IsWarning = false;
|
|
}
|
|
|
|
public virtual void StartWarning()
|
|
{
|
|
if (!IsWarning)
|
|
{
|
|
IsWarning = true;
|
|
CurrentWarningTime = 0;
|
|
Console.WriteLine($"告警器 {Id} 开始告警");
|
|
}
|
|
}
|
|
|
|
public virtual void StopWarning()
|
|
{
|
|
if (IsWarning)
|
|
{
|
|
IsWarning = false;
|
|
CurrentWarningTime = 0;
|
|
Console.WriteLine($"告警器 {Id} 停止告警");
|
|
}
|
|
}
|
|
|
|
public abstract string GetWarningStatus();
|
|
|
|
public override void Update(double deltaTime)
|
|
{
|
|
if (!IsActive) return;
|
|
|
|
if (IsWarning)
|
|
{
|
|
CurrentWarningTime += deltaTime;
|
|
if (CurrentWarningTime >= WarningDuration)
|
|
{
|
|
StopWarning();
|
|
}
|
|
}
|
|
|
|
// 更新位置(跟随坦克)
|
|
if (SimulationManager.GetEntityById(TankId) is Tank tank)
|
|
{
|
|
Position = tank.Position;
|
|
Orientation = tank.Orientation;
|
|
}
|
|
}
|
|
|
|
public override void Activate()
|
|
{
|
|
base.Activate();
|
|
Console.WriteLine($"告警器 {Id} 已激活");
|
|
}
|
|
|
|
public override void Deactivate()
|
|
{
|
|
StopWarning();
|
|
base.Deactivate();
|
|
Console.WriteLine($"告警器 {Id} 已停用");
|
|
}
|
|
}
|
|
} |