S&box Wiki

Revision Difference

Linking_Entities_to_Hammer#560141

<cat>Code.Entity</cat>⤶ <title>Map Placeable Entities</title>⤶ ⤶ <upload src="a5727/8da57932ba181af.png" size="414975" name="image.png" />⤶ ⤶ Entities can be placed through the Entity Tool, as with everything else in s&box they are automatically hotloaded within your game and Hammer.⤶ ⤶ If your game is [published on asset.party](CreatingProjects#updatingprojects), people can place entities for your game after downloading all contents of your game in Hammer (models, materials and particles)⤶ ⤶ **IMPORTANT**: Hammer will only display addons from asset.party that contain the tags `map` and `entity`. If your published addon does not appear in the list of asset.party packages available to Hammer, this is probably why.⤶ ⤶ # Creating an entity⤶ ⤶ Creating entities that can be placed in Hammer is as simple as marking them with `[HammerEntity]`.⤶ ⤶ ```csharp⤶ using Sandbox;⤶ using Editor;⤶ ⤶ /// <summary>⤶ /// This entity defines the spawn point of the player in first person shooter gamemodes.⤶ /// </summary>⤶ [Library( "info_player_start" ), HammerEntity]⤶ [Title( "Player Spawnpoint" ), Category( "Player" ), Icon( "place" )]⤶ public class SpawnPoint : Entity⤶ {⤶ }⤶ ```⤶ ⤶ # Properties⤶ ⤶ <upload src="a5727/8d92f36d98ce869.png" size="11599" name="image.png" />⤶ ⤶ Any property in your class can be exposed to Hammer using the `[Property]` attribute.⤶ ⤶ ```csharp⤶ public partial class MyEntity : Entity⤶ {⤶ /// <summary>⤶ /// Help text in hammer⤶ /// </summary>⤶ [Property( Title = "Start Disabled" ) ]⤶ public bool StartDisabled { get; set; } = false;⤶ }⤶ ```⤶ ⤶ # Inputs⤶ ⤶ Any method in your entity class can be exposed to Hammer as an input using the `[Input]` attribute - parameters you define are automatically handled.⤶ ⤶ An example of an input being defined:⤶ ⤶ ```csharp⤶ public partial class MyEntity : Entity⤶ {⤶ /// <summary>⤶ /// Description of my input to be displayed in Hammer and in Visual Studio⤶ /// </summary>⤶ [Input]⤶ public void DoSomethingElse( string str )⤶ {⤶ // ...⤶ }⤶ ⤶ [Input( Name = "DoSomething" )]⤶ public void SomeInput()⤶ {⤶ // ...⤶ }⤶ }⤶ ```⤶ ⤶ To get the activator of an input, your method should include a parameter of type `Entity` named "activator" as shown below:⤶ ⤶ ```csharp⤶ [Input]⤶ public void AnotherSomething( Entity activator )⤶ {⤶ // ...⤶ }⤶ ```⤶ ⤶ # Outputs⤶ ⤶ Any output in your entity class is automatically exposed to Hammer as an output.⤶ ⤶ An example of an output being defined:⤶ ⤶ ```csharp⤶ public partial class MyEntity : Entity⤶ {⤶ /// <summary>⤶ /// Description of my output to be displayed in Hammer and in Visual Studio⤶ /// </summary>⤶ public Output OnSomethingHappened { get; set; }⤶ }⤶ ```⤶ ⤶ # Firing Outputs⤶ ⤶ You can fire your output using `Output.Fire(sender)` like this:⤶ ⤶ ```csharp⤶ protected Output OnEndTouch { get; set; }⤶ ⤶ public virtual void OnTouchEnd( Entity toucher )⤶ {⤶ OnEndTouch.Fire( toucher );⤶ }⤶ ```⤶ ⤶ ⤶ # Hammer Attributes⤶ ⤶ All of these are optional attributes that can be added to your class to change its behavior and appearance in Hammer.⤶ ⤶ This is not an exhaustive list, and a more complete list can be found [here](https://asset.party/api/Editor)⤶ ⤶ ## [Solid]⤶ ⤶ Tells Hammer this entity is brush based.⤶ ⤶ ```csharp⤶ [Solid]⤶ ```⤶ ⤶ ## [SupportsSolid]⤶ ⤶ Tells Hammer this point entity can also be a brush entity, such as `ent_door` entity.⤶ ⤶ ```csharp⤶ [SupportsSolid]⤶ ```⤶ ⤶ ## [EditorModel]⤶ ⤶ Tells Hammer what model to use for the entity and is added to the class.⤶ ⤶ ```csharp⤶ [EditorModel( "models/editor/playerstart.vmdl" )]⤶ ```⤶ ⤶ ## [EditorSprite]⤶ ⤶ Tells Hammer what sprite to use for the entity and is added to the class.⤶ ⤶ ```csharp⤶ [EditorSprite( "editor/info_target.vmat" )]⤶ ```⤶ ⤶ ## [Model]⤶ ⤶ Makes it so the model, skin and bodygroups can be set and changed in Hammer.⤶ ⤶ ```csharp⤶ [Model]⤶ ```⤶ You can also set a default model for an entity while still allowing changes.⤶ ```csharp⤶ [Model( Model = "models/citizen/citizen.vmdl" )]⤶ ```⤶ ⤶ ## [AutoApplyMaterial]⤶ ⤶ Automatically applies the supplied material to the tied brush.⤶ ⤶ ```csharp⤶ [AutoApplyMaterial( "materials/tools/toolstrigger.vmat" )]⤶ ```⤶ <cat>removed</cat>