using SWB.Shared;
namespace SWB.Base;
public enum FiringType
{
/// Single fire
semi,
/// Automatic fire
auto,
/// 3-Burst fire
burst
}
public enum InfiniteAmmoType
{
/// No infinite ammo
disabled = 0,
/// Infinite clip ammo, no need to reload
clip = 1,
/// Infinite reserve ammo, can always reload
reserve = 2
}
[Group( "SWB" )]
[Title( "ShootInfo" )]
public class ShootInfo : Component
{
/// Type of ammo
[Property, Group( "Ammo" )] public string AmmoType { get; set; } = "pistol";
/// Amount of ammo in the clip
[Property, Group( "Ammo" ), Sync] public int Ammo { get; set; } = 10;
/// Size of the clip
[Property, Group( "Ammo" )] public int ClipSize { get; set; } = 10;
/// If the weapon should have infinite ammo
[Property, Group( "Ammo" )] public InfiniteAmmoType InfiniteAmmo { get; set; } = InfiniteAmmoType.disabled;
// Shooting //
/// Amount of bullets per shot
[Property, Group( "Bullets" )] public int Bullets { get; set; } = 1;
/// Bullet size
[Property, Group( "Bullets" )] public float BulletSize { get; set; } = 0.1f;
/// Bullet type (Hitscan/Physical)
public IBulletBase BulletType { get; set; } = new HitScanBullet();
/// Chance the BulletTracerParticle is created (0-1)
[Property, Group( "Bullets" )] public float BulletTracerChance { get; set; } = 0.33f;
/// Damage per bullet
[Property, Group( "Bullets" )] public float Damage { get; set; } = 5;
/// Bullet impact force
[Property, Group( "Bullets" )] public float Force { get; set; } = 0.1f;
/// Bullet hit flinch
[Property, Group( "Bullets" )] public float HitFlinch { get; set; } = 1.25f;
/// Weapon spread
[Property, Group( "Bullets" )] public float Spread { get; set; } = 0.1f;
/// Weapon recoil
[Property, Group( "Bullets" )] public float Recoil { get; set; } = 0.1f;
/// Rate Per Minute, firing speed (higher is faster)
[Property, Group( "Bullets" )] public int RPM { get; set; } = 200;
/// Screenshake per shot
[Property, Group( "Bullets" )] public ScreenShake ScreenShake { get; set; }
/// Weapon firing type
[Property, Group( "Bullets" )] public FiringType FiringType { get; set; } = FiringType.semi;
// Animations //
/// Animation used for shooting
[Property, Group( "Animations" )] public string ShootAnim { get; set; } = "fire";
/// Animation used for shooting the last bullet
[Property, Group( "Animations" )] public string ShootEmptyAnim { get; set; } = "";
/// Animation used for shooting while aiming
[Property, Group( "Animations" )] public string ShootAimedAnim { get; set; }
// Sounds //
/// Firing sound when clip is empty
[Property, Group( "Sounds" )] public SoundEvent DryShootSound { get; set; }
/// Firing sound
[Property, Group( "Sounds" )] public SoundEvent ShootSound { get; set; }
// Particles //
/// View Model particle scale
[Property, Title( "View Model Scale" ), Group( "Particles" )] public float VMParticleScale { get; set; } = 1f;
/// World Model particle scale
[Property, Title( "World Model Scale" ), Group( "Particles" )] public float WMParticleScale { get; set; } = 1f;
/// Particle used for bullet ejection
[Property, Group( "Particles" )] public ParticleSystem BulletEjectParticle { get; set; }
/// Particle used for the muzzle flash
[Property, Group( "Particles" )] public ParticleSystem MuzzleFlashParticle { get; set; }
/// Particle used for the barrel smoke
[Property, Group( "Particles" )] public ParticleSystem BarrelSmokeParticle { get; set; }
/// Particle used for the barrel smoke
[Property, Group( "Particles" )] public ParticleSystem BulletTracerParticle { get; set; }
}