Components/CollisionLayerTrigger.cs
using Clover.Player;
namespace Clover.Components;
/// <summary>
/// A trigger that adds/removes a tag to the GameObject that enters/exits the trigger.
/// Used for bridges to walk over the collision blocker while also walking on top of the bridge.
/// </summary>
[Title( "Collision Layer Trigger" )]
[Category( "Clover/Components" )]
public class CollisionLayerTrigger : Component, Component.ITriggerListener
{
[Property] public string Layer { get; set; }
void ITriggerListener.OnTriggerEnter( Collider other )
{
// Log.Info( $"OnTriggerEnter {other.GameObject}" );
if ( !other.GameObject.IsValid() )
{
Log.Warning( "Invalid GameObject" );
return;
}
if ( other.GameObject.Components.Get<PlayerCharacter>() == null ) return;
Log.Info( $"Adding {Layer} to {other.GameObject}" );
other.GameObject.Tags.Add( Layer );
}
void ITriggerListener.OnTriggerExit( Collider other )
{
// Log.Info( $"OnTriggerExit {other.GameObject}" );
if ( !other.GameObject.IsValid() )
{
Log.Warning( "Invalid GameObject" );
return;
}
if ( other.GameObject.Components.Get<PlayerCharacter>() == null ) return;
Log.Info( $"Removing {Layer} from {other.GameObject}" );
other.GameObject.Tags.Remove( Layer );
}
}