Example #1
0
        /// <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);
        }
Example #3
0
        // 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);
        }