S&box Wiki

Revision Difference

Entity_Tags#560142

<cat>Code.Entity</cat>⤶ <title>Entity Tags</title>⤶ ⤶ Entities can be tagged with string tags. These tags are networked, so are also available for query on the client.⤶ ⤶ Entity tags are (in most cases) automatically propagated to all [physics shapes](https://asset.party/api/Sandbox.PhysicsShape) of the entity, which are then used for determine which shapes should collide with each other.⤶ ⤶ Game developers can then set up which tags collide with each other in the games' project settings.⤶ ⤶ <upload src="70c/8dac70d7ed26611.png" size="81491" name="image.png" />⤶ ⤶ ⤶ ⤶ # Setting Tags⤶ ⤶ ```⤶ // set one tag on the entity⤶ player_entity.Tags.Add( "player" );⤶ ⤶ // set multiple tags on the entity⤶ enemy_entity.Tags.Add( "enemy", "threat" );⤶ ⤶ // updating tags programmatically (adds if true, removes if false)⤶ door_entity.Tags.Set( "locked", IsLocked() );⤶ ⤶ // removing tags ⤶ enemy_entity.Tags.Remove( "threat" );⤶ ⤶ ```⤶ ⤶ # Querying Tags⤶ ⤶ ```⤶ if ( enemy.Tags.Has( "threat" ) )⤶ {⤶ // run away⤶ }⤶ ```⤶ ⤶ ⤶ # Using in Traces⤶ ⤶ ```⤶ // Only hit entities with the world tag⤶ tr = Trace.Ray( startpos, endpos )⤶ .WithTag( "world" )⤶ .Run();⤶ ⤶ // Hit enemies that are a threat⤶ tr = Trace.Ray( startpos, endpos )⤶ .WithAllTags( "enemy", "threat" )⤶ .Run();⤶ ⤶ // Hit enemies or players⤶ tr = Trace.Ray( startpos, endpos )⤶ .WithAnyTags( "enemy", "player" )⤶ .Run();⤶ ⤶ // Hit anything but players⤶ tr = Trace.Ray( startpos, endpos )⤶ .WithoutTags( "player" )⤶ .Run();⤶ ⤶ // Hit anything but players and world⤶ tr = Trace.Ray( startpos, endpos )⤶ .WithoutTags( "player", "world" )⤶ .Run();⤶ ⤶ ```⤶ ⤶ # Detecting Tag Changes⤶ ⤶ ```⤶ ⤶ protected override void OnTagAdded( string tag )⤶ {⤶ ⤶ }⤶ ⤶ protected override void OnTagRemoved( string tag )⤶ {⤶ ⤶ }⤶ ⤶ ```⤶ <cat>removed</cat>