Hello. I faced such a problem that in my 1 class I need to implement 2 actions for 2 different events, how can this be resolved?
Observer:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Observer : IObserver
{
public IObservable obs1;
public IObservable obs2;
public Observer(IObservable first, IObservable second)
{
obs1 = first;
obs2 = second;
}
public void Init()
{
obs1.AddObserver(this);
obs2.AddObserver(this);
}
public void Invoke()
{
//doing for obs1
}
public void Invoke3()
{
//doing for obs2
}
}
Event1:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Observable : IObservable
{
private HashSet<IObserver> observers = new HashSet<IObserver>();
public void AddObserver(IObserver o)
{
observers.Add(o);
}
public void RemoveObserver(IObserver o)
{
observers.Remove(o);
}
public void NotifyObservers()
{
var e = observers.GetEnumerator();
while(e.MoveNext())
{
e.Current.Invoke();
}
}
}
Event2:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Observable2 : IObservable
{
private HashSet<IObserver> observers = new HashSet<IObserver>();
public void AddObserver(IObserver o)
{
observers.Add(o);
}
public void RemoveObserver(IObserver o)
{
observers.Remove(o);
}
public void NotifyObservers()
{
var e = observers.GetEnumerator();
while(e.MoveNext())
{
e.Current.Invoke();
}
}
}