swb_base/WeaponRegistry.cs
using System.Collections.Generic;

namespace SWB.Base;

/*
 * Attach this component somewhere in the root of your scene.
 * Register all weapons that you want to use in here
 */
[Group( "SWB" )]
[Title( "Weapon Registry" )]
public class WeaponRegistry : Component
{
	[Property] public List<PrefabScene> WeaponPrefabs { get; set; } = new();
	public Dictionary<string, Weapon> Weapons { get; set; } = new();

	static public WeaponRegistry Instance
	{
		get
		{
			return Game.ActiveScene.Components.GetInChildren<WeaponRegistry>();
		}
	}

    protected override void OnAwake()
    {
        WeaponPrefabs.ForEach(weaponPrefab =>
        {
            var weaponGO = weaponPrefab.Clone(new CloneConfig { StartEnabled = false });
            weaponGO.SetParent(GameObject);
            weaponGO.BreakFromPrefab();

            // 🔍 POISTA PHYSICS VAIN VIEWMODEL-ASEISTA eli pelaajan
            if (GameObject.Tags.Has("viewmodel_root"))
            {
                foreach (var physics in weaponGO.Components.GetAll<ModelPhysics>())
                    physics.Destroy();

                foreach (var collider in weaponGO.Components.GetAll<Collider>())
                    collider.Destroy();

                weaponGO.Tags.Add("viewmodel");
            }

            var weapon = weaponGO.Components.Get<Weapon>(true);
            Weapons.TryAdd(weapon.ClassName, weapon);
            weaponGO.Name = weapon.ClassName;
        });
    }





    public Weapon Get( string className )
	{
		if ( className is null ) return null;

		Weapons.TryGetValue( className, out var weapon );
		return weapon;
	}
}