using System; using Player; using UnityEngine; namespace Ai { [Serializable] public class SequenceBullet { public Bullet[] Bullets; } public class SequenceGun : Gun { [SerializeField] private float _sequenceTime; [SerializeField] private AnimationCurve _burstShots; [SerializeField] private AnimationCurve _angle; [SerializeField] private AnimationCurve _bulletsInRow; [SerializeField] private SequenceBullet[] _bullets; private float _currentSequenceTime; private int _currentBulletSequence; protected override void Update() { if (!CanShoot && GlobalsVar.gBoard.DialogsCount > 0) return; _currentSequenceTime += Time.deltaTime; if (_currentSequenceTime >= _sequenceTime) _currentSequenceTime = 0; _shotsPerBurst = (int)_burstShots.Evaluate(_currentSequenceTime); base.Update(); } protected override void Shoot() { var row = _bulletsInRow.Evaluate(_currentSequenceTime); var angle = _angle.Evaluate(_currentSequenceTime); var currentBulletSeq = _bullets != null && _bullets.Length > 0 ? _bullets[_currentBulletSequence] : null; _currentBulletSequence++; if (_bullets == null || _currentBulletSequence > _bullets.Length - 1) _currentBulletSequence = 0; var currentBullet = 0; for (var i = 0; i < row; i++) { var targetAngle = 0f; if (row > 0) { var currentModify = i == (int) (i / row) ? 0 : i < i / row ? -i / row : i / row; targetAngle = angle * currentModify; } var bullet = _bullet; if (currentBulletSeq != null && currentBulletSeq.Bullets != null && currentBulletSeq.Bullets.Length > 0) { bullet = currentBulletSeq.Bullets[currentBullet]; currentBullet++; if (currentBullet > currentBulletSeq.Bullets.Length - 1) currentBullet = 0; } CustomShoot(targetAngle, bullet); } } private void CustomShoot(float angle, Bullet bulletPrefab) { var bullet = Instantiate(bulletPrefab); bullet.transform.position = transform.position; var direction = _toPlayer ? AiController.Instance.PlayerPosition : transform.forward; direction = Quaternion.Euler(new Vector3(0, angle, 0)) * direction; bullet.Init(direction, 0, 0, _toPlayer); string shootSound = GetShootSoundByBulletName(bullet.name); if (shootSound != "") SoundsManager.Instance.PlaySound(shootSound); } } }