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; } }