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); }