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