using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using EvilSatellites.Objects; using SynthySound; using EvilSatellites.Screens; using Microsoft.Xna.Framework; namespace EvilSatellites.Weapons { public class LaserMG : AbstractWeapon { public AudioAsset sfxShoot; public ISoundEffect sfxReload; public ISoundEffect sfxSpindown; public ISoundEffect sfxSpinup; public ISoundEffect sfxSpinning; public GameScreen Screen; public LaserMG(IGameObject wielder, GameScreen screen) { _wielder = wielder; Screen = screen; MaxAmmo = 250; RemainingAmmo = MaxAmmo; FireRate = 90; State = WeaponState.Stopped; LoadSounds(); } public void LoadSounds() { sfxReload = Screen.Manager.Sound.Load(@"sfx/weapons/LaserMG/reload.wav", false); sfxSpindown = Screen.Manager.Sound.Load(@"sfx/weapons/LaserMG/spindown.wav", false); sfxSpinup = Screen.Manager.Sound.Load(@"sfx/weapons/LaserMG/spinup.wav", false); sfxSpinning = Screen.Manager.Sound.Load(@"sfx/weapons/LaserMG/spinning.wav", false); sfxSpinning.Loop = true; sfxShoot = new AudioAsset(Screen.Manager.Sound, @"sfx/weapons/LaserMG/fire", 1, 4); sfxReload.ConnectToEffect(Screen.Manager.EnvironmentEffect); sfxShoot.AddEffect(Screen.Manager.EnvironmentEffect); sfxSpindown.ConnectToEffect(Screen.Manager.EnvironmentEffect); sfxSpinup.ConnectToEffect(Screen.Manager.EnvironmentEffect); sfxSpinning.ConnectToEffect(Screen.Manager.EnvironmentEffect); } public override void Shoot(GameTime time) { if (State != WeaponState.Stopped) { return; } State = WeaponState.Starting; sfxSpinup.Reset(); sfxSpinup.Play(); TimerStart = time.TotalGameTime.TotalMilliseconds; } public override void Stop() { if (State != WeaponState.Stopped) { sfxSpinning.Pause(); sfxSpinup.Pause(); sfxSpindown.Reset(); sfxSpindown.Play(); State = WeaponState.Stopping; } } public override void Update(GameTime time) { TimerEnd += time.ElapsedGameTime.TotalMilliseconds; if (State == WeaponState.Starting) { if (TimerEnd - TimerStart > 800) { State = WeaponState.Firing; sfxSpinning.Play(); TimerStart = TimerEnd; } } if (State == WeaponState.Firing) { if (TimerEnd - TimerStart > FireRate) { sfxShoot.Play(); TimerStart = TimerEnd; Projectile proj = new Projectile(Screen, _wielder.Position, _wielder.Rotation); Screen.AddObject(proj); } } if (State == WeaponState.Stopping) { if (TimerEnd - TimerStart > 500) { State = WeaponState.Stopped; TimerStart = TimerEnd; } } base.Update(time); } } }