Skip to content

Instantly share code, notes, and snippets.

@nucleartide
Last active December 19, 2020 13:54
Show Gist options
  • Select an option

  • Save nucleartide/135f1d22660d5c4f72100f5b78be9b9c to your computer and use it in GitHub Desktop.

Select an option

Save nucleartide/135f1d22660d5c4f72100f5b78be9b9c to your computer and use it in GitHub Desktop.

Revisions

  1. nucleartide renamed this gist Dec 19, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. nucleartide created this gist Dec 19, 2020.
    50 changes: 50 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    class EnemyModel
    {
    public ReactiveProperty<long> CurrentHp { get; private set; }
    public ReactiveProperty<bool> IsDed { get; private set; }

    public EnemyModel(int initialHp)
    {
    CurrentHp = new ReactiveProperty<long>(initialHp);
    IsDead = CurrentHp.Select(x => x <= 0).ToReactiveProperty();
    }
    }

    class ReactivePresenter : MonoBehaviour
    {
    // Inject these dependencies in the Inspector.
    public Button MyButton;
    public Toggle MyToggle;

    // State-change events from model.
    Enemy enemy = new Enemy(1000);

    void SubscribeToModel()
    {
    enemy.CurrentHp.SubscribeToText(MyText);
    enemy.IsDead.Where(isDead => isDead).Subscribe(HandleIsDeadChange);
    }

    void HandleIsDeadChange()
    {
    MyToggle.interactable = false;
    MyButton.interactable = false;
    }

    void SubscribeToUI()
    {
    MyButton.OnClickAsObservable().Subscribe(HandleButtonClick);
    MyToggle.OnValueChangedAsObservable().SubscribeToInteractable(MyButton);
    }

    void HandleButtonClick()
    {
    enemy.CurrentHp.Value -= 99;
    }

    void Start()
    {
    SubscribeToModel();
    SubscribeToUI();
    }
    }