Brine2D.Build¶
Optional MSBuild package that generates a strongly-typed Assets class from your assets/ folder on every build. Full IntelliSense, compile-time safety, no content pipeline.
"Not Yet Published"
Brine2D.Build will be published alongside Brine2D 1.0 after cross-platform MSBuild validation.
Installation¶
dotnet add package Brine2D.Build
That's it. The .targets file is imported automatically by NuGet.
What Gets Generated¶
Given assets/images/player.png and assets/audio/jump.wav, Brine2D.Build generates (into obj/):
namespace MyGame;
public static partial class Assets
{
public static class Audio
{
public const string Jump = ""assets/audio/jump.wav"";
}
public static class Images
{
public const string Player = ""assets/images/player.png"";
}
}
Usage¶
Use generated constants with IAssetLoader or AssetManifest:
// Direct loading
var texture = await _assets.GetOrLoadTextureAsync(Assets.Images.Player, cancellationToken: ct);
// With manifest
public class LevelAssets : AssetManifest
{
public readonly AssetRef<ITexture> Player = Texture(Assets.Images.Player);
public readonly AssetRef<ISoundEffect> Jump = Sound(Assets.Audio.Jump);
}
Configuration¶
All optional:
<PropertyGroup>
<Brine2DAssetsFolder>content</Brine2DAssetsFolder>
<Brine2DAssetsNamespace>MyGame</Brine2DAssetsNamespace>
<Brine2DAssetsClassName>GameAssets</Brine2DAssetsClassName>
<Brine2DGenerateAssets>false</Brine2DGenerateAssets>
</PropertyGroup>
The partial Keyword¶
The generated class is partial, so you can extend it:
public static partial class Assets
{
public static class Runtime
{
public static string LevelPath(int level) => $""assets/levels/level_{level:D2}.tmj"";
}
}
Without This Package¶
Brine2D.Build is entirely optional. Manifests work with string paths:
public class LevelAssets : AssetManifest
{
public readonly AssetRef<ITexture> Player = Texture(""assets/images/player.png"");
}
Next Steps¶
- Asset Manifests — Using manifests with or without Brine2D.Build
- Loading Assets — Direct loading API