Weapons/FacepunchAttachments.cs

Attachment component definitions for Facepunch weapons ported into this package. Each class (USP silencer, USP red dot, M700 scope) sets bodygroup choices, icons, sounds, particles and aim/scope stats on the SWB base attachment types.

using SWB.Base;
using SWB.Base.Attachments;

namespace HorizonRP;

// Les accessoires des armes de Facepunch : leurs modèles les portent déjà, en groupes
// de corps (bodygroups). Ces composants SWB les montrent ou les cachent, comme le font
// ceux de la démo SWB pour ses armes (DemoAttachments.cs).

[Title( "Silencieux (USP)" )]
public class UspSilencer : SilencerAttachment
{
	public override string Name => "Silencieux de pistolet";
	public override string IconPath => "attachments/swb/muzzle/silencer_pistol/ui/icon.png";
	public override string BodyGroup { get; set; } = "muzzle";
	public override int BodyGroupChoice { get; set; } = 2;
	public override int BodyGroupDefault { get; set; } = 0;

	// Le modèle de Facepunch n'a pas de point « muzzle_silenced » : la flamme reste au bout du canon.
	[Property, Group( "Silencer" )] public override string EffectAttachmentOrBone { get; set; } = "muzzle";
	public override PrefabScene MuzzleFlashParticle { get; set; } = SceneUtility.GetPrefabScene( ResourceLibrary.Get<PrefabFile>( "prefabs/particles/muzzle/muzzleflash.prefab" ) );
	[Property, Group( "Silencer" )] public override SoundEvent ShootSound { get; set; } = ResourceLibrary.Get<SoundEvent>( "sounds/swb/attachments/silencer/swb_pistol.silenced.fire.sound" );
}

[Title( "Viseur point rouge (USP)" )]
public class UspRedDot : SightAttachment
{
	public override string Name => "Viseur point rouge";
	public override string IconPath => "attachments/swb/sight/reflex/ui/icon.png";
	public override string BodyGroup { get; set; } = "sights";
	public override int BodyGroupChoice { get; set; } = 2;
	public override int BodyGroupDefault { get; set; } = 0;

	[Property]
	public override AimInfo AimInfo { get; set; } = new AimInfo()
	{
		SpreadModifier = -1f,
		AimInFOVSpeed = -1f,
		AimOutFOVSpeed = -1f,
		Sensitivity = 0.6f,
		PlayerFOVZoom = 1.1f,
	};
}

[Title( "Lunette (M700)" )]
public class M700Scope : Scope2DAttachment
{
	public override string Name => "Lunette x12";
	public override string IconPath => "attachments/swb/sight/scope_hunter/ui/icon.png";
	public override string BodyGroup { get; set; } = "top_rail";
	public override int BodyGroupChoice { get; set; } = 0;
	public override int BodyGroupDefault { get; set; } = 1;

	[Property]
	public override ScopeInfo ScopeInfo { get; set; } = new()
	{
		LensTexture = "materials/swb/scopes/swb_lens_hunter.png",
		ScopeTexture = "materials/swb/scopes/swb_scope_hunter.png",
		ScopeInDelay = 0.2f,
		ScopeInSound = ResourceLibrary.Get<SoundEvent>( "sounds/swb/scope/swb_sniper.zoom_in.sound" ),
		FOV = 8f,
		Sensitivity = 0.25f,
		Spread = 0f,
	};
}