Add basic radar and weapon

This commit is contained in:
2021-04-11 17:09:57 +02:00
parent 1c2fc7b86b
commit 2f7759d190
26 changed files with 465 additions and 45 deletions
+34
View File
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EvilSatellites.Objects;
using Microsoft.Xna.Framework;
namespace EvilSatellites.Weapons
{
public enum WeaponState
{
Stopped,
Starting,
Firing,
Stopping
}
public class AbstractWeapon : IWeapon
{
public IGameObject _wielder;
public float FireRate { get; set; }
public int MaxAmmo { get; set; }
public int RemainingAmmo { get; set; }
public WeaponState State { get; set; }
public double TimerStart;
public double TimerEnd;
public virtual void Shoot(GameTime time) { }
public virtual void Reload() { }
public virtual void Stop() { }
public virtual void Update(GameTime time) { }
}
}
+22
View File
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EvilSatellites.Weapons;
using Microsoft.Xna.Framework;
namespace EvilSatellites.Weapons
{
public interface IWeapon
{
void Shoot(GameTime time);
void Reload();
void Stop();
void Update(GameTime time);
float FireRate { get; set; }
int MaxAmmo { get; set; }
int RemainingAmmo { get; set; }
WeaponState State { get; set; }
}
}
+85
View File
@@ -0,0 +1,85 @@
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 IScreen Screen;
public LaserMG(IGameObject wielder, IScreen 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);
}
public override void Shoot(GameTime time)
{
State = WeaponState.Starting;
sfxSpinup.Reset();
sfxSpinup.Play();
TimerStart = time.TotalGameTime.TotalMilliseconds;
}
public override void Stop()
{
if (State == WeaponState.Firing)
{
sfxSpinning.Pause();
sfxSpindown.Reset();
sfxSpindown.Play();
State = WeaponState.Stopped;
}
}
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;
}
}
base.Update(time);
}
}
}