84 lines
3.0 KiB
C#
84 lines
3.0 KiB
C#
using ActiveProtect.SimulationEnvironment;
|
|
|
|
namespace ActiveProtect.Models
|
|
{
|
|
public class LaserBeamRiderMissile : MissileBase
|
|
{
|
|
private LaserBeamRiderGuidanceSystem LaserBeamRiderGuidanceSystem;
|
|
|
|
|
|
public LaserBeamRiderMissile(string id, MissileConfig missileConfig, ISimulationManager simulationManager)
|
|
: base(id, missileConfig, simulationManager)
|
|
{
|
|
LaserBeamRiderGuidanceSystem = new LaserBeamRiderGuidanceSystem(missileConfig.ProportionalNavigationCoefficient);
|
|
}
|
|
|
|
protected override Vector3D GetGuidanceCommand()
|
|
{
|
|
return LaserBeamRiderGuidanceSystem.GetGuidanceCommand();
|
|
}
|
|
|
|
private void OnLaserBeamStart(LaserBeamStartEvent evt)
|
|
{
|
|
if (evt?.LaserBeamRider != null)
|
|
{
|
|
LaserBeamRiderGuidanceSystem?.ActivateLaserBeam(evt.LaserBeamRider.Position, evt.LaserBeamRider.LaserDirection, evt.LaserBeamRider.LaserPower);
|
|
}
|
|
}
|
|
|
|
private void OnLaserBeamUpdate(LaserBeamUpdateEvent evt)
|
|
{
|
|
if (evt?.LaserBeamRider != null)
|
|
{
|
|
LaserBeamRiderGuidanceSystem?.UpdateLaserBeamRider(evt.LaserBeamRider.Position, evt.LaserBeamRider.LaserDirection, evt.LaserBeamRider.LaserPower);
|
|
}
|
|
}
|
|
|
|
private void OnLaserBeamStop(LaserBeamStopEvent evt)
|
|
{
|
|
if (evt?.LaserBeamRider != null)
|
|
{
|
|
LaserBeamRiderGuidanceSystem?.DeactivateLaserBeam(evt.LaserBeamRider.Position, evt.LaserBeamRider.LaserDirection);
|
|
}
|
|
}
|
|
|
|
public override void Update(double deltaTime)
|
|
{
|
|
if (LaserBeamRiderGuidanceSystem.HasGuidance)
|
|
{
|
|
LaserBeamRiderGuidanceSystem.Update(deltaTime, Position, Velocity);
|
|
this.HasGuidance = true;
|
|
}
|
|
else
|
|
{
|
|
this.HasGuidance = false;
|
|
}
|
|
|
|
base.Update(deltaTime);
|
|
}
|
|
|
|
public override string GetStatus()
|
|
{
|
|
string baseStatus = base.GetStatus().Replace("导弹", "激光驾束制导导弹");
|
|
string additionalStatus = $"\n 激光引导: {(LaserBeamRiderGuidanceSystem.HasGuidance ? "有效" : "无效")}";
|
|
return baseStatus + additionalStatus;
|
|
}
|
|
|
|
public override void Activate()
|
|
{
|
|
base.Activate();
|
|
SimulationManager.SubscribeToEvent<LaserBeamStartEvent>(OnLaserBeamStart);
|
|
SimulationManager.SubscribeToEvent<LaserBeamStopEvent>(OnLaserBeamStop);
|
|
SimulationManager.SubscribeToEvent<LaserBeamUpdateEvent>(OnLaserBeamUpdate);
|
|
}
|
|
|
|
public override void Deactivate()
|
|
{
|
|
base.Deactivate();
|
|
SimulationManager.UnsubscribeFromEvent<LaserBeamStartEvent>(OnLaserBeamStart);
|
|
SimulationManager.UnsubscribeFromEvent<LaserBeamStopEvent>(OnLaserBeamStop);
|
|
SimulationManager.UnsubscribeFromEvent<LaserBeamUpdateEvent>(OnLaserBeamUpdate);
|
|
}
|
|
}
|
|
}
|