using System.Collections.Generic;
public FireDirection(double x, double y)
BulletType type = BulletType.Right;
const BulletType maxTypeValue = BulletType.Cross;
FireDirection fireDirection = new FireDirection(1.5, 1.5);
Dictionary<BulletType, FireDirection> bulletTypes = new Dictionary<BulletType, FireDirection>();
Dictionary<FireModifier, bool> fireModifiers = new Dictionary<FireModifier, bool>();
Weapon weapon = Weapon.Rifle;
bulletTypes.Add(BulletType.Right, new FireDirection(1.5, 1.5));
bulletTypes.Add(BulletType.Left, new FireDirection(-1.5, -1.5));
bulletTypes.Add(BulletType.UpDown, new FireDirection(0.5, 0.5));
bulletTypes.Add(BulletType.Cross, new FireDirection(-0.5, -0.5));
foreach (FireModifier mod in Enum.GetValues(typeof(FireModifier)))
fireModifiers.Add(mod, false);
public void ToggleModifier(int i)
var mod = (FireModifier)(i % 4);
fireModifiers[mod] = !fireModifiers[mod];
foreach (var mod in fireModifiers.Keys)
ret += $"{mod.ToString()} ";
public void SwitchDirection()
if (type++ == maxTypeValue)
fireDirection = bulletTypes[type];
public void ChangeWeapon(Weapon weapon)
public override string ToString()
return $"{type.ToString()} {GetModifiers()}{weapon.ToString()}";
public static void Main()
for (var i = 0; i < 10; i++) {
Console.Write(obj.ToString() + " -> ");
obj.ChangeWeapon((Weapon)w);
Console.WriteLine(obj.ToString());