swb_base/Weapon.Scoping.cs

Weapon partial class scoping logic. Handles starting and ending scope: sets lens center, delays scope-in using GameTask.DelaySeconds, toggles IsScoping and viewmodel drawing, and plays configured sounds.

File Access
namespace SWB.Base;

public partial class Weapon
{
	public async virtual void OnScopeStart()
	{
		SetScopeLensCenter( DefaultScopeLensCenter );

		await GameTask.DelaySeconds( ScopeInfo.ScopeInDelay );
		if ( !this.IsValid() || !IsAiming || IsScoping || IsReloading ) return;

		IsScoping = true;
		ViewModelHandler.ShouldDraw = false;

		if ( ScopeInfo.ScopeInSound is not null )
			PlaySound( ScopeInfo.ScopeInSound );
	}

	public virtual void OnScopeEnd()
	{
		SetScopeLensCenter( DefaultScopeLensCenter );

		if ( !IsScoping ) return;

		IsScoping = false;
		ViewModelHandler.ShouldDraw = true;

		if ( ScopeInfo.ScopeOutSound is not null )
			PlaySound( ScopeInfo.ScopeOutSound );
	}
}