Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / bullet / normal / BrushBullet.cs
using Godot;

/// <summary>
/// 带笔刷的子弹
/// </summary>
[Tool]
public partial class BrushBullet : Bullet
{
    /// <summary>
    /// 笔刷 id
    /// </summary>
    [Export]
    public string BrushId { get; set; }

    /// <summary>
    /// 生效高度, 当物体离地高度小于这个值时生效, 当值小于 0 时一直生效
    /// </summary>
    [Export]
    public float EffectiveAltitude { get; set; } = -1;

    private BrushImageData _brushData;

    public override void OnInit()
    {
        base.OnInit();
        _brushData = LiquidBrushManager.GetBrush(BrushId);
    }

    protected override void Process(float delta)
    {
        base.Process(delta);
        //测试笔刷
        if (EffectiveAltitude < 0 || Altitude <= EffectiveAltitude)
        {
            DrawLiquid(_brushData);
        }
        else
        {
            BrushPrevPosition = null;
        }
    }

    public override void OnPlayDisappearEffect()
    {
        PlayDisappearEffect(ResourcePath.prefab_effect_bullet_BulletDisappear0002_tscn);
    }

    public override void OnPlayCollisionEffect(KinematicCollision2D collision)
    {
        //测试笔刷
        DrawLiquid(_brushData);
        PlayCollisionEffect(collision, ResourcePath.prefab_effect_bullet_BulletSmoke0002_tscn);
    }

    public override void OnLeavePool()
    {
        base.OnLeavePool();
        BrushPrevPosition = null;
    }
}