public override void Initialize(object data = null) { base.Initialize(data); leftUnits = new List <BaseUnit>(); rightUnits = new List <BaseUnit>(); goldManager = new GoldManager(initialGoldValue, 7.5f); Disposables.Add(towerManager.OnTowerDestroyed.Subscribe(x => { if (towerManager.AreAllTowersDestroyed()) { Lose(); return; } else if (towerManager.AreAllTowersRepaired()) { Win(); return; } switch (x.TowerId) { case "TowerA": FlipRightAttackingUnits(); break; case "TowerB": ForwardRightAttackingUnits(); break; case "TowerC": FlipLeftAttackingUnits(); break; case "TowerD": ForwardLeftAttackingUnits(); break; } })); Disposables.Add(towerManager.OnTowerRepaired.Subscribe(x => { if (towerManager.AreAllTowersDestroyed()) { Lose(); return; } else if (towerManager.AreAllTowersRepaired()) { Win(); return; } switch (x.TowerId) { case "TowerA": ForwardLeftRepairingUnits(); break; case "TowerB": FlipLeftRepairingUnits(); break; case "TowerC": ForwardRightRepairingUnits(); break; case "TowerD": FlipRightRepairingUnits(); break; } })); }