move to github

This commit is contained in:
Magnus von Wachenfeldt
2015-12-04 10:23:49 +01:00
commit 2a9d8ce416
252 changed files with 45041 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
namespace SpacePew.Models.Weapons
{
public class Cannon : WeaponBase
{
public override float HeatGeneration
{
get { return 0.4f; }
}
public override int Delay
{
get { return 35; }
}
public override int Spread
{
get { return 0; }
}
}
}

View File

@@ -0,0 +1,20 @@
namespace SpacePew.Models.Weapons
{
public class ClusterLauncher : WeaponBase
{
public override float HeatGeneration
{
get { return 100f; }
}
public override int Delay
{
get { return 0; }
}
public override int Spread
{
get { return 0; }
}
}
}

View File

@@ -0,0 +1,13 @@
using SpacePew.Models.Projectiles;
namespace SpacePew.Models.Weapons
{
public interface IWeapon
{
int Delay { get; }
int Spread { get; }
float Heat { get; set; }
float HeatGeneration { get; }
void Fire(IProjectile projectile, Player player);
}
}

View File

@@ -0,0 +1,20 @@
namespace SpacePew.Models.Weapons
{
public class Launcher : WeaponBase
{
public override float HeatGeneration
{
get { return 100f; }
}
public override int Delay
{
get { return 200; }
}
public override int Spread
{
get { return 0; }
}
}
}

View File

@@ -0,0 +1,24 @@
namespace SpacePew.Models.Weapons
{
/// <summary>
/// A slower version of the cannon, should be used for powerful projectiles like the homing bullets to even things out
/// </summary>
public class SecondaryCannon : Cannon
{
public override float HeatGeneration
{
get
{
return 1f;
}
}
public override int Delay
{
get
{
return 80;
}
}
}
}

View File

@@ -0,0 +1,64 @@
using System;
using Microsoft.Xna.Framework;
using SpacePew.Models.Projectiles;
namespace SpacePew.Models.Weapons
{
public class TriCannon : WeaponBase
{
public override float HeatGeneration
{
get { return 0.8f; }
}
public override int Delay
{
get { return 40; }
}
public override int Spread
{
get { return 3; }
}
public override void Fire(IProjectile projectile, Player player)
{
if (Heat + this.HeatGeneration > MaxHeat)
return;
Heat += 1f * this.HeatGeneration;
if (_lastShot <= DateTime.Now.AddMilliseconds(-this.Delay - (Heat >= HeatStartAffectAt ? Heat : 0)))
{
float angle = player.Angle + (float)(Randomizer.Next(-Spread * 100, Spread * 100) / 9000.0);
InternalFire(projectile, player, angle - 0.15f);
InternalFire(projectile, player, angle);
InternalFire(projectile, player, angle + 0.15f);
_lastShot = DateTime.Now;
}
}
private static void InternalFire(IProjectile projectile, IEntity player, float angle)
{
var entity = EntityFactory.Instance.CreateEntity<ProjectileBase>(
projectile.GetType(),
player.Owner,
player.Position,
new Vector2(),
angle);
Matrix m = Matrix.CreateRotationZ(angle);
Vector2 velocity = Vector2.Transform(-Vector2.UnitY, m);
entity.Position += velocity * (player.Origin.Y + entity.Origin.Y);
entity.Velocity = velocity * projectile.Speed;
entity.Velocity = player.Velocity + entity.Velocity;
FiredShots.Enqueue(entity);
}
}
}

View File

@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using SpacePew.Models.Projectiles;
namespace SpacePew.Models.Weapons
{
public abstract class WeaponBase : IWeapon
{
protected const int MaxHeat = 100;
protected const int HeatStartAffectAt = MaxHeat / 2;
static WeaponBase()
{
FiredShots = new Queue<IProjectile>();
}
public static Queue<IProjectile> FiredShots;
protected DateTime _lastShot;
private static Random _randomizer;
public static Random Randomizer
{
get { return _randomizer ?? (_randomizer = new Random()); }
}
private float _heat;
protected WeaponBase()
{
_lastShot = DateTime.Now;
}
public virtual float Heat
{
get { return _heat; }
set { _heat = value; }
}
#region IWeapon Members
public abstract float HeatGeneration { get; }
public abstract int Delay { get; }
public abstract int Spread { get; }
public virtual void Fire(IProjectile projectile, Player player)
{
if (_heat + this.HeatGeneration > MaxHeat)
return;
_heat += 1f * this.HeatGeneration;
if (_lastShot <= DateTime.Now.AddMilliseconds(-this.Delay - (_heat >= HeatStartAffectAt ? _heat : 0)))
{
float angle = player.Angle + (float)(Randomizer.Next(-Spread * 100, Spread * 100) / 9000.0);
var entity = EntityFactory.Instance.CreateEntity<ProjectileBase>(
projectile.GetType(),
player.Owner,
player.Position,
new Vector2(),
angle);
Matrix m = Matrix.CreateRotationZ(angle);
Vector2 velocity = Vector2.Transform(-Vector2.UnitY, m);
entity.Position += velocity * (player.Origin.Y + entity.Origin.Y);
entity.Velocity = velocity * projectile.Speed;
entity.Velocity = player.Velocity + entity.Velocity;
FiredShots.Enqueue(entity);
_lastShot = DateTime.Now;
}
}
#endregion
}
}