Revision Difference
Custom_Asset_Types#544234
<cat>Code.Misc</cat>⤶
<title>Custom Asset Types</title>⤶
⤶
Custom assets are things you can define yourself. They give you a nice inspector window and they're hotloaded in-game, which means you can whip things up pretty quickly if you're using them.⤶
⤶
# Creating a custom asset type⤶
⤶
Let's say you wanted your own custom weapon asset type. Here's how you'd do that.⤶
⤶
## Creating the FGD⤶
⤶
Make a folder in your addon's root directory, call it `config`. Make a file in there called `weapon.asset`.⤶
The file name you choose here will be the name for the base class and the extension for any files of this type.⤶
⤶
Writing the FGD here is similar to how you'd write an FGD normally. Here's a very basic example:⤶
⤶
```⤶
@BaseClass = weapon : "A weapon"⤶
[⤶
Name(string) : "Name" : "Weapon Name"⤶
Description(string) : "Description" : "This is my weapon."⤶
Damage(float) : "Damage" : "5"⤶
]⤶
```⤶
⤶
This would define a simplistic weapon that has a name, description, and damage value.⤶
⤶
When writing these, give your fields some sane default values to make it easier on yourself.⤶
⤶
You can obviously do a lot more than this - you could define all of the possible parameters here - but we'll keep things simple for now.⤶
⤶
## Mirroring it in code⤶
⤶
You then need to mirror this class in code.⤶
⤶
```⤶
[Library( "weapon" )]⤶
public class WeaponData : Asset⤶
{⤶
// Data from weapon.asset⤶
public string Name { get; set; } = "Weapon Name";⤶
public string Description { get; set; } = "This is my weapon.";⤶
public float Damage { get; set; } = 5.0f;⤶
}⤶
```⤶
⤶
Make sure you specify the same defaults that you specify in the FGD.⤶
⤶
<warning>⤶
If you don't specify defaults in code, then they won't be assigned to at all - regardless of whether these are set up in the FGD.⤶
</warning>⤶
⤶
## Using the inspector⤶
⤶
Now that you have everything set up, you can use the inspector tool to edit your first weapon.⤶
⤶
1. Click the "Inspector" icon in the asset browser.⤶
⤶
<upload src="44a6e/8d941a81d2276f1.png" size="36799" name="image.png" />⤶
⤶
2. Pick your asset type.⤶
⤶
<upload src="44a6e/8d941a921ee5812.png" size="15315" name="image.png" />⤶
⤶
3. Set up your weapon however you want.⤶
⤶
<upload src="44a6e/8d941a8a3d0efee.png" size="9916" name="image.png" />⤶
⤶
4. Save your asset into your addon's config directory - call it "MyWeapon.weapon"⤶
⤶
⤶
## Loading the asset type⤶
⤶
Loading an asset type is super easy.⤶
⤶
```⤶
// Property allows for hot-loading⤶
public WeaponData WeaponData { get; set; }⤶
⤶
// ...⤶
⤶
// Load the weapon data from a path⤶
WeaponData = Resource.FromPath<WeaponData>( "config/MyWeapon.weapon" );⤶
```⤶
⤶
Congrats, you can now get your weapon's data using the WeaponData object you just created.⤶
For example, if you wanted to get the weapon's damage:⤶
⤶
```⤶
Log.Info( WeaponData.Name );⤶
Log.Info( WeaponData.Description );⤶
Log.Info( WeaponData.Damage );⤶
⤶
// Output: ⤶
// Cool Weapon⤶
// This is my cool gun⤶
// 69⤶
```