context shit

This commit is contained in:
tresabhi committed 2026-06-08 19:17:27 -05:00
1 parent 667d8c8f7c
commit 76fc900a15
6 files changed
+103 -40

No files matched your search

+35 -27
View File
@@ -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();
}
}
+7 -1
View File
@@ -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);
}
}
+45 -9
View File
@@ -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 (
+1
View File
@@ -21,6 +21,7 @@
"@fontsource-variable/jetbrains-mono": "^5.2.8",
"@fontsource-variable/roboto-flex": "^5.2.8",
"@fontsource-variable/roboto-mono": "^5.2.9",
"@gltf-transform/core": "^4.4.0",
"@radix-ui/colors": "^3.0.0",
"@radix-ui/react-icons": "^1.3.2",
"@react-three/drei": "^10.7.7",
@@ -1,3 +1,4 @@
import { Document, NodeIO } from "@gltf-transform/core";
import type { APIContext, GetStaticPathsItem } from "astro";
import { api } from "../../../../api/dynamic";
import { mixStaticPaths } from "../../../../astro/mixStaticPaths";
@@ -29,14 +30,20 @@ export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => {
return paths;
});
type KnownChannel = "BaseColor" | "Normal" | "MetallicRoughness";
interface MappedGltf {
Json: string;
TextureMap: Record<string, Record<KnownChannel, string>>;
}
export async function GET({
params,
}: APIContext<never, { id: string; part: string }>) {
const item = api.metadata.item(params.id);
const assetDiscovery = item.BlitzStaticAssetsDiscovery();
const tag = assertDiscoveryTag(assetDiscovery);
const asd = game!.tankPart(tag, params.part);
// const array = new Uint8Array(part);
const part = game!.tankPart(tag, params.part);
return Response.json(asd);
return Response.json(part);
}