Player/PlayerController.Actor.cs
namespace Opium;

public partial class PlayerController
{
	public override WeaponPickup DropWeapon( BaseWeapon weapon )
	{
		return Inventory?.Drop( weapon );
	}

	public override bool CanShoot( BaseWeapon weapon )
	{
		var staminaAbility = GetMechanic<StaminaMechanic>();
		if ( ( staminaAbility?.Stamina ?? 100f ) < ( weapon.StaminaDrain / 2f ) ) return false;

		return true;
	}

	public override bool CanAim( BaseWeapon weapon )
	{
		var staminaAbility = GetMechanic<StaminaMechanic>();
		if ( (staminaAbility?.Stamina ?? 100f) < (weapon.StaminaDrain / 2f) ) return false;

		return true;
	}

	public override BaseWeapon ActiveWeapon => Inventory.Current;

	// TODO: move these
	private readonly float CrouchingBonus = 1.25f;
	private readonly float FlashlightBonus = 2.0f;

	public override float GetDetectionFactor( Actor actor )
	{
		var points = base.GetDetectionFactor( actor );
		if ( Crouching ) points /= CrouchingBonus;
		if ( Components.Get<FlashLight>().IsActive ) points *= FlashlightBonus;

		return points;
	}
}