S&box Wiki

Revision Difference

Linking_Entities_to_Hammer#544686

<cat>Code.Game</cat> <title>Linking Entities to Hammer</title> Entities defined in your addon will automatically generate an [FGD](https://developer.valvesoftware.com/wiki/FGD) and put it into your addons `config` folder. # Creating an entity To link your entity to Hammer you need to add a [Library] attribute to your class, this will define the entity name and description. A basic example: ```csharp [Library("info_player_spawn", Description = "Spawn a player here")] public partial class SpawnPoint : Entity { } ``` # Hammer Attributes All of these are optional attributes that can be added to your class to change the behaviour in Hammer. ## [Hammer.Solid] Tells Hammer this entity is brush based. ```csharp [Hammer.Solid] ``` ## [Hammer.SupportsSolid] Tells Hammer this point entity can also be a brush entity, such as `ent_door` entity. ```csharp [Hammer.SupportsSolid] ``` ## [Hammer.EditorModel] Tells Hammer what model to use for the entity and is added to the class. ```csharp [Hammer.EditorModel( "models/editor/playerstart.vmdl" )] ``` ## [Hammer.EditorSprite] Tells Hammer what model to use for the entity and is added to the class. ```csharp [Hammer.EditorSprite( "editor/info_target.vmat" )] ``` ## [Hammer.EntityTool] Appends this Entity to Hammer's Entity tool list like so: <upload src="a5727/8d92f33819330cb.png" size="4947" name="image.png" /> ```csharp [Hammer.EntityTool( "Player Spawnpoint", "Player", "Defines a point where the player can (re)spawn" )] ``` ## [Hammer.Model] Makes it so the model, skin and bodygroups can be set and changed in Hammer. ```csharp [Hammer.Model] ``` ## [Hammer.Skip] Can be used if you do not want your entity exposed in Hammer. ```csharp [Hammer.Skip] ``` # Hammer Properties Any property in your class can be exposed to Hammer using the [Property] attribute</page>. An example of a property being defined: ```csharp public partial class MyEntity : Entity { /// <summary> /// Help text in hammer /// <summary> [Property( Title = "Start Disabled" ) ] public bool StartDisabled { get; set; } = false; } ``` Your entity properties will then show up in Hammer: <upload src="a5727/8d92f36d98ce869.png" size="11599" name="image.png" /> # 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 { /// /// Description of my input to be displayed in Hammer and in Visual Studio /// [Input] public void DoSomethingElse(string str) { } [Input( Name = "DoSomething", Help = "Help text for input" )] public void SomeInput() { } } ``` # 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 { /// /// Description of my output to be displayed in Hammer and in Visual Studio /// public Output OnSomethingHappened; } ``` # Firing Outputs You can fire your output using `Entity.FireOutput(name, sender)` like this: ```csharp protected Output OnEndTouch { get; set; } public virtual void OnTouchEnd( Entity toucher ) { OnEndTouch.Fire( toucher ); } ```