WorldBuilder/RoomTrigger.cs
using Clover.Player;
namespace Clover.WorldBuilder;
[Category( "Clover/World" )]
public class RoomTrigger : Component, Component.ITriggerListener
{
[RequireComponent] public WorldLayerObject WorldLayerObject { get; set; }
[Property] public InteriorManager InteriorManager { get; set; }
[Property] public string RoomId { get; set; }
[Property] public List<string> BodyGroupsToHide { get; set; } = new();
[Property] public List<GameObject> PiecesToShow { get; set; } = new();
void ITriggerListener.OnTriggerEnter( Collider other )
{
if ( other.GameObject.Components.TryGet<PlayerCharacter>( out var player,
FindMode.EverythingInSelfAndAncestors ) )
{
Log.Info( $"Player {player.PlayerName} entered room {RoomId}" );
InteriorManager?.EnterRoom( player, this );
/*foreach ( var bodyGroup in BodyGroupsToHide )
{
InteriorManager?.SetInteriorModelBodyGroup( bodyGroup, false );
}*/
/*foreach ( var piece in PiecesToShow )
{
piece.Enabled = true;
}*/
}
}
void ITriggerListener.OnTriggerExit( Collider other )
{
if ( other.GameObject.Components.TryGet<PlayerCharacter>( out var player,
FindMode.EverythingInSelfAndAncestors ) )
{
Log.Info( $"Player {player.PlayerName} exited room {RoomId}" );
InteriorManager?.ExitRoom( player, this );
/*foreach ( var bodyGroup in BodyGroupsToHide )
{
InteriorManager?.SetInteriorModelBodyGroup( bodyGroup, true );
}*/
/*foreach ( var piece in PiecesToShow )
{
piece.Enabled = false;
}*/
}
}
protected override void DrawGizmos()
{
foreach ( var piece in PiecesToShow )
{
if ( piece.IsValid() )
{
Gizmo.Transform = global::Transform.Zero;
Gizmo.Draw.Arrow( WorldPosition, piece.WorldPosition );
}
}
}
}