mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 12:09:51 +02:00
feat: all collisions
This commit is contained in:
1 parent
ff0cac84e1
commit
62fb80dddc
2 files changed
+46
-33
No files matched your search
@@ -36,6 +36,14 @@ namespace BlitzKit.CLI.Functions
|
|||||||
{ $"{PenetrationGroupNameMapPrefix}::TANK_PART_GUN", "gun" },
|
{ $"{PenetrationGroupNameMapPrefix}::TANK_PART_GUN", "gun" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private static readonly List<string> CollisionDTs =
|
||||||
|
[
|
||||||
|
"DT_Chassis",
|
||||||
|
"DT_Hulls",
|
||||||
|
"DT_Turrets",
|
||||||
|
"DT_Guns",
|
||||||
|
];
|
||||||
|
|
||||||
[GeneratedRegex("[^a-z0-9]")]
|
[GeneratedRegex("[^a-z0-9]")]
|
||||||
private static partial Regex NonAlphanumericRegex();
|
private static partial Regex NonAlphanumericRegex();
|
||||||
|
|
||||||
@@ -48,7 +56,7 @@ namespace BlitzKit.CLI.Functions
|
|||||||
readonly BlitzProvider provider = new(args.Contains("--depot"));
|
readonly BlitzProvider provider = new(args.Contains("--depot"));
|
||||||
Locales? locales;
|
Locales? locales;
|
||||||
readonly Dictionary<string, Dictionary<string, string>> strings = [];
|
readonly Dictionary<string, Dictionary<string, string>> strings = [];
|
||||||
readonly AssetUploader assetUploader = new("mangled ue assets");
|
readonly AssetUploader assetUploader = new("mangled ue assets") { disabled = false };
|
||||||
|
|
||||||
public async Task Mangle()
|
public async Task Mangle()
|
||||||
{
|
{
|
||||||
@@ -123,6 +131,9 @@ namespace BlitzKit.CLI.Functions
|
|||||||
// if (tankDir.Value.Name != "R90_IS_4")
|
// if (tankDir.Value.Name != "R90_IS_4")
|
||||||
// continue;
|
// continue;
|
||||||
|
|
||||||
|
// if (tankDir.Value.Name != "R81_IS_8")
|
||||||
|
// continue;
|
||||||
|
|
||||||
var tank = await MangleTank(tankDir.Value);
|
var tank = await MangleTank(tankDir.Value);
|
||||||
tanksFull.Tanks.Add(tank);
|
tanksFull.Tanks.Add(tank);
|
||||||
}
|
}
|
||||||
@@ -223,7 +234,7 @@ namespace BlitzKit.CLI.Functions
|
|||||||
slug = MultipleDashesRegex().Replace(slug, "-");
|
slug = MultipleDashesRegex().Replace(slug, "-");
|
||||||
slug = TrailingDashRegex().Replace(slug, "");
|
slug = TrailingDashRegex().Replace(slug, "");
|
||||||
|
|
||||||
await MangleHull(pda);
|
await MangleCollision(id, pda);
|
||||||
// await MangleIcon(pda);
|
// await MangleIcon(pda);
|
||||||
// await MangleArmor(pda);
|
// await MangleArmor(pda);
|
||||||
|
|
||||||
@@ -309,40 +320,34 @@ namespace BlitzKit.CLI.Functions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task MangleHull(UObject pda)
|
async Task MangleModuleCollision(string id, UDataTable dt)
|
||||||
{
|
{
|
||||||
var id = PropertyUtil.Get<FName>(pda, "TankId").Text;
|
foreach (var row in dt.RowMap)
|
||||||
|
{
|
||||||
|
var moduleName = row.Key.Text;
|
||||||
|
var visualData = PropertyUtil.Get<UObject>(row.Value, "VisualData");
|
||||||
|
var meshSettings = PropertyUtil.Get<FStructFallback>(visualData, "MeshSettings");
|
||||||
|
|
||||||
var hullsDt = PropertyUtil.Get<UDataTable>(pda, "DT_Hulls");
|
if (PropertyUtil.TryGet<UStaticMesh>(meshSettings, "CollisionMesh", out var collision))
|
||||||
var chassisDt = PropertyUtil.Get<UDataTable>(pda, "DT_Chassis");
|
{
|
||||||
|
MonoGltf gltf = new(collision);
|
||||||
|
|
||||||
UDataTableUtility.TryGetDataTableRow(hullsDt, "hull", StringComparison.Ordinal, out var hull);
|
await assetUploader.Add(new($"tanks/{id}/collision/{moduleName}.glb", gltf.Write()));
|
||||||
UDataTableUtility.TryGetDataTableRow(
|
}
|
||||||
chassisDt,
|
else
|
||||||
"chassis",
|
{
|
||||||
StringComparison.Ordinal,
|
PrettyLog.Warn($"No collision mesh found for {id} {moduleName}; skipping...");
|
||||||
out var chassis
|
}
|
||||||
);
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var hullVisualData = PropertyUtil.Get<UObject>(hull, "VisualData");
|
async Task MangleCollision(string id, UObject pda)
|
||||||
var chassisVisualData = PropertyUtil.Get<UObject>(chassis, "VisualData");
|
{
|
||||||
|
foreach (var name in CollisionDTs)
|
||||||
var hullMeshSettings = PropertyUtil.Get<FStructFallback>(hullVisualData, "MeshSettings");
|
{
|
||||||
var chassisMeshSettings = PropertyUtil.Get<FStructFallback>(
|
await MangleModuleCollision(id, PropertyUtil.Get<UDataTable>(pda, name));
|
||||||
chassisVisualData,
|
}
|
||||||
"MeshSettings"
|
|
||||||
);
|
|
||||||
|
|
||||||
var hullCollision = PropertyUtil.Get<UStaticMesh>(hullMeshSettings, "CollisionMesh");
|
|
||||||
var chassisCollision = PropertyUtil.Get<UStaticMesh>(chassisMeshSettings, "CollisionMesh");
|
|
||||||
|
|
||||||
MonoGltf hullCollisionGltf = new(hullCollision);
|
|
||||||
MonoGltf chassisCollisionGltf = new(chassisCollision);
|
|
||||||
|
|
||||||
await assetUploader.Add(new($"tanks/{id}/collision/hull.glb", hullCollisionGltf.Write()));
|
|
||||||
await assetUploader.Add(
|
|
||||||
new($"tanks/{id}/collision/chassis.glb", chassisCollisionGltf.Write())
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,7 @@ namespace BlitzKit.CLI.Models
|
|||||||
{
|
{
|
||||||
public class AssetUploader(string message)
|
public class AssetUploader(string message)
|
||||||
{
|
{
|
||||||
|
public required bool disabled;
|
||||||
private static readonly int TIME_PER_BLOB = (int)Math.Pow(2, 4) * 10000;
|
private static readonly int TIME_PER_BLOB = (int)Math.Pow(2, 4) * 10000;
|
||||||
private static readonly int TIME_BETWEEN_BLOBS = (int)(60 * 60 * 1000 / 5000 / 0.9);
|
private static readonly int TIME_BETWEEN_BLOBS = (int)(60 * 60 * 1000 / 5000 / 0.9);
|
||||||
private static readonly int MAX_TREE_SIZE = 7_000_000; // 7MB
|
private static readonly int MAX_TREE_SIZE = 7_000_000; // 7MB
|
||||||
@@ -30,6 +31,11 @@ namespace BlitzKit.CLI.Models
|
|||||||
|
|
||||||
public async Task Add(FileChange change)
|
public async Task Add(FileChange change)
|
||||||
{
|
{
|
||||||
|
if (disabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var blobPath = $"{repo}/{branch}/{change.Path}";
|
var blobPath = $"{repo}/{branch}/{change.Path}";
|
||||||
HttpResponseMessage response = await httpClient.GetAsync(
|
HttpResponseMessage response = await httpClient.GetAsync(
|
||||||
$"https://raw.githubusercontent.com/{blobPath}"
|
$"https://raw.githubusercontent.com/{blobPath}"
|
||||||
@@ -103,8 +109,10 @@ namespace BlitzKit.CLI.Models
|
|||||||
|
|
||||||
public async Task Flush()
|
public async Task Flush()
|
||||||
{
|
{
|
||||||
if (changes.Count == 0)
|
if (disabled || changes.Count == 0)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var repoRawSplit = repo.Split('/');
|
var repoRawSplit = repo.Split('/');
|
||||||
var owner = repoRawSplit[0];
|
var owner = repoRawSplit[0];
|
||||||
|
|||||||
Reference in new issue
Block a user