Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / buff / effect / Eff_PiggyBank.cs

using System.Text.Json;
using Godot;

[EffectFragment("PiggyBank", "存钱罐, 使用后返还存入的金币, 参数1为返还金币的倍率(小数)")]
public class Eff_PiggyBank : EffectFragment
{
    private float _value;
    //当前存入的金币数量
    private float _currValue;
    
    public override void InitParam(JsonElement[] arg)
    {
        _value = arg[0].GetSingle();
    }

    public override bool OnCheckUse()
    {
        return _currValue > 0;
    }

    public override void OnUse()
    {
        var goldList = Utils.GetGoldList(Mathf.FloorToInt(_currValue * _value));
        foreach (var id in goldList)
        {
            var o = ObjectManager.GetActivityObject<Gold>(id);
            o.Position = Role.Position;
            o.Throw(0,
                Utils.Random.RandomRangeInt(50, 110),
                new Vector2(Utils.Random.RandomRangeInt(-20, 20), Utils.Random.RandomRangeInt(-20, 20)),
                0
            );
        }

        _currValue = 0;
    }

    public override void OnPickUpItem()
    {
        Role.RoleState.CalcGetGoldEvent += OnCalcGetGoldEvent;
    }

    public override void OnRemoveItem()
    {
        Role.RoleState.CalcGetGoldEvent -= OnCalcGetGoldEvent;
    }
    
    private void OnCalcGetGoldEvent(int origin, RefValue<int> refValue)
    {
        _currValue += refValue.Value;
        refValue.Value = 0;
    }
}