Skip to content

Stat Modifier

Aprius edited this page Aug 28, 2024 · 3 revisions
public BaseStat attackStatBase;

private StatMediator _mediator;
private Stat _attack;

private void Start()
{
    _mediator = new StatMediator();
    _attack = new Stat(_mediator, attackStatBase);

    var statModifierA = new StatModifier(attackStatBase.statType, new AddModifier(100), 0);
    var statModifierB = new StatModifier(attackStatBase.statType, new MultiplyModifier(2), 1);

    _mediator.AddModifier(statModifierA);
    _mediator.AddModifier(statModifierB);

    Debug.Log("Attack :" + _attack.Value);

    App.Delay(1,
        () =>
        {
            Debug.Log("Attack :" + _attack.Value);
            _mediator.RemoveModifier(statModifierA);
            Debug.Log("Attack :" + _attack.Value);
        });
}

private void Update() { _mediator.Update(App.DeltaTime(ETimeMode.Normal)); }

image

image

  • BaseStat : Contains basic stat information, you can create via menu Create > Pancake > Misc > Base Stat

Using Factory

using Pancake.Common;
using Pancake.StatModifier;
using Sisus.Init;
using UnityEngine;

public class Demo : MonoBehaviour<IStatModifierFactory>
{
    public BaseStat attackStatBase;

    private StatMediator _mediator;
    private Stat _attack;
    private IStatModifierFactory _factory;

    protected override void Init(IStatModifierFactory argument) { _factory = argument; }

    private void Start()
    {
        _mediator = new StatMediator();
        _attack = new Stat(_mediator, attackStatBase);

        var statModifierA = _factory.Create(EModifierType.Add, attackStatBase.statType, 100);
        var statModifierB = _factory.Create(EModifierType.Multiply, attackStatBase.statType, 2, 1);

        _mediator.AddModifier(statModifierA);
        _mediator.AddModifier(statModifierB);

        Debug.Log("Attack :" + _attack.Value);

        App.Delay(1,
            () =>
            {
                Debug.Log("Attack :" + _attack.Value);
                _mediator.RemoveModifier(statModifierA);
                Debug.Log("Attack :" + _attack.Value);
            });
    }

    private void Update() { _mediator.Update(App.DeltaTime(ETimeMode.Normal)); }
}
Clone this wiki locally