-
- using System;
- using Config;
- using Godot;
-
- /// <summary>
- /// 分裂子弹
- /// </summary>
- [Tool]
- public partial class SplitBullet : Bullet
- {
- /// <summary>
- /// 创建子分裂子弹时的回调
- /// </summary>
- public event Action<IBullet> OnCreateSplitBulletEvent;
-
- private BulletData _bulletData;
- private int _count = 0;
-
- /// <summary>
- /// 设置分裂的子弹
- /// </summary>
- /// <param name="data">子弹数据</param>
- /// <param name="count">子弹数量</param>
- public void SetSplitBullet(BulletData data, int count)
- {
- _bulletData = data;
- _count = count;
- }
-
- public override void LogicalFinish()
- {
- base.LogicalFinish();
-
- //创建分裂子弹
- if (_count > 0 && _bulletData != null)
- {
- var a = Mathf.Pi * 2 / _count;
- for (var i = 0; i < _count; i++)
- {
- var clone = _bulletData.Clone();
- clone.Rotation = a * i;
- clone.Position = Position + new Vector2(5, 0).Rotated(clone.Rotation);
- var shootBullet = FireManager.ShootBullet(clone, clone.TriggerRole.Camp);
- if (OnCreateSplitBulletEvent != null)
- {
- OnCreateSplitBulletEvent(shootBullet);
- }
- }
- }
- }
-
- public override void OnLeavePool()
- {
- base.OnLeavePool();
- OnCreateSplitBulletEvent = null;
- _bulletData = null;
- _count = 0;
- }
- }