mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 20:19:49 +02:00
context shit
This commit is contained in:
1 parent
667d8c8f7c
commit
76fc900a15
6 files changed
+103
-40
No files matched your search
@@ -109,40 +109,48 @@ public partial class GameInterface
|
||||
{ "gun", "DT_Guns" },
|
||||
};
|
||||
|
||||
public MappedGltf TankPart(string tag, string part)
|
||||
public string TankPart(string tag, string part)
|
||||
{
|
||||
var pda = provider.Discovered<UPrimaryDataAsset>(tag);
|
||||
UDataTable? dataTable = null;
|
||||
|
||||
foreach (var (prefix, name) in tankPartPrefixes)
|
||||
try
|
||||
{
|
||||
if (!part.StartsWith(prefix))
|
||||
var pda = provider.Discovered<UPrimaryDataAsset>(tag);
|
||||
UDataTable? dataTable = null;
|
||||
|
||||
foreach (var (prefix, name) in tankPartPrefixes)
|
||||
{
|
||||
continue;
|
||||
if (!part.StartsWith(prefix))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
dataTable = pda.Get<UDataTable>(name);
|
||||
break;
|
||||
}
|
||||
|
||||
dataTable = pda.Get<UDataTable>(name);
|
||||
break;
|
||||
}
|
||||
if (dataTable == null)
|
||||
{
|
||||
throw new ArgumentException($"Unknown tank part: {part}");
|
||||
}
|
||||
|
||||
if (dataTable == null)
|
||||
dataTable.TryGetDataTableRow(part, StringComparison.Ordinal, out var row);
|
||||
|
||||
if (row == null)
|
||||
{
|
||||
throw new ArgumentException($"Unknown tank part: {part}");
|
||||
}
|
||||
|
||||
var visualData = row.Get<UObject>("VisualData");
|
||||
var meshSettings = visualData.Get<FStructFallback>("MeshSettings");
|
||||
// var collisionMesh = meshSettings.Get<UStaticMesh>("CollisionMesh");
|
||||
var mesh = meshSettings.Get<UStaticMesh>("Mesh");
|
||||
|
||||
var gltf = new MonoGltf(mesh);
|
||||
|
||||
return gltf.Write();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new ArgumentException($"Unknown tank part: {part}");
|
||||
throw new Exception($"Failed to export tank part: {part}", e);
|
||||
}
|
||||
|
||||
dataTable.TryGetDataTableRow(part, StringComparison.Ordinal, out var row);
|
||||
|
||||
if (row == null)
|
||||
{
|
||||
throw new ArgumentException($"Unknown tank part: {part}");
|
||||
}
|
||||
|
||||
var visualData = row.Get<UObject>("VisualData");
|
||||
var meshSettings = visualData.Get<FStructFallback>("MeshSettings");
|
||||
// var collisionMesh = meshSettings.Get<UStaticMesh>("CollisionMesh");
|
||||
var mesh = meshSettings.Get<UStaticMesh>("Mesh");
|
||||
var gltf = new MonoGltf(mesh);
|
||||
|
||||
return gltf.Write();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.JavaScript.NodeApi;
|
||||
using System.Text.Json;
|
||||
using Microsoft.JavaScript.NodeApi;
|
||||
using SharpGLTF.Materials;
|
||||
|
||||
namespace BlitzKit.Game.JSExport;
|
||||
@@ -14,4 +15,9 @@ public readonly struct MappedGltf
|
||||
Json = json;
|
||||
TextureMap = textureMap;
|
||||
}
|
||||
|
||||
public string ToJson()
|
||||
{
|
||||
return JsonSerializer.Serialize(this);
|
||||
}
|
||||
}
|
||||
@@ -84,12 +84,12 @@ public class MonoGltf
|
||||
{
|
||||
if (knownChannels.TryGetValue(parameterTexture.Key, out var channel))
|
||||
{
|
||||
var texture = parameterTexture.Value;
|
||||
var name = Path.GetFileNameWithoutExtension(texture.GetPathName());
|
||||
var path = $"/textures/{name}";
|
||||
// var path = texture.GetPathName();
|
||||
materialBuilder.WithChannelImage(channel, "../../stub/stupid.png");
|
||||
|
||||
textures.Add(channel, path);
|
||||
// var texture = parameterTexture.Value;
|
||||
// var name = Path.GetFileNameWithoutExtension(texture.GetPathName());
|
||||
|
||||
// textures.Add(channel, name);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -122,12 +122,48 @@ public class MonoGltf
|
||||
}
|
||||
}
|
||||
|
||||
public MappedGltf Write()
|
||||
public string Write()
|
||||
{
|
||||
var model = scene.ToGltf2();
|
||||
var json = model.GetJSON(false);
|
||||
try
|
||||
{
|
||||
var model = scene.ToGltf2();
|
||||
|
||||
return new MappedGltf(json, textureMap);
|
||||
var stream = new MemoryStream();
|
||||
var context = WriteContext
|
||||
.CreateFromStream(stream)
|
||||
.WithSettingsFrom(new WriteSettings() { ImageWriting = ResourceWriteMode.SatelliteFile });
|
||||
|
||||
context.ImageWriteCallback = (WriteContext context, string assetName, MemoryImage image) =>
|
||||
{
|
||||
// image.Content is the raw data
|
||||
// var bytes = image.Content.ToArray();
|
||||
|
||||
// store.Files[suggestedName] = bytes;
|
||||
|
||||
// // return URI used in JSON
|
||||
//
|
||||
return assetName;
|
||||
};
|
||||
|
||||
foreach (var img in model.LogicalImages)
|
||||
{
|
||||
Console.WriteLine(img.Content.SourcePath);
|
||||
Console.WriteLine(img.Content.FileExtension);
|
||||
}
|
||||
|
||||
model.SaveGLTF
|
||||
|
||||
context.WriteTextSchema2("model.gltf", model);
|
||||
|
||||
stream.Position = 0;
|
||||
using var reader = new StreamReader(stream);
|
||||
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception("Failed to write GLTF", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static (
|
||||
|
||||
Reference in new issue
Block a user