Files
sbox-public/engine/Sandbox.Engine/Resources/Model/Model.MaterialGroupBuilder.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

77 lines
1.5 KiB
C#

namespace Sandbox;
public sealed class MaterialGroupBuilder
{
/// <summary>
/// The name of the material group.
/// </summary>
public string Name { get; internal set; }
internal List<Material> Materials = [];
/// <inheritdoc cref="Name"/>
public MaterialGroupBuilder WithName( string name )
{
Name = name;
return this;
}
/// <summary>
/// Add a material to the group.
/// </summary>
public MaterialGroupBuilder AddMaterial( Material material )
{
Materials.Add( material );
return this;
}
/// <summary>
/// Add a materials to the group.
/// </summary>
public MaterialGroupBuilder AddMaterials( Span<Material> materials )
{
Materials.AddRange( materials );
return this;
}
internal MaterialGroupBuilder()
{
}
}
partial class ModelBuilder
{
private readonly List<MaterialGroupBuilder> _materialGroups = [];
/// <summary>
/// Add a named material group builder.
/// </summary>
public MaterialGroupBuilder AddMaterialGroup( string name )
{
var builder = new MaterialGroupBuilder();
builder.Name = name;
_materialGroups.Add( builder );
return builder;
}
private CBuilderMaterialGroupArray CreateMaterialGroups()
{
var result = CBuilderMaterialGroupArray.Create( _materialGroups.Count );
for ( int i = 0; i < _materialGroups.Count; i++ )
{
var src = _materialGroups[i];
var dst = result.Get( i );
dst.m_name = src.Name;
foreach ( var mat in src.Materials )
{
if ( mat.native.IsNull ) continue;
dst.AddMaterial( mat.native );
}
}
return result;
}
}