84 lines
2.4 KiB
C#

using UnityEngine;
public class MissileWeapon : Weapon
{
[Header("Ракета")]
//[SerializeField] private float lifetime = 20f;
[SerializeField] private float damage = 10f;
[SerializeField] private float riseSpeed = 15f;
//[SerializeField] private float pursueSpeed = 25f;
[SerializeField] private Vector3 intermediateOffset;
[Header("Прицел")]
[SerializeField] private AimBase aim;
[Header("Настройки оружия")]
[SerializeField] float ReloadInterval = 4;
private Missile activeMissile;
private Transform currentTarget;
public override bool CanShoot => Ammo > 0 && Time.time - LastShootTime > ReloadInterval && currentTarget != null;
public override float ReloadPercent => (Time.time - LastShootTime) / ReloadInterval;
private void Update()
{
if (aim != null)
{
currentTarget = aim.Target;
}
if (!reloaded && ReloadPercent >= 1) SetReloaded();
}
public override void Shoot()
{
if (!CanShoot) return;
var projectile = Instantiate(ProjectilePrefab, ShootPoint.position, ShootPoint.rotation);
if (projectile.TryGetComponent(out Missile missile))
{
activeMissile = missile;
Vector3 intermediate = ShootPoint.position + intermediateOffset;
missile.Launch(
owner: Owner,
target: currentTarget,
intermediatePoint: intermediate,
riseSpeed: riseSpeed,
//pursueSpeed: pursueSpeed,
//lifetime: lifetime,
damage: damage
);
//missile.OnMissileDestroyed += OnMissileDestroyed;
PerformShoot(missile);
}
else
{
Destroy(projectile);
Debug.LogWarning("Missing Missile component on prefab");
}
}
//private void OnMissileDestroyed(Missile missile)
//{
// if (activeMissile == missile)
// {
// activeMissile = null;
// missile.OnMissileDestroyed -= OnMissileDestroyed;
// }
//}
private void OnDrawGizmos()
{
if (ShootPoint == null) return;
Gizmos.color = Color.red;
Vector3 intermediate = ShootPoint.position + intermediateOffset;
Gizmos.DrawLine(ShootPoint.position, intermediate);
Gizmos.DrawSphere(intermediate, 0.5f);
}
}