71 lines
2.3 KiB
C#
71 lines
2.3 KiB
C#
using ActiveProtect.SimulationEnvironment;
|
|
using System;
|
|
|
|
namespace ActiveProtect.Models
|
|
{
|
|
public class Tank(string id, TankConfig tankConfig, ISimulationManager simulationManager) : SimulationElement(id, tankConfig.InitialPosition, tankConfig.InitialOrientation, simulationManager), ILaserIlluminatable
|
|
{
|
|
public double Speed { get; set; } = tankConfig.InitialSpeed;
|
|
public double MaxSpeed { get; private set; } = tankConfig.MaxSpeed;
|
|
public double MaxArmor { get; private set; } = tankConfig.MaxArmor;
|
|
public double CurrentArmor { get; private set; } = tankConfig.MaxArmor;
|
|
public bool IsIlluminated { get; private set; } = false;
|
|
|
|
public override void Update(double deltaTime)
|
|
{
|
|
if (!IsActive) return;
|
|
|
|
UpdatePosition(deltaTime);
|
|
// 移除发布坦克位置更新事件的代码
|
|
}
|
|
|
|
private void UpdatePosition(double deltaTime)
|
|
{
|
|
Vector3D direction = Orientation.ToVector();
|
|
Vector3D movement = direction * Speed * deltaTime;
|
|
Position += movement;
|
|
}
|
|
|
|
public void TakeDamage(double damage, bool isMissileDamage = false)
|
|
{
|
|
if (isMissileDamage)
|
|
{
|
|
damage = CurrentArmor * 0.5;
|
|
}
|
|
|
|
CurrentArmor = Math.Max(0, CurrentArmor - damage);
|
|
if (CurrentArmor <= 0)
|
|
{
|
|
Deactivate();
|
|
}
|
|
}
|
|
|
|
public void Illuminate()
|
|
{
|
|
if (!IsIlluminated)
|
|
{
|
|
IsIlluminated = true;
|
|
Console.WriteLine($"坦克 {Id} 被激光照射");
|
|
}
|
|
}
|
|
|
|
public void StopIllumination()
|
|
{
|
|
if (IsIlluminated)
|
|
{
|
|
IsIlluminated = false;
|
|
Console.WriteLine($"坦克 {Id} 激光照射停止");
|
|
}
|
|
}
|
|
|
|
public override string GetStatus()
|
|
{
|
|
return $"坦克 {Id}:\n" +
|
|
$" 位置: {Position}\n" +
|
|
$" 速度: {Speed:F2}/{MaxSpeed:F2}\n" +
|
|
$" 装甲: {CurrentArmor:F2}/{MaxArmor:F2}\n" +
|
|
$" 状态: {(IsActive ? "活动" : "已销毁")}\n" +
|
|
$" 激光照射: {(IsIlluminated ? "是" : "否")}\n";
|
|
}
|
|
}
|
|
} |