CustomAssets
Askowl Custom Assets
Listener.cs
1 // Copyright 2018 (C) paul@marrington.net http://www.askowl.net/unity-packages
2 
3 using System;
4 using Askowl;
5 using UnityEngine;
6 
7 namespace CustomAsset.Mutable {
8  /// <a href="http://bit.ly/2QNmw2q">Common code for all event listeners. It registers and deregisters the listener with the channel</a>
9  [Serializable] public class Listener {
10  [SerializeField] private WithEmitter assetToMonitor;
11 
12  /// <a href="http://bit.ly/2QNmw2q">Create a new listener and register it with an emitter</a>
13  public static Listener Instance(WithEmitter assetToMonitor, Emitter.Action onTriggered) {
14  Listener listener = new Listener {assetToMonitor = assetToMonitor};
15  listener.Register(onTriggered);
16  return listener;
17  }
18 
19  private Listener() { }
20 
21  /// <a href="http://bit.ly/2QNmw2q">Must be implemented in containing class as it is called if the listener is triggered</a>
22  [HideInInspector] public Emitter.Action onTriggered;
23 
24  /// <a href="http://bit.ly/2QNmw2q">Used to classes that have a listener can get back the Custom Asset that triggered it</a>
25  public WithEmitter AssetToMonitor => assetToMonitor;
26 
27  /// <a href="http://bit.ly/2QNmw2q">Register an action so that if the custom asset member changes anyone can be told</a>
28  public void Register(Emitter.Action actionOnTriggered) {
29  assetToMonitor.Emitter.Remove(action: onTriggered);
30  onTriggered = actionOnTriggered;
31  Register();
32  }
33 
34  /// <a href="http://bit.ly/2QNmw2q">Register an action so that if the custom asset member changes anyone can be told</a>
35  public void Register() => assetToMonitor.Emitter.Listen(onTriggered, once: false);
36 
37  /// <a href="http://bit.ly/2QNmw2q">Call to stop receiving change calls</a>
38  public void Deregister() => assetToMonitor.Emitter.Remove(onTriggered);
39  }
40 }
Emitter.Action onTriggered
Must be implemented in containing class as it is called if the listener is triggered ...
Definition: Listener.cs:22
Common code for all event listeners. It registers and deregisters the listener with the channel ...
Definition: Listener.cs:9
Typeless base class that has an emitter
static Listener Instance(WithEmitter assetToMonitor, Emitter.Action onTriggered)
Create a new listener and register it with an emitter
Definition: Listener.cs:13
readonly Emitter Emitter
Emitter reference to tell others of data changes
void Register(Emitter.Action actionOnTriggered)
Register an action so that if the custom asset member changes anyone can be told
Definition: Listener.cs:28