Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / bullet / normal / SplitBullet.cs

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;
    }
}