Player/ShipSkinComponent.cs
/// <summary>
/// Applies material skin overrides to the player's ship model.
/// </summary>
[Title( "Ship Skin" ), Icon( "palette" )]
public sealed class ShipSkinComponent : Component
{
private PlayerPawn _pawn;
[Sync, Change( nameof( OnSkinChanged ) )]
public int Skin { get; set; } = -1;
protected override void OnStart()
{
_pawn = Components.Get<PlayerPawn>( FindMode.InAncestors );
}
private void OnSkinChanged( int before, int after )
{
UpdateSkin();
}
public void UpdateSkin()
{
if ( _pawn == null ) _pawn = Components.Get<PlayerPawn>( FindMode.InAncestors );
if ( _pawn == null ) return;
var renderer = _pawn.ModelRenderer;
if ( renderer == null ) return;
if ( Skin < 0 )
{
renderer.MaterialOverride = null;
return;
}
var skinPath = _pawn.Data.skinList
.FirstOrDefault( s => s.skinIdent == Skin )
.Skin;
renderer.MaterialOverride = string.IsNullOrEmpty( skinPath )
? null
: Material.Load( skinPath );
}
}