S&box Wiki

Revision Difference

Linking_Entities_to_Hammer#543948

<cat>Code.Game</cat> <title>Linking Entities to Hammer</title> # TLDR * Use `[HammerProp(name)]` for properties * Use `[Input(name)]` for inputs (on methods) * use `ent.FireOutput(name, sender)` for outputs # Creating the FGD First, create an [FGD](https://developer.valvesoftware.com/wiki/FGD) and put it into your addons `config` folder (or if you dont have one, make one in your addons root directory) ``` @PointClass = some_entity [ some_property(string) : "Some Property" some_other_property(boolean) : "Some other Property" // outputs output OnSomething(void) : "Fires when something happens" // inputs input DoSomething(void) : "Does Something" input DoSomethingElse(string) : "Does something with parameters" ] ``` Our FGD will look something like this # Creating the entity in code After you have created your fgd, you have to create your entity in the code. After you have created your FGD, you have to create your entity in the code. Create a partial class and make it inherit from `Entity` or `ModelEntity` if you want it to have a model. ``` public partial SomeEntity : Entity { public string SomeProperty { get; set; } public bool SomeOtherProperty { get; set; } public void SomeInput() { } public void DoSomethingElse(string str) { } } ``` It should look something like this # Linking your entity to the FGD Add `[Library("name")]` to your class where `name` is the name of the class in hammer (ex: info_player_spawn, team_control_point) Next, add `[HammerProp(name)]` to all of your properties where `name` is the name you gave the property in the FGD After that, add `[Input(name)]` to every method you want to act as an input where `name` is the name you gave the input in the FGD again. <validate>Do inputs with parameters work as you would expect?</validate> ``` [Library("some_entity")] public partial SomeEntity : Entity { [HammerProp("some_property"))] public string SomeProperty { get; set; } [HammerProp("some_other_property")] public bool SomeOtherProperty { get; set; } [Input("DoSomething")] public void SomeInput() { } [Input] public void DoSomethingElse(string str) { } } ``` A functioning entity which is linked to the FGD we made earlier # Firing Outputs You can fire your output using `Entity.FireOutput(name, sender)` like this ``` public static void MakeItDoSomething(SomeEntity ent) { ent.FireOutput("OnSomething", null); } ```