using UnityEngine;
using RR.Game2D.Core.Managers;
using RR.Game2D.Entities.Projectiles;
using RR.Game2D.Behaviour.ScriptableObjects;
namespace RR.Game2D.Behaviour
{
public class EnemyFireScript : MonoBehaviour
{
[SerializeField] private EnemyFireConfiguration config;
private float lastThrowTime = -999f;
private EnemyBasicProjectile _projectile;
void Start()
{
lastThrowTime = Time.time;
}
void Update()
{
if (!config.projectilePrefab)
{
Debug.LogError("EnemyFireScript: projectile prefab missing; assign projectile prefab in the inspector");
return;
}
//if (projectile != null && Time.time - lastThrowTime >= projectile.maxLifetime)
// projectile.Despawn();
// Бросок
if (Time.time - lastThrowTime >= config.throwCooldown)
Throw();
}
private void OnDestroy()
{
// При смерти врага сго снаряд тоже пропадает
if (_projectile != null) _projectile.Despawn();
}
///
/// Метод для броска снаряда (выстрела).
/// У снаряда обязательно должен быть метод Launch(Vector2 direction)
///
private void Throw()
{
float rotationY = transform.localEulerAngles.y;
Vector2 throwDirection = rotationY >= 180f ? Vector2.right : Vector2.left;
Collider2D enemyCol = GetComponent();
Vector2 throwPosition = new(1.4f * throwDirection.x + transform.position.x, enemyCol.bounds.center.y);
_projectile = Instantiate(config.projectilePrefab, throwPosition, Quaternion.identity);
_projectile.owner = gameObject;
_projectile.maxLifetime = config.projectileLifetime;
_projectile.despawnInstantly = config.projectileDespawnInstantly;
_projectile.fallGravityScale = config.projectileFallGravityScale;
Collider2D projectileCol = _projectile.GetComponent();
_projectile.transform.localRotation = throwDirection.x < 0 ? Quaternion.Inverse(_projectile.transform.localRotation) : _projectile.transform.localRotation;
_projectile.transform.position = throwPosition;
_projectile.Launch(throwDirection, config.throwSpeed);
if (config.shotSounds.Length > 0)
GameManager.Instance.Audio.PlayRandomSfxAt(config.shotSounds, throwPosition);
if (enemyCol && projectileCol) Physics2D.IgnoreCollision(enemyCol, projectileCol, true);
lastThrowTime = Time.time;
}
}
}