84 lines
2.4 KiB
C#
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);
|
|
}
|
|
} |