diff --git a/project/code/LGS/Database/Chunks/Property.cs b/project/code/LGS/Database/Chunks/Property.cs index f384a6f..56aa7d8 100644 --- a/project/code/LGS/Database/Chunks/Property.cs +++ b/project/code/LGS/Database/Chunks/Property.cs @@ -140,4 +140,151 @@ public class PropRenderType : Property base.Read(reader); mode = (Mode)reader.ReadUInt32(); } -} \ No newline at end of file +} + +public class PropSlayResult : Property +{ + public enum Effect + { + Normal, NoEffect, Terminate, Destroy, + } + + public Effect effect; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + effect = (Effect)reader.ReadUInt32(); + } +} + +public class PropInventoryType : Property +{ + public enum Slot + { + Junk, Item, Weapon, + } + + public Slot type; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + type = (Slot)reader.ReadUInt32(); + } +} + +public class PropCollisionType : Property +{ + public bool Bounce; + public bool DestroyOnImpact; + public bool SlayOnImpact; + public bool NoCollisionSound; + public bool NoResult; + public bool FullCollisionSound; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + var flags = reader.ReadUInt32(); + Bounce = (flags & 0x1) != 0; + DestroyOnImpact = (flags & (0x1 << 1)) != 0; + SlayOnImpact = (flags & (0x1 << 2)) != 0; + NoCollisionSound = (flags & (0x1 << 3)) != 0; + NoResult = (flags & (0x1 << 4)) != 0; + FullCollisionSound = (flags & (0x1 << 5)) != 0; + } +} + +public class PropPosition : Property +{ + public Vector3 Location; + public Vector3 Rotation; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + Location = reader.ReadVec3(); + reader.ReadBytes(4); // Runtime Cell/Hint in editor + Rotation = reader.ReadRotation(); + } +} + +public class PropLight : Property +{ + public float Brightness; + public Vector3 Offset; + public float Radius; + public float InnerRadius; + public bool QuadLit; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + Brightness = reader.ReadSingle(); + Offset = reader.ReadVec3(); + Radius = reader.ReadSingle(); + QuadLit = reader.ReadBoolean(); + reader.ReadBytes(3); + InnerRadius = reader.ReadSingle(); + } +} + +public class PropLightColor : Property +{ + public float Hue; + public float Saturation; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + Hue = reader.ReadSingle(); + Saturation = reader.ReadSingle(); + } +} + +public class PropSpotlight : Property +{ + public float InnerAngle; + public float OuterAngle; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + InnerAngle = reader.ReadSingle(); + OuterAngle = reader.ReadSingle(); + reader.ReadBytes(4); // Z is unused + } +} + +public class PropSpotlightAndAmbient : Property +{ + public float InnerAngle; + public float OuterAngle; + public float SpotBrightness; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + InnerAngle = reader.ReadSingle(); + OuterAngle = reader.ReadSingle(); + SpotBrightness = reader.ReadSingle(); + } +} + +// TODO: Work out what this property actually does +public class PropLightBasedAlpha : Property +{ + public bool Enabled; + public Vector2 AlphaRange; + public Vector2 LightRange; + + public override void Read(BinaryReader reader) + { + base.Read(reader); + Enabled = reader.ReadBoolean(); + reader.ReadBytes(3); + AlphaRange = reader.ReadVec2(); + LightRange = new Vector2(reader.ReadInt32(), reader.ReadInt32()); + } +}