Park/Buildings/SlotMarker.cs
namespace HC3;
public class SlotMarker : Component, Component.ExecuteInEditor
{
[Property, ReadOnly] public Guest Contents { get; private set; }
private Vector3 ExitPosition;
public bool IsFree() => !Contents.IsValid();
public void LoadIn( Guest guest )
{
if ( Contents.IsValid() )
{
Contents.GameObject.SetParent( null, true );
Contents.WorldPosition = ExitPosition;
Contents.Transform.ClearInterpolation();
}
Contents = guest;
if ( guest.IsValid() )
{
var scale = guest.WorldScale;
ExitPosition = Contents.WorldPosition;
Contents.GameObject.SetParent( GameObject, false );
Contents.LocalTransform = global::Transform.Zero;
Contents.Transform.ClearInterpolation();
Contents.WorldScale = scale;
}
}
private SkinnedModelRenderer _hintRenderer;
private void CreateHint()
{
if ( Game.IsPlaying )
return;
if ( _hintRenderer.IsValid() )
ClearHint();
var go = new GameObject( GameObject );
go.Flags |= GameObjectFlags.Hidden | GameObjectFlags.NotSaved | GameObjectFlags.Absolute;
_hintRenderer = go.AddComponent<SkinnedModelRenderer>();
_hintRenderer.Model = Model.Load( "models/characters/visitors/visitor.vmdl" );
_hintRenderer.WorldScale = 0.15f;
_hintRenderer.Tint = _hintRenderer.Tint.WithAlpha( 0.4f );
_hintRenderer.UseAnimGraph = false;
_hintRenderer.Sequence.Name = "SitPose_Default";
UpdateHint();
}
void UpdateHint()
{
_hintRenderer.WorldPosition = WorldPosition;
_hintRenderer.WorldRotation = WorldRotation;
}
private void ClearHint()
{
if ( _hintRenderer.IsValid() )
_hintRenderer.DestroyGameObject();
_hintRenderer = null;
}
protected override void OnEnabled()
{
CreateHint();
}
protected override void OnDisabled()
{
ClearHint();
}
protected override void OnUpdate()
{
if ( _hintRenderer.IsValid() )
{
UpdateHint();
}
}
}