This commit is contained in:
2025-01-06 22:36:52 +03:00
parent 0629544314
commit d3b899ba93
103 changed files with 1352 additions and 452 deletions

View File

@@ -0,0 +1,80 @@
using OpenTK.Mathematics;
namespace DoomDeathmatch.Script.Model.Weapon;
public class WeaponData
{
public static WeaponData Pistol =>
new(30)
{
Id = "pistol",
Name = "Пистолет",
IdleTexture = "texture/pistol/idle.png",
FireAnimationDuration = 0.25f,
FireAnimation =
{
"texture/pistol/fire1.png", "texture/pistol/fire2.png", "texture/pistol/fire3.png", "texture/pistol/fire4.png",
},
Damage = 30,
ShootPattern = new LineShootPattern()
};
public static WeaponData Shotgun =>
new(10)
{
Id = "shotgun",
Name = "Дробовик",
IdleTexture = "texture/shotgun/idle.png",
FireAnimationDuration = 0.1f,
FireAnimation = { "texture/shotgun/fire1.png", "texture/shotgun/fire2.png" },
Damage = 5,
ShootPattern = new RandomFlatSpreadShootPattern(MathHelper.DegreesToRadians(10), 40)
};
public string Id { get; private init; } = "";
public string Name { get; private init; } = "";
public string IdleTexture { get; private init; } = "";
public float FireAnimationDuration { get; private init; } = 0;
public List<string> FireAnimation { get; private init; } = [];
public int Damage { get; private init; }
public int MaxAmmo { get; }
public IShootPattern ShootPattern { get; private init; }
public int Ammo
{
get => _ammo;
set
{
if (value < 0)
value = 0;
if (value > MaxAmmo)
value = MaxAmmo;
if (_ammo == value)
return;
_ammo = value;
OnAmmoChanged?.Invoke(this);
}
}
public event Action<WeaponData>? OnAmmoChanged;
private int _ammo;
private WeaponData(int parMaxAmmo)
{
MaxAmmo = parMaxAmmo;
Ammo = MaxAmmo;
}
public override bool Equals(object? parObj)
{
return parObj is WeaponData weaponModel && Id == weaponModel.Id;
}
public override int GetHashCode()
{
return HashCode.Combine(Id);
}
}