Move material creation back to Mission
This commit is contained in:
parent
59edc0744c
commit
d1d6b310ab
|
@ -7,20 +7,16 @@ namespace KeepersCompound.TMV;
|
|||
|
||||
public class MeshSurfaceData
|
||||
{
|
||||
const string MATERIAL_PATH = "res://project/materials/base.tres";
|
||||
|
||||
public bool Empty { get; private set; }
|
||||
|
||||
private readonly Texture _texture;
|
||||
private readonly List<Vector3> _vertices = new();
|
||||
private readonly List<Vector3> _normals = new();
|
||||
private readonly List<int> _indices = new();
|
||||
private readonly List<Vector2> _textureUvs = new();
|
||||
private readonly List<Vector2> _lightmapUvs = new();
|
||||
|
||||
public MeshSurfaceData(Texture texture)
|
||||
public MeshSurfaceData()
|
||||
{
|
||||
_texture = texture;
|
||||
Empty = true;
|
||||
}
|
||||
|
||||
|
@ -78,12 +74,4 @@ public class MeshSurfaceData
|
|||
|
||||
return array;
|
||||
}
|
||||
|
||||
public Material BuildMaterial(Texture lightmapTexture)
|
||||
{
|
||||
var material = ResourceLoader.Load<ShaderMaterial>(MATERIAL_PATH).Duplicate() as ShaderMaterial;
|
||||
material.SetShaderParameter("texture_albedo", _texture);
|
||||
material.SetShaderParameter("lightmap_albedo", lightmapTexture);
|
||||
return material;
|
||||
}
|
||||
}
|
|
@ -139,19 +139,19 @@ public partial class Mission : Node3D
|
|||
}
|
||||
|
||||
var lightmapTexture = BuildLightmapTexture(cells, packingRects.ToArray(), rectDataMap, surfaceDataMap);
|
||||
foreach (var surface in surfaceDataMap.Values)
|
||||
foreach (var (textureId, surface) in surfaceDataMap)
|
||||
{
|
||||
if (surface.Empty)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var array = surface.BuildSurfaceArray();
|
||||
var material = surface.BuildMaterial(lightmapTexture);
|
||||
var mesh = new ArrayMesh();
|
||||
var albedoTexture = _textureLoader.Get(textureId);
|
||||
|
||||
var mesh = new ArrayMesh();
|
||||
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, surface.BuildSurfaceArray());
|
||||
mesh.SurfaceSetMaterial(0, BuildMaterial(albedoTexture, lightmapTexture));
|
||||
|
||||
mesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, array);
|
||||
mesh.SurfaceSetMaterial(0, material);
|
||||
var meshInstance = new MeshInstance3D { Mesh = mesh };
|
||||
AddChild(meshInstance);
|
||||
}
|
||||
|
@ -178,7 +178,7 @@ public partial class Mission : Node3D
|
|||
|
||||
if (!surfaceDataMap.ContainsKey(textureId))
|
||||
{
|
||||
surfaceDataMap.Add(textureId, new MeshSurfaceData(_textureLoader.Get(textureId)));
|
||||
surfaceDataMap.Add(textureId, new MeshSurfaceData());
|
||||
}
|
||||
var surfaceData = surfaceDataMap[textureId];
|
||||
var (start, end) = surfaceData.AddPolygon(vertices, normal, textureUvs, lightmapUvs);
|
||||
|
@ -359,4 +359,13 @@ public partial class Mission : Node3D
|
|||
GD.Print($" {i}:\n Tokens: [{item.Tokens[0]}, {item.Tokens[1]}, {item.Tokens[2]}, {item.Tokens[3]}]\n Name: {item.Name}");
|
||||
}
|
||||
}
|
||||
|
||||
const string MATERIAL_PATH = "res://project/materials/base.tres";
|
||||
private static Material BuildMaterial(Texture albedoTexture, Texture lightmapTexture)
|
||||
{
|
||||
var material = ResourceLoader.Load<ShaderMaterial>(MATERIAL_PATH).Duplicate() as ShaderMaterial;
|
||||
material.SetShaderParameter("texture_albedo", albedoTexture);
|
||||
material.SetShaderParameter("lightmap_albedo", lightmapTexture);
|
||||
return material;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue