Example #1
0
        public DefensiveMine(World w, SpriteBatch spriteBatch, int ID, MessageService_ToServer messageService, HashSet <int> teamIDs, Vector2 position, float rotation, Texture2D blinkOffTex, Texture2D blinkOnTex, ProjectileManager pm)
            : base(spriteBatch, blinkOffTex, position.X, position.Y, StructureTypes.DefensiveMine, 100, ID, teamIDs)
        {
            _blinkOnTex  = blinkOnTex;
            _blinkOffTex = blinkOffTex;

            TerminationEffect = ParticleEffectType.ExplosionEffect;
            _messageService   = messageService;

            CreateBodies(w, position, rotation);

            Weapon = new MineWeapon(pm, this, 0);

            Teams  = teamIDs;
            _world = w;



            //Randomly stagger blinking
            _blinkOffset = r.Next(0, (int)_blinkOffDuration) + TimeKeeper.MsSinceInitialization;
        }
        private CombatShip CreateShip(ShipSpec spec, int team, Color teamColour, int sectorId)
        {
            var t        = team - 1;
            var faction  = _game.Faction[t];
            var research = _game.TechTree[t].ResearchedUpgrades;
            var settings = _game.GameSettings;
            var alliance = (t < 0) ? -1 : settings.TeamAlliance[t];

            var ship = new CombatShip(_game, StrategyGame.IconPicDir + spec.Image, spec.Width, spec.Height, teamColour, team, alliance
                                      , spec.Health * research[EGlobalUpgrade.ShipHull] * settings.ShipHealthMultiplier[spec.Type] * faction.Bonuses.Health, spec.NumPilots, spec.Type, sectorId);

            ship.ScanRange = spec.ScanRange * research[EGlobalUpgrade.ScanRange] * faction.Bonuses.ScanRange;
            ship.Signature = spec.Signature * research[EGlobalUpgrade.ShipSignature] * settings.ShipSignatureMultiplier[spec.Type] * faction.Bonuses.Signature;
            ship.Speed     = spec.Speed * research[EGlobalUpgrade.ShipSpeed] * settings.ShipSpeedMultiplier[spec.Type] * faction.Bonuses.Speed * settings.GameSpeed;

            if (spec.Weapons != null)
            {
                foreach (var w in spec.Weapons)
                {
                    var nl = w as NanLaserWeapon;
                    if (nl != null)
                    {
                        var clone = new NanLaserWeapon(_game, nl.LaserPen.Width
                                                       , nl.ShootingTicks
                                                       , (int)(nl.ShootingDelayTicks / (settings.NanWeaponFireRateMultiplier * research[EGlobalUpgrade.WeaponFireRate] * faction.Bonuses.FireRate))
                                                       , nl.WeaponRange * settings.NanWeaponRangeMultiplier
                                                       , nl.WeaponDamage * settings.NanWeaponHealingMultiplier * research[EGlobalUpgrade.RepairHealing]
                                                       , ship, nl.FireOffset);
                        ship.Weapons.Add(clone);
                        continue;
                    }

                    var cl = w as ShieldChargeWeapon;
                    if (cl != null)
                    {
                        var clone = new ShieldChargeWeapon(_game, cl.LaserPen.Width
                                                           , cl.ShootingTicks
                                                           , (int)(cl.ShootingDelayTicks / (settings.NanWeaponFireRateMultiplier * research[EGlobalUpgrade.WeaponFireRate] * faction.Bonuses.FireRate))
                                                           , cl.WeaponRange * settings.NanWeaponRangeMultiplier
                                                           , cl.WeaponDamage * settings.NanWeaponHealingMultiplier * research[EGlobalUpgrade.RepairHealing]
                                                           , ship, cl.FireOffset);
                        ship.Weapons.Add(clone);
                        continue;
                    }

                    var sl = w as ShipLaserWeapon;
                    if (sl != null)
                    {
                        var c = sl.LaserPen.Color;
                        if (c.Name == "0")
                        {
                            c = teamColour;
                        }
                        var clone = new ShipLaserWeapon(_game, c, sl.LaserPen.Width
                                                        , sl.ShootingTicks
                                                        , (int)(sl.ShootingDelayTicks / (settings.AntiShipWeaponFireRateMultiplier * research[EGlobalUpgrade.WeaponFireRate] * faction.Bonuses.FireRate))
                                                        , sl.WeaponRange * settings.AntiShipWeaponRangeMultiplier
                                                        , sl.WeaponDamage * settings.AntiShipWeaponDamageMultiplier * research[EGlobalUpgrade.WeaponDamage]
                                                        , ship, sl.FireOffset);
                        ship.Weapons.Add(clone);
                        continue;
                    }

                    var mw = w as MineWeapon;
                    if (mw != null)
                    {
                        var c = mw.Colour;
                        if (c.Name == "0")
                        {
                            c = teamColour;
                        }
                        var clone = new MineWeapon(_game, mw.Width, (int)mw.Duration
                                                   , (int)(mw.ShootingDelayTicks / (settings.AntiShipWeaponFireRateMultiplier * research[EGlobalUpgrade.WeaponFireRate] * faction.Bonuses.FireRate))
                                                   , mw.WeaponRange * settings.AntiShipWeaponRangeMultiplier
                                                   , mw.WeaponDamage * settings.AntiShipWeaponDamageMultiplier * research[EGlobalUpgrade.WeaponDamage]
                                                   , ship, mw.FireOffset, c);
                        ship.Weapons.Add(clone);
                        continue;
                    }

                    var ml = w as ShipMissileWeapon;
                    if (ml != null)
                    {
                        var clone = new ShipMissileWeapon(_game, ml.Width
                                                          , ml.Speed * settings.MissileWeaponSpeedMultiplier * research[EGlobalUpgrade.MissileSpeed] * faction.Bonuses.MissileSpeed
                                                          , ml.Tracking * settings.MissileWeaponTrackingMultiplier * research[EGlobalUpgrade.MissileTracking] * faction.Bonuses.MissileTracking
                                                          , ml.ShootingTicks
                                                          , (int)(ml.ShootingDelayTicks / (settings.MissileWeaponFireRateMultiplier * research[EGlobalUpgrade.WeaponFireRate] * faction.Bonuses.FireRate))
                                                          , ml.WeaponRange * settings.MissileWeaponRangeMultiplier
                                                          , ml.WeaponDamage * settings.MissileWeaponDamageMultiplier * research[EGlobalUpgrade.WeaponDamage]
                                                          , ship, Point.Empty, new SolidBrush(teamColour));
                        ship.Weapons.Add(clone);
                        continue;
                    }

                    var bl = w as BaseLaserWeapon;
                    if (bl != null)
                    {
                        var c = bl.LaserPen.Color;
                        if (c.Name == "0")
                        {
                            c = teamColour;
                        }
                        var clone = new BaseLaserWeapon(_game, c, bl.LaserPen.Width
                                                        , bl.ShootingTicks
                                                        , (int)(bl.ShootingDelayTicks / (settings.AntiBaseWeaponFireRateMultiplier * research[EGlobalUpgrade.WeaponFireRate] * faction.Bonuses.FireRate))
                                                        , bl.WeaponRange * settings.AntiBaseWeaponRangeMultiplier
                                                        , bl.WeaponDamage * settings.AntiBaseWeaponDamageMultiplier * research[EGlobalUpgrade.WeaponDamage]
                                                        , ship, bl.FireOffset);
                        ship.Weapons.Add(clone);
                        continue;
                    }
                }
            }

            return(ship);
        }