Revision Difference
custom_modeldoc_nodes#546442
<title>Custom ModelDoc nodes</title>⤶
⤶
You can make a custom ModelDoc node. This is useful for any gamemode-specific data you want to attach to specific models.⤶
These nodes are defined in C# code, and the FGD for these is automatically generated for you.⤶
⤶
# How to do it⤶
⤶
1. Define a struct or class. Add the `ModelDoc.GameData` attribute.⤶
⤶
```⤶
/// <summary>⤶
/// Spawn a particle when the model is used on an entity. Support for this depends on the entity.⤶
/// </summary>⤶
[ModelDoc.GameData( "particle", AllowMultiple = true )]⤶
public class ModelParticle⤶
{⤶
[DisplayName( "Particle" ), ResourceType( "vpcf") ]⤶
public string Name { get; set; }⤶
⤶
[JsonPropertyName( "attachment_point" ), FGDType( "model_attachment" )]⤶
public string AttachmentPoint { get; set; }⤶
⤶
[JsonPropertyName( "attachment_type" )]⤶
public ParticleAttachment AttachmentType { get; set; } = ParticleAttachment.AttachmentFollow;⤶
⤶
[JsonPropertyName( "attachment_offset" )]⤶
public Vector3 AttachmentOffset { get; set; }⤶
}⤶
```⤶
⤶
2. Run your gamemode. The FGD for this node then gets auto-generated.⤶
⤶
3. Assign the node in ModelDoc. If you don't know how to do that, you should probably read a ModelDoc guide like [this one](https://wiki.facepunch.com/sbox/Importing_a_new_model#thingsyouregoingtoneed).⤶
⤶
4. Now you can use this data in code.⤶
⤶
```⤶
ModelParticle[] modelParticles = Model.GetData<ModelParticle[]>();⤶
```⤶
⤶
# Other things you can do with this⤶
⤶
There's multiple attributes that you can use in order to make your own custom designers:⤶
⤶
- `ModelDoc.Axis`⤶
- `ModelDoc.Box`⤶
- `ModelDoc.Sphere`⤶
- `ModelDoc.Capsule`⤶
- `ModelDoc.Cylinder`⤶
- `ModelDoc.Line`⤶
- `ModelDoc.HandPose`⤶
- `ModelDoc.EditorWidget`