Editor/HumanoidMocap/PreviewWidget.Visibility.cs
using System;
using System.Linq;
using Sandbox;
namespace HumanoidMocap.Editor;
public sealed partial class PreviewWidget
{
ulong _headMeshMask,_savedHeadMeshBits;
bool _firstPerson,_headMeshHidden;
void ConfigureHeadVisibility()
{
// Use the exposed model body-part metadata. Never hide an arbitrary mesh or
// move/scale bones to work around a first-person camera intersection.
var head=_sceneModel.Model.Parts.All.FirstOrDefault(p=>string.Equals(p.Name,"Head",StringComparison.OrdinalIgnoreCase));
if(head is null||!head.Choices.Any(c=>c.Mask==0))return;
_headMeshMask=head.Mask;
}
void UpdateHeadVisibility()
{
if(!_sceneModel.IsValid()||_headMeshMask==0||_headMeshHidden==_firstPerson)return;
var mask=_sceneModel.MeshGroupMask;
if(_firstPerson)
{
_savedHeadMeshBits=mask&_headMeshMask;
_sceneModel.MeshGroupMask=mask&~_headMeshMask;
}
else _sceneModel.MeshGroupMask=(mask&~_headMeshMask)|_savedHeadMeshBits;
_headMeshHidden=_firstPerson;
}
public bool FirstPerson
{
get=>_firstPerson;
set{_firstPerson=value;UpdateHeadVisibility();}
}
}