Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / prop / buff / BuffActivity.cs
@小李xl 小李xl on 13 Mar 2024 2 KB buff系统重构中

using System.Collections.Generic;
using Godot;

/// <summary>
/// 通用被动道具实体类
/// </summary>
[Tool]
public partial class BuffActivity : Prop
{
    private readonly List<BuffFragment> _buffFragment = new List<BuffFragment>();
    
    public override void OnPickUpItem()
    {
        foreach (var buffFragment in _buffFragment)
        {
            buffFragment.OnPickUpItem();
        }
    }

    public override void OnRemoveItem()
    {
        foreach (var buffFragment in _buffFragment)
        {
            buffFragment.OnRemoveItem();
        }
    }

    public void AddBuffFragment<T>() where T : BuffFragment, new()
    {
        var fragment = AddComponent<T>();
        _buffFragment.Add(fragment);
        fragment.Init();
        if (Master != null)
        {
            fragment.OnPickUpItem();
        }
    }
    
    public void AddBuffFragment<T>(float arg1) where T : BuffFragment, new()
    {
        var fragment = AddComponent<T>();
        _buffFragment.Add(fragment);
        fragment.Init(arg1);
        if (Master != null)
        {
            fragment.OnPickUpItem();
        }
    }
    
    public void AddBuffFragment<T>(float arg1, float arg2) where T : BuffFragment, new()
    {
        var fragment = AddComponent<T>();
        _buffFragment.Add(fragment);
        fragment.Init(arg1, arg2);
        if (Master != null)
        {
            fragment.OnPickUpItem();
        }
    }
    
    public void AddBuffFragment<T>(float arg1, float arg2, float arg3) where T : BuffFragment, new()
    {
        var fragment = AddComponent<T>();
        _buffFragment.Add(fragment);
        fragment.Init(arg1, arg2, arg3);
        if (Master != null)
        {
            fragment.OnPickUpItem();
        }
    }
    
    public void AddBuffFragment<T>(float arg1, float arg2, float arg3, float arg4) where T : BuffFragment, new()
    {
        var fragment = AddComponent<T>();
        _buffFragment.Add(fragment);
        fragment.Init(arg1, arg2, arg3, arg4);
        if (Master != null)
        {
            fragment.OnPickUpItem();
        }
    }

    public override void Interactive(ActivityObject master)
    {
        if (master is Player role)
        {
            Pickup();
            role.PickUpBuffProp(this);
        }
    }

    public override CheckInteractiveResult CheckInteractive(ActivityObject master)
    {
        if (master is Player)
        {
            return new CheckInteractiveResult(this, true, CheckInteractiveResult.InteractiveType.PickUp);
        }
        return base.CheckInteractive(master);
    }
}