S&box Wiki

Revision Difference

Linking_Entities_to_Hammer#543946

<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.⤶ ⤶ 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);⤶ }⤶ ```⤶