Helper/PlayerDresser.cs
namespace Seekers;
[Icon( "wardrobe" )]
public class PlayerDresser : Component, Component.INetworkSpawn
{
[Property] private SkinnedModelRenderer ModelRenderer { get; set; }
[Property] private Model ReplacementModel { get; set; }
public void OnNetworkSpawn( Connection owner )
{
var clothing = owner.GetUserData( "avatar" );
var container = new ClothingContainer();
container.Deserialize( clothing );
container.Height = 1;
container.Apply( ModelRenderer );
if ( ReplacementModel.IsValid() )
ModelRenderer.Model = ReplacementModel;
}
public void DisableClothingGroups( List<Clothing.BodyGroups> bodyGroups,
List<Clothing.ClothingCategory> clothingCategories )
{
if ( bodyGroups == null )
bodyGroups = new();
if ( clothingCategories == null )
clothingCategories = new();
var clothingData = Network.Owner.GetUserData( "avatar" );
if ( clothingData == null )
return;
var container = new ClothingContainer();
container.Deserialize( clothingData );
container.Height = 1;
if ( container.Clothing != null )
{
foreach ( var clothing in new List<ClothingContainer.ClothingEntry>( container.Clothing ) )
{
foreach ( var group in bodyGroups )
{
if ( group != clothing?.Clothing?.HideBody )
continue;
container.Clothing?.Remove( clothing );
}
foreach ( var clothingCategory in clothingCategories )
{
if ( clothingCategory != clothing?.Clothing?.Category )
continue;
container.Clothing?.Remove( clothing );
}
}
}
foreach ( var group in bodyGroups )
{
switch ( group )
{
case Clothing.BodyGroups.Head:
ModelRenderer.SetBodyGroup( "Head", 2 );
break;
case Clothing.BodyGroups.Chest:
ModelRenderer.SetBodyGroup( "Chest", 1 );
break;
case Clothing.BodyGroups.Legs:
ModelRenderer.SetBodyGroup( "Legs", 1 );
break;
case Clothing.BodyGroups.Hands:
ModelRenderer.SetBodyGroup( "Hands", 1 );
break;
case Clothing.BodyGroups.Feet:
ModelRenderer.SetBodyGroup( "Feet", 1 );
break;
}
}
if ( ReplacementModel.IsValid() )
ModelRenderer.Model = ReplacementModel;
}
}