/// <summary> /// Converts from Constructables, if ready, to a cargo object, adding the cargo object to the factory's cargo. /// </summary> /// <param name="f"></param> /// <returns></returns> async Task _handleFactoryConstruction(Factory f) { CargoTransaction tr = null; switch (f.CompletedPendingInstantiation) { case Constructables.Null: tr = null; break; case Constructables.LaserTurret: { CargoLaserTurret t = new CargoLaserTurret(_galaxyIDManager.PopFreeID(), 666, new LaserWeaponStats()); tr = new TransactionAddStatefulCargo(f, t, false); _cargoSynchronizer.RequestTransaction(tr); await tr.ResultTask; break; } } if (tr != null && tr.ResultTask.Result == CargoResult.Success) { f.CompletedPendingInstantiation = Constructables.Null; } }
async Task FillPorts(GalaxyManager galaxyManager, LocalIDManager galaxyIDManager, CargoSynchronizer cargoSynchronizer) { var ports = galaxyManager.GetAllAreas().Where(a => a.AreaType == AreaTypes.Port); CargoTransaction lastTransaction = null; foreach (var p in ports) { var port = p as Port; foreach (var s in _config.PortConfig.StatefulCargoCounts) { StatefulCargo sc; for (int i = 0; i < s.Value; i++)//Yes, this loop is lazy, but it's 11:30PM... { //TODO: make a StatefulCargoFactory switch (s.Key) { case StatefulCargoTypes.Barge: { sc = new CargoShip(galaxyIDManager.PopFreeID(), 666, ShipStats[ShipTypes.Barge]); break; } case StatefulCargoTypes.BattleCruiser: { sc = new CargoShip(galaxyIDManager.PopFreeID(), 666, ShipStats[ShipTypes.BattleCruiser]); break; } case StatefulCargoTypes.Penguin: { sc = new CargoShip(galaxyIDManager.PopFreeID(), 666, ShipStats[ShipTypes.Penguin]); break; } case StatefulCargoTypes.Reaper: { sc = new CargoShip(galaxyIDManager.PopFreeID(), 666, ShipStats[ShipTypes.Reaper]); break; } case StatefulCargoTypes.LaserTurret: { sc = new CargoLaserTurret(galaxyIDManager.PopFreeID(), 666, new LaserWeaponStats()); break; } default: { sc = new StatefulCargo(galaxyIDManager.PopFreeID(), s.Key); break; } } CargoTransaction tr = new TransactionAddStatefulCargo(port, sc, true); cargoSynchronizer.RequestTransaction(tr); lastTransaction = tr; } } foreach (var s in _config.PortConfig.StatelessCargoCounts) { var tr = new TransactionAddStatelessCargo(port, s.Key, s.Value, true); cargoSynchronizer.RequestTransaction(tr); lastTransaction = tr; } foreach (var s in _config.PortConfig.ModuleCounts) { Module m = ModuleFactory.CreateModule(s.Key, galaxyIDManager.PopFreeID(), 1); var tr = new TransactionAddStatefulCargo(port, m, true); cargoSynchronizer.RequestTransaction(tr); lastTransaction = tr; } } if (lastTransaction != null) { await lastTransaction.ResultTask; } }