public void Register(IOEvent e, IOObserver observer)
 {
     if (!observerDictionary.ContainsKey(e))
     {
         List<IOObserver> observerList = new List<IOObserver>();
         observerDictionary.Add(e, observerList);
     }
     observerDictionary[e].Add(observer);
 }
 public void Unregister(IOObserver observer)
 {
     foreach(List<IOObserver> list in observerDictionary.Values)
     {
         if (list.Contains(observer))
         {
             list.Remove(observer);
         }
     }
 }
 public void Unregister(IOEvent e, IOObserver observer)
 {
     if (observerDictionary.ContainsKey(e))
     {
         if (observerDictionary[e].Contains(observer))
         {
             observerDictionary[e].Remove(observer);
         }
     }
 }
 public static void RegisterIO(InputManager ioManager, IOObserver ioObserver)
 {
     ioManager.Register(leftMousePress, ioObserver);
     ioManager.Register(leftMouseRelease, ioObserver);
     ioManager.Register(rightMousePress, ioObserver);
     ioManager.Register(rightMouseRelease, ioObserver);
     ioManager.Register(constructCombat, ioObserver);
     ioManager.Register(constructTransport, ioObserver);
     ioManager.Register(createCompany, ioObserver);
     ioManager.Register(ctrPress, ioObserver);
     ioManager.Register(ctrRelease, ioObserver);
 }