Add object transparency property support

This commit is contained in:
Jarrod Doyle 2024-09-07 08:30:26 +01:00
parent a6e667e1da
commit 001b6a944e
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
4 changed files with 26 additions and 0 deletions

View File

@ -111,3 +111,14 @@ public class PropString : Property
// value = tmpName[..Math.Min(length - 1, tmpName.Length)];
}
}
public class PropFloat : Property
{
public float value;
public override void Read(BinaryReader reader)
{
base.Read(reader);
value = reader.ReadSingle();
}
}

View File

@ -109,6 +109,7 @@ public class DbFile
"P$OTxtRepr1" => new PropertyChunk<PropString>(),
"P$OTxtRepr2" => new PropertyChunk<PropString>(),
"P$OTxtRepr3" => new PropertyChunk<PropString>(),
"P$RenderAlp" => new PropertyChunk<PropFloat>(),
"LD$MetaProp" => new LinkDataMetaProp(),
_ when entryName.StartsWith("L$") => new LinkChunk(),
_ when entryName.StartsWith("P$") => new PropertyChunk<PropGeneric>(),

View File

@ -42,6 +42,7 @@ public class ObjectHierarchy
db.Chunks.TryGetValue("P$OTxtRepr1", out var txtRepl1Raw) &&
db.Chunks.TryGetValue("P$OTxtRepr2", out var txtRepl2Raw) &&
db.Chunks.TryGetValue("P$OTxtRepr3", out var txtRepl3Raw) &&
db.Chunks.TryGetValue("P$RenderAlp", out var renderAlphaRaw) &&
db.Chunks.TryGetValue("L$MetaProp", out var metaPropLinksRaw) &&
db.Chunks.TryGetValue("LD$MetaProp", out var metaPropLinkDataRaw))
{
@ -52,6 +53,7 @@ public class ObjectHierarchy
var txtRepl1s = (PropertyChunk<PropString>)txtRepl1Raw;
var txtRepl2s = (PropertyChunk<PropString>)txtRepl2Raw;
var txtRepl3s = (PropertyChunk<PropString>)txtRepl3Raw;
var renderAlpha = (PropertyChunk<PropFloat>)renderAlphaRaw;
var metaPropLinks = (LinkChunk)metaPropLinksRaw;
var metaPropLinkData = (LinkDataMetaProp)metaPropLinkDataRaw;
@ -64,6 +66,7 @@ public class ObjectHierarchy
gam.Chunks.TryGetValue("P$OTxtRepr1", out var gamTxtRepl1s) &&
gam.Chunks.TryGetValue("P$OTxtRepr2", out var gamTxtRepl2s) &&
gam.Chunks.TryGetValue("P$OTxtRepr3", out var gamTxtRepl3s) &&
gam.Chunks.TryGetValue("P$RenderAlp", out var gamRenderAlpha) &&
gam.Chunks.TryGetValue("L$MetaProp", out var gamLinks) &&
gam.Chunks.TryGetValue("LD$MetaProp", out var gamLinkData))
{
@ -74,6 +77,7 @@ public class ObjectHierarchy
txtRepl1s.properties.AddRange(((PropertyChunk<PropString>)gamTxtRepl1s).properties);
txtRepl2s.properties.AddRange(((PropertyChunk<PropString>)gamTxtRepl2s).properties);
txtRepl3s.properties.AddRange(((PropertyChunk<PropString>)gamTxtRepl3s).properties);
renderAlpha.properties.AddRange(((PropertyChunk<PropFloat>)gamRenderAlpha).properties);
metaPropLinks.links.AddRange(((LinkChunk)gamLinks).links);
metaPropLinkData.linkData.AddRange(((LinkDataMetaProp)gamLinkData).linkData);
}
@ -140,6 +144,10 @@ public class ObjectHierarchy
{
TryAddProp("P$OTxtRepr3", prop);
}
foreach (var prop in renderAlpha.properties)
{
TryAddProp("P$RenderAlp", prop);
}
}
}

View File

@ -253,6 +253,7 @@ public partial class Mission : Node3D
var txtRepl1 = objHierarchy.GetProperty<PropString>(id, "P$OTxtRepr1");
var txtRepl2 = objHierarchy.GetProperty<PropString>(id, "P$OTxtRepr2");
var txtRepl3 = objHierarchy.GetProperty<PropString>(id, "P$OTxtRepr3");
var renderAlpha = objHierarchy.GetProperty<PropFloat>(id, "P$RenderAlp");
var renderMode = renderTypeProp == null ? PropRenderType.Mode.Normal : renderTypeProp.mode;
if (modelNameProp == null || renderMode == PropRenderType.Mode.NotRendered)
@ -326,6 +327,11 @@ public partial class Mission : Node3D
}
}
if (renderAlpha != null)
{
model.Transparency = 1.0f - renderAlpha.value;
}
model.AddToGroup(OBJECT_MODELS_GROUP);
AddChild(model);