thief-mission-viewer/project/code/LGS/Database/Chunks/Property.cs

125 lines
2.7 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.IO;
2024-08-25 10:53:50 +00:00
using System.Numerics;
using System.Text;
namespace KeepersCompound.LGS.Database.Chunks;
2024-08-25 12:07:49 +00:00
public class Property
{
2024-08-25 12:07:49 +00:00
public int objectId;
public int length;
2024-08-25 12:07:49 +00:00
public virtual void Read(BinaryReader reader)
{
objectId = reader.ReadInt32();
length = (int)reader.ReadUInt32();
}
2024-08-25 12:07:49 +00:00
}
2024-08-25 12:07:49 +00:00
public class PropertyChunk<T> : IChunk where T : Property, new()
{
public ChunkHeader Header { get; set; }
2024-08-25 12:07:49 +00:00
public List<T> properties;
public void ReadData(BinaryReader reader, DbFile.TableOfContents.Entry entry)
{
2024-08-25 12:07:49 +00:00
properties = new List<T>();
while (reader.BaseStream.Position < entry.Offset + entry.Size + 24)
{
2024-08-25 12:07:49 +00:00
var prop = new T();
prop.Read(reader);
properties.Add(prop);
}
}
2024-08-25 10:53:50 +00:00
public void WriteData(BinaryWriter writer)
{
throw new System.NotImplementedException();
}
}
2024-08-25 12:09:45 +00:00
public class PropGeneric : Property
{
public byte[] data;
public override void Read(BinaryReader reader)
{
base.Read(reader);
data = reader.ReadBytes(length);
}
}
2024-08-25 12:07:49 +00:00
public class PropModelName : Property
2024-08-25 10:53:50 +00:00
{
2024-08-25 12:07:49 +00:00
public string modelName;
2024-08-25 10:53:50 +00:00
2024-08-25 12:07:49 +00:00
public override void Read(BinaryReader reader)
2024-08-25 10:53:50 +00:00
{
2024-08-25 12:07:49 +00:00
base.Read(reader);
var tmpName = Encoding.UTF8.GetString(reader.ReadBytes(length)).Replace("\0", string.Empty);
modelName = tmpName[..Math.Min(length - 1, tmpName.Length)];
2024-08-25 10:53:50 +00:00
}
2024-08-25 12:07:49 +00:00
}
2024-08-25 10:53:50 +00:00
2024-08-25 12:07:49 +00:00
public class PropScale : Property
{
public Vector3 scale;
public override void Read(BinaryReader reader)
{
2024-08-25 12:07:49 +00:00
base.Read(reader);
scale = reader.ReadVec3();
}
2024-08-25 12:07:49 +00:00
}
2024-08-25 12:21:27 +00:00
public class PropRenderType : Property
{
public enum Mode
{
Normal,
NotRendered,
Unlit,
EditorOnly,
CoronaOnly,
}
public Mode mode;
public override void Read(BinaryReader reader)
{
base.Read(reader);
mode = (Mode)reader.ReadUInt32();
}
}
2024-08-31 08:34:18 +00:00
public class PropString : Property
{
2024-08-31 10:59:34 +00:00
public int stringLength;
2024-08-31 08:34:18 +00:00
public string value;
public override void Read(BinaryReader reader)
{
base.Read(reader);
2024-08-31 10:59:34 +00:00
stringLength = reader.ReadInt32();
var tmpName = Encoding.UTF8.GetString(reader.ReadBytes(stringLength));
var idx = tmpName.IndexOf('\0');
if (idx >= 0) tmpName = tmpName[..idx];
value = tmpName;
// var tmpName = Encoding.UTF8.GetString(reader.ReadBytes(length)).Replace("\0", string.Empty);
// value = tmpName[..Math.Min(length - 1, tmpName.Length)];
2024-08-31 08:34:18 +00:00
}
}
public class PropFloat : Property
{
public float value;
public override void Read(BinaryReader reader)
{
base.Read(reader);
value = reader.ReadSingle();
}
}