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