protected virtual void CreateProjectiles(Vector2 direction, GameplayObject target, bool playSound) { if (target != null && (target is ShipModule) && (target as ShipModule).GetParent().Role == "fighter" && this.AltFireMode && this.AltFireTriggerFighter && this.SecondaryFire != null) { Weapon AltFire = ResourceManager.GetWeapon(this.SecondaryFire); Projectile projectile; if (this.owner.Projectiles.pendingRemovals.TryPop(out projectile)) { projectile.ProjectileRecreate(this.owner, direction, this.moduleAttachedTo); projectile.range = AltFire.Range; projectile.weapon = this; projectile.explodes = AltFire.explodes; projectile.damageAmount = AltFire.DamageAmount; projectile.damageRadius = AltFire.DamageRadius; projectile.explosionradiusmod = AltFire.ExplosionRadiusVisual; projectile.Health = AltFire.HitPoints; projectile.speed = AltFire.ProjectileSpeed; projectile.WeaponEffectType = AltFire.WeaponEffectType; projectile.WeaponType = AltFire.WeaponType; projectile.RotationRadsPerSecond = AltFire.RotationRadsPerSecond; projectile.ArmorPiercing = (byte)AltFire.ArmourPen; } else projectile = new Projectile(this.owner, direction, this.moduleAttachedTo) { range = AltFire.Range, weapon = this, explodes = AltFire.explodes, damageAmount = AltFire.DamageAmount, damageRadius = AltFire.DamageRadius, explosionradiusmod = AltFire.ExplosionRadiusVisual, Health = AltFire.HitPoints, speed = AltFire.ProjectileSpeed, WeaponEffectType = AltFire.WeaponEffectType, WeaponType = AltFire.WeaponType, RotationRadsPerSecond = AltFire.RotationRadsPerSecond, ArmorPiercing = (byte)AltFire.ArmourPen, }; //damage increase by level if (this.owner.Level > 0) { projectile.damageAmount += projectile.damageAmount * (float)this.owner.Level * 0.05f; } if (AltFire.RangeVariance) { projectile.range *= RandomMath.RandomBetween(0.9f, 1.1f); } //Hull bonus damage increase if (GlobalStats.ActiveModInfo != null && GlobalStats.ActiveModInfo.useHullBonuses) { HullBonus mod; if (ResourceManager.HullBonuses.TryGetValue(this.owner.shipData.Hull, out mod)) projectile.damageAmount += projectile.damageAmount * mod.DamageBonus; } projectile.LoadContent(AltFire.ProjectileTexturePath, AltFire.ModelPath); AltFire.ModifyProjectile(projectile); if (AltFire.Tag_Guided) projectile.InitializeMissile(projectile.speed, direction, target); else projectile.Initialize(projectile.speed, direction, this.moduleAttachedTo.Center); projectile.Radius = this.ProjectileRadius; if (AltFire.Animated == 1) { string remainder = 0.ToString("00000.##"); projectile.texturePath = string.Concat(AltFire.AnimationPath, remainder); } //if(HelperFunctions.GetRandomIndex((int)(Ship.universeScreen.Lag *100)) <2) if (Weapon.universeScreen.viewState == UniverseScreen.UnivScreenState.ShipView && this.owner.InFrustum && playSound) { projectile.DieSound = true; if (!string.IsNullOrEmpty(this.ToggleSoundName) && (this.ToggleCue == null || this.ToggleCue != null && !this.ToggleCue.IsPlaying)) { this.ToggleSoundOn = true; this.ToggleCue = AudioManager.GetCue(AltFire.ToggleSoundName); this.ToggleCue.Apply3D(Weapon.audioListener, this.owner.emitter); this.ToggleCue.Play(); if (AltFire.fireCue != null) { //Added by McShooterz: Use sounds from new sound dictionary SoundEffect soundeffect = null; if (ResourceManager.SoundEffectDict.TryGetValue(AltFire.fireCueName,out soundeffect)) { AudioManager.PlaySoundEffect(soundeffect, Weapon.audioListener, this.owner.emitter, 0.5f); } else { this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.owner.emitter); } this.lastFireSound = 0f; if (this.fireCue != null) { this.fireCue.Play(); } } } } if (!string.IsNullOrEmpty(ResourceManager.WeaponsDict[AltFire.UID].dieCue)) { projectile.dieCueName = ResourceManager.WeaponsDict[AltFire.UID].dieCue; } if (!string.IsNullOrEmpty(this.InFlightCue)) { projectile.InFlightCue = AltFire.InFlightCue; } if (this.ToggleCue == null && this.owner.ProjectilesFired.Count < 30) { this.lastFireSound = 0f; this.owner.ProjectilesFired.Add(new ProjectileTracker()); //Added by McShooterz: Use sounds from new sound dictionary if (ResourceManager.SoundEffectDict.ContainsKey(AltFire.fireCueName)) { AudioManager.PlaySoundEffect(ResourceManager.SoundEffectDict[fireCueName], Weapon.audioListener, this.owner.emitter, 0.5f); } else { this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.owner.emitter); } if (this.fireCue != null) { this.fireCue.Play(); } } } } projectile.isSecondary = true; this.owner.Projectiles.Add(projectile); projectile = null; } else { Projectile projectile; if (this.owner.Projectiles.pendingRemovals.TryPop(out projectile)) { projectile.ProjectileRecreate(this.owner, direction, this.moduleAttachedTo); projectile.range = this.Range; projectile.weapon = this; projectile.explodes = this.explodes; projectile.damageAmount = this.DamageAmount; projectile.damageRadius = this.DamageRadius; projectile.explosionradiusmod = this.ExplosionRadiusVisual; projectile.Health = this.HitPoints; projectile.speed = this.ProjectileSpeed; projectile.WeaponEffectType = this.WeaponEffectType; projectile.WeaponType = this.WeaponType; projectile.RotationRadsPerSecond = this.RotationRadsPerSecond; projectile.ArmorPiercing = (byte)this.ArmourPen; } projectile = new Projectile(this.owner, direction, this.moduleAttachedTo) { range = this.Range, weapon = this, explodes = this.explodes, damageAmount = this.DamageAmount, damageRadius = this.DamageRadius, explosionradiusmod = this.ExplosionRadiusVisual, Health = this.HitPoints, speed = this.ProjectileSpeed, WeaponEffectType = this.WeaponEffectType, WeaponType = this.WeaponType, RotationRadsPerSecond = this.RotationRadsPerSecond, ArmorPiercing = (byte)this.ArmourPen, }; //damage increase by level if (this.owner.Level > 0) { projectile.damageAmount += projectile.damageAmount * (float)this.owner.Level * 0.05f; } if (this.RangeVariance) { projectile.range *= RandomMath.RandomBetween(0.9f, 1.1f); } //Hull bonus damage increase if (GlobalStats.ActiveModInfo != null && GlobalStats.ActiveModInfo.useHullBonuses) { HullBonus mod; if (ResourceManager.HullBonuses.TryGetValue(this.owner.shipData.Hull, out mod)) projectile.damageAmount += projectile.damageAmount * mod.DamageBonus; } projectile.LoadContent(this.ProjectileTexturePath, this.ModelPath); this.ModifyProjectile(projectile); if (this.Tag_Guided) projectile.InitializeMissile(projectile.speed, direction, target); else projectile.Initialize(projectile.speed, direction, this.moduleAttachedTo.Center); projectile.Radius = this.ProjectileRadius; if (this.Animated == 1) { string remainder = 0.ToString("00000.##"); projectile.texturePath = string.Concat(this.AnimationPath, remainder); } if (Weapon.universeScreen.viewState == UniverseScreen.UnivScreenState.ShipView && this.owner.InFrustum && playSound) { projectile.DieSound = true; if (!string.IsNullOrEmpty(this.ToggleSoundName) && (this.ToggleCue == null || this.ToggleCue != null && !this.ToggleCue.IsPlaying)) { this.ToggleSoundOn = true; this.ToggleCue = AudioManager.GetCue(this.ToggleSoundName); this.ToggleCue.Apply3D(Weapon.audioListener, this.owner.emitter); this.ToggleCue.Play(); if (this.fireCue != null) { //Added by McShooterz: Use sounds from new sound dictionary if (ResourceManager.SoundEffectDict.ContainsKey(this.fireCueName)) { AudioManager.PlaySoundEffect(ResourceManager.SoundEffectDict[fireCueName], Weapon.audioListener, this.owner.emitter, 0.5f); } else { this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.owner.emitter); } this.lastFireSound = 0f; if (this.fireCue != null) { this.fireCue.Play(); } } } } if (!string.IsNullOrEmpty(ResourceManager.WeaponsDict[this.UID].dieCue)) { projectile.dieCueName = ResourceManager.WeaponsDict[this.UID].dieCue; } if (!string.IsNullOrEmpty(this.InFlightCue)) { projectile.InFlightCue = this.InFlightCue; } if (this.ToggleCue == null && this.owner.ProjectilesFired.Count < 30) { this.lastFireSound = 0f; this.owner.ProjectilesFired.Add(new ProjectileTracker()); //Added by McShooterz: Use sounds from new sound dictionary if (ResourceManager.SoundEffectDict.ContainsKey(this.fireCueName)) { AudioManager.PlaySoundEffect(ResourceManager.SoundEffectDict[fireCueName], Weapon.audioListener, this.owner.emitter, 0.5f); } else { this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.owner.emitter); } if (this.fireCue != null) { this.fireCue.Play(); } } } } this.owner.Projectiles.Add(projectile); projectile = null; } }
public Projectile LoadProjectiles(Vector2 direction, Ship owner) { Projectile projectile = new Projectile(owner, direction) { range = this.Range, weapon = this, explodes = this.explodes, damageAmount = this.DamageAmount }; projectile.explodes = this.explodes; projectile.damageRadius = this.DamageRadius; projectile.explosionradiusmod = this.ExplosionRadiusVisual; projectile.speed = this.ProjectileSpeed; projectile.WeaponEffectType = this.WeaponEffectType; projectile.WeaponType = this.WeaponType; projectile.Initialize(this.ProjectileSpeed, direction, owner.Center); projectile.Radius = this.ProjectileRadius; projectile.LoadContent(this.ProjectileTexturePath, this.ModelPath); if (owner.GetSystem() != null && owner.GetSystem().isVisible || owner.isInDeepSpace) { int numberSameWeapons = 0; //this.toggleTimer = 0f; foreach (Weapon w in owner.Weapons) { if (w == this || !(w.Name == this.Name) || w.timeToNextFire > 0f) { continue; } numberSameWeapons++; } projectile.DieSound = true; if (!string.IsNullOrEmpty(ResourceManager.WeaponsDict[this.UID].dieCue)) { projectile.dieCueName = ResourceManager.WeaponsDict[this.UID].dieCue; } if (!string.IsNullOrEmpty(this.InFlightCue)) { projectile.InFlightCue = this.InFlightCue; } } return projectile; }
protected virtual void CreateDrone(Vector2 direction) { Projectile projectile = new Projectile(this.owner, direction, this.moduleAttachedTo) { range = this.Range, weapon = this, explodes = this.explodes, damageAmount = this.DamageAmount }; projectile.explodes = this.explodes; projectile.damageRadius = this.DamageRadius; projectile.explosionradiusmod = this.ExplosionRadiusVisual; projectile.speed = this.ProjectileSpeed; projectile.Health = this.HitPoints; projectile.WeaponEffectType = this.WeaponEffectType; projectile.WeaponType = this.WeaponType; projectile.LoadContent(this.ProjectileTexturePath, this.ModelPath); projectile.RotationRadsPerSecond = this.RotationRadsPerSecond; this.ModifyProjectile(projectile); projectile.InitializeDrone(projectile.speed, direction); projectile.Radius = this.ProjectileRadius; this.owner.Projectiles.Add(projectile); if (this.owner.InFrustum) { projectile.DieSound = true; if (!string.IsNullOrEmpty(this.ToggleSoundName) && !this.ToggleSoundOn) { this.ToggleSoundOn = true; this.ToggleCue = AudioManager.GetCue(this.ToggleSoundName); this.ToggleCue.Apply3D(Weapon.audioListener, this.owner.emitter); this.ToggleCue.Play(); this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.owner.emitter); } this.lastFireSound = 0f; if (this.fireCue != null) { this.fireCue.Play(); } } if (!string.IsNullOrEmpty(ResourceManager.WeaponsDict[this.UID].dieCue)) { projectile.dieCueName = ResourceManager.WeaponsDict[this.UID].dieCue; } if (!string.IsNullOrEmpty(this.InFlightCue)) { projectile.InFlightCue = this.InFlightCue; } if (this.ToggleCue == null) { this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.owner.emitter); } this.lastFireSound = 0f; if (this.fireCue != null) { this.fireCue.Play(); } } } }
protected virtual void CreateProjectilesFromPlanet(Vector2 direction, Planet p, GameplayObject target) { Projectile projectile = new Projectile(p, direction) { range = this.Range, weapon = this, explodes = this.explodes, damageAmount = this.DamageAmount }; if (this.RangeVariance) { projectile.range *= RandomMath.RandomBetween(0.9f, 1.1f); } projectile.explodes = this.explodes; projectile.damageRadius = this.DamageRadius; projectile.explosionradiusmod = this.ExplosionRadiusVisual; projectile.Health = this.HitPoints; projectile.speed = this.ProjectileSpeed; projectile.WeaponEffectType = this.WeaponEffectType; projectile.WeaponType = this.WeaponType; projectile.LoadContent(this.ProjectileTexturePath, this.ModelPath); projectile.RotationRadsPerSecond = this.RotationRadsPerSecond; projectile.ArmorPiercing = (byte)this.ArmourPen; /* if (this.ShieldPenChance > 0) { projectile.IgnoresShields = RandomMath.RandomBetween(0, 100) <= this.ShieldPenChance; } */ this.ModifyProjectile(projectile); if(this.Tag_Guided) projectile.InitializeMissilePlanet(projectile.speed, direction, target, p); else projectile.InitializePlanet(projectile.speed, direction, p.Position); projectile.Radius = this.ProjectileRadius; if (this.Animated == 1) { string remainder = 0.ToString("00000.##"); projectile.texturePath = string.Concat(this.AnimationPath, remainder); } p.Projectiles.Add(projectile); this.planetEmitter = new AudioEmitter() { Position = new Vector3(p.Position, 2500f) }; if (Weapon.universeScreen.viewState <= UniverseScreen.UnivScreenState.SystemView) { projectile.DieSound = true; if (!string.IsNullOrEmpty(this.ToggleSoundName) && !this.ToggleSoundOn) { this.ToggleSoundOn = true; this.ToggleCue = AudioManager.GetCue(this.ToggleSoundName); this.ToggleCue.Apply3D(Weapon.audioListener, this.planetEmitter); this.ToggleCue.Play(); this.lastFireSound = 0f; //Added by McShooterz: Use sounds from new sound dictionary if (ResourceManager.SoundEffectDict.ContainsKey(this.fireCueName)) { AudioManager.PlaySoundEffect(ResourceManager.SoundEffectDict[fireCueName], Weapon.audioListener, this.planetEmitter, 0.5f); } else { this.fireCue = AudioManager.GetCue(this.fireCueName); if (!this.owner.isPlayerShip()) { this.fireCue.Apply3D(Weapon.audioListener, this.planetEmitter); } if (this.fireCue != null) { this.fireCue.Play(); } } } if (!string.IsNullOrEmpty(ResourceManager.WeaponsDict[this.UID].dieCue)) { projectile.dieCueName = ResourceManager.WeaponsDict[this.UID].dieCue; } if (!string.IsNullOrEmpty(this.InFlightCue)) { projectile.InFlightCue = this.InFlightCue; } try { if (this.ToggleCue == null) { this.planetEmitter.Position = new Vector3(p.Position, -2500f); this.lastFireSound = 0f; //Added by McShooterz: Use sounds from new sound dictionary if (ResourceManager.SoundEffectDict.ContainsKey(this.fireCueName)) { AudioManager.PlaySoundEffect(ResourceManager.SoundEffectDict[fireCueName], Weapon.audioListener, this.planetEmitter, 0.5f); } else { this.fireCue = AudioManager.GetCue(this.fireCueName); this.fireCue.Apply3D(Weapon.audioListener, this.planetEmitter); if (this.fireCue != null) { this.fireCue.Play(); } } } } catch { } } }