/// <summary> /// receivingPlayers get mines in cargo, owningPlayers get the mines added to the receivingSystems (deployed in space) /// </summary> /// <param name="receivingPlayers"></param> /// <param name="receivingSystems"></param> /// <param name="owningPlayers"></param> void AddMines(IEnumerable <Player> receivingPlayers, IEnumerable <PSystem> receivingSystems, IEnumerable <Player> owningPlayers, CargoSynchronizer cargoSynchronizer, GalaxyManager galaxyManager, LocalIDManager galaxyIDManager, StructureManager structureManager, LocatorService locatorService) { foreach (Player p in receivingPlayers) { for (int i = 0; i < _config.CARGO_NumMines; i++) { TransactionAddStatefulCargo t = new TransactionAddStatefulCargo(p.GetActiveShip(), new StatefulCargo(galaxyIDManager.PopFreeID(), StatefulCargoTypes.DefensiveMine), true); cargoSynchronizer.RequestTransaction(t); } } if (owningPlayers.Count() < 2) { return; } var itr = new CyclicalIterator <Player>(owningPlayers); itr.MoveNext(); foreach (var system in galaxyManager.Systems) { for (int i = 0; i < _config.NumMinesPerSystem; i++) { int ownerID = itr.Current.Id; var mine = new DefensiveMine(Rand.Random.Next(-system.AreaSize / 100, system.AreaSize / 100), Rand.Random.Next(-system.AreaSize / 100, system.AreaSize / 100), galaxyIDManager.PopFreeID(), ownerID, system.Id, locatorService.PlayerLocator); structureManager.RegisterObject(mine); system.AddStructure(mine); itr.MoveNext(); } } }
/// <summary> /// For structures which originate as StatefulCargo, as they already have a GalaxyID /// </summary> /// <param name="c"></param> /// <returns></returns> public static IStructure CreateStructure(StatefulCargo c, float xPos, float yPos, Player owner, CommandCenter commandCenter, int currentAreaID, IPlayerLocator pl) { IStructure s; switch (c.CargoType) { case (StatefulCargoTypes.LaserTurret): { TurretTypes t = owner.GetArea().AreaType == AreaTypes.Planet ? TurretTypes.Planet : TurretTypes.Space; s = new Turret(c.Id, xPos, yPos, owner.Id, currentAreaID, t, pl); break; } case (StatefulCargoTypes.DefensiveMine): { s = new DefensiveMine(xPos, yPos, c.Id, owner.Id, currentAreaID, pl); break; } default: throw new Exception("CreateStructure not implemented for structure type " + c.CargoType.ToString()); } _galaxyRegistrationManager.RegisterObject(s); return(s); }
// Need to find a better place for this... public static IStructure InstantiateStructure(IStructureModel sm, IPlayerLocator pl, IGalaxyRegistrationManager gm) { IStructure s; switch (sm.StructureType) { case (StructureTypes.LaserTurret): s = new Turret((TurretModel)sm, pl); break; case (StructureTypes.Biodome): s = new Biodome((BiodomeModel)sm); break; case (StructureTypes.PowerPlant): s = new PowerPlant((PowerPlantModel)sm); break; case (StructureTypes.Silo): s = new Silo((SiloModel)sm); break; case (StructureTypes.CommandCenter): return(new CommandCenter((CommandCenterModel)sm)); case (StructureTypes.Factory): s = new Factory((FactoryModel)sm); break; case StructureTypes.Refinery: s = new Refinery((RefineryModel)sm); break; case StructureTypes.Mine: s = new MineStructure((MineModel)sm); break; case StructureTypes.DefensiveMine: s = new DefensiveMine((DefensiveMineModel)sm, pl); break; case StructureTypes.ConstructionBuilding: s = new ConstructionBuilding((ConstructionBuildingModel)sm); break; default: throw new Exception("CreateStructure not implemented for structure type " + sm.StructureType.ToString()); } gm.RegisterObject(s); return(s); }
public DefensiveMine CreateDefensiveMine( float xPos, float yPos, float health, int ID, HashSet <int> teams) { Texture2D blinkOnTex = _textureManager == null ? null : _textureManager.MineOn; Texture2D blinkOffTex = _textureManager == null ? null : _textureManager.MineOff; var structure = new DefensiveMine(_world, _spriteBatch, ID, _messageManager, teams, new Vector2(xPos, yPos), 0, blinkOffTex, blinkOnTex, _projectileManager); RegisterStructure(structure); structure.IsLocalSim = _simulateStructures; return(structure); }