S&box Wiki

Revision Difference

Linking_Entities_to_Hammer#543997

<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) First, create an [FGD](https://developer.valvesoftware.com/wiki/FGD) and put it into your addons `config` folder (or if you don't 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. 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); } ```