Razenpok / Razensoft.Mediator

Simple mediator library for Unity

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Razensoft.Mediator

Simple mediator library for Unity. This library is inspired by MediatR in many ways but it adds a separation of input/output handling and sync/async requests to make it more suitable for gamedev needs.

Installation

There are several ways to install this library into our project:

  • Plain install: Clone or download this repository and put it somewhere in your Unity project
  • Unity Package Manager (UPM): Add the following line to Packages/manifest.json:
    • "com.razensoft.mediator": "https://github.com/Razenpok/Razensoft.Mediator.git?path=src/Razensoft.Mediator#1.0.0",
  • OpenUPM: After installing openupm-cli, run the following command:
    • openupm add com.razensoft.mediator

Usage

public class PurchaseArmorUpgradeButton : MonoBehaviour
{
    [SerializeField] private Button _button;
    [SerializeField] private int _id;

    private void Start()
    {
        _button.onClick.AddListener(OnClicked);
    }

    private void OnClicked()
    {
        var isSuccess = InputMediator.Send(new Command{ Id = _id });
        if (isSuccess)
        {
            SpawnSomeFancyParticlesOrWhatever();
        }
        else
        {
            ShowNotEnoughMoneyMessage();
        }
    }

    public class Command : IRequest<bool>
    {
        public int Id { get; set; }
    }

    public class CommandHandler : InputRequestHandler<Command, bool>
    {
        private readonly Player _player;
        private readonly Analytics _analytics;

        public CommandHandler(Player player, Analytics analytics)
        {
            _player = player;
            _analytics = analytics;
        }

        protected override bool Handle(Command command)
        {
            _analytics.PurchaseArmorUpgradeClicked();
            if (!_player.CanPurchaseArmorUpgrade(command.Id))
            {
                return false;
            }

            _player.PurchaseArmorUpgrade(command.Id);
            _analytics.PurchaseArmorUpgradeBought();
            return true;
        }
    }
}

Readings and watchings

About

Simple mediator library for Unity

License:MIT License


Languages

Language:C# 100.0%