Example #1
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     Portal    = bsr.ReadEHandle();
     Portalled = bsr.ReadEHandle();
     bsr.ReadVector3(out NewPosition);
     bsr.ReadVector3(out NewAngles);
 }
Example #2
0
    static void TestBitStream()
    {
        BitStreamWriter writer = new BitStreamWriter(2);
        BitStreamReader reader = new BitStreamReader();

        // Resize, basic int
        writer.WriteInt32(0x12345678);
        writer.WriteInt8(39);
        writer.WriteInt(2, 2);
        writer.WriteInt(87, 7);
        writer.WriteInt(33, 6);
        reader.SetBytes(writer.DumpBytes());
        Assert.IsTrue(reader.ReadInt32() == 0x12345678);
        Assert.IsTrue(reader.ReadInt8() == 39);
        Assert.IsTrue(reader.ReadInt(2) == 2);
        Assert.IsTrue(reader.ReadInt(7) == 87);
        Assert.IsTrue(reader.ReadInt(6) == 33);

        // Concatnat bits
        // 1, 0000010 11000011, 1
        // should be 00000101 10000110 00000011
        writer.WriteBool(true);
        writer.WriteInt16(707);
        writer.WriteBool(true);
        var data = writer.DumpBytes();

        Assert.IsTrue(data.Length == 3);
        Assert.IsTrue(data[0] == 0x05);
        Assert.IsTrue(data[1] == 0x86);
        Assert.IsTrue(data[2] == 0x03);
        reader.SetBytes(data);
        Assert.IsTrue(reader.ReadBool());
        Assert.IsTrue(reader.ReadInt16() == 707);
        Assert.IsTrue(reader.ReadBool());

        // float
        writer.WriteBool(false);
        writer.WriteFloat(12345.012345f);
        writer.WriteBool(true);
        reader.SetBytes(writer.DumpBytes());
        Assert.IsFalse(reader.ReadBool());
        Assert.IsTrue(reader.ReadFloat() == 12345.012345f);
        Assert.IsTrue(reader.ReadBool());

        // vector3, quaternion
        Vector3    vec = new Vector3(-0.51231f, 0.113123f, 1.1231123f);
        Quaternion q   = new Quaternion(-0.123f, 0.345f, 0.678f, -0.23f);

        q.Normalize();
        writer.WriteQuaternionRot(q);
        writer.WriteBool(false);
        writer.WriteVector3(Vector3.one);
        writer.WriteVector3(vec);
        reader.SetBytes(writer.DumpBytes());
        Assert.IsTrue(IsApprox(reader.ReadQuaternionRot(), q));
        Assert.IsFalse(reader.ReadBool());
        Assert.IsTrue(reader.ReadVector3() == Vector3.one);
        Assert.IsTrue(reader.ReadVector3() == vec);
    }
Example #3
0
 protected override void Parse(ref BitStreamReader bsr)
 {
     Flags   = (InterpFlags)bsr.ReadUInt();
     _floats = new Vector3[6];
     for (int i = 0; i < _floats.Length; i++)
     {
         bsr.ReadVector3(out _floats[i]);
     }
 }
Example #4
0
        protected override void Parse(ref BitStreamReader bsr)
        {
            Armor       = bsr.ReadByte();
            DamageTaken = bsr.ReadByte();
            BitsDamage  = bsr.ReadSInt();
            bsr.ReadVector3(out VecFrom);

            /*VecFrom = new Vector3 {       old engine?
             *      X = bsr.ReadCoord(),
             *      Y = bsr.ReadCoord(),
             *      Z = bsr.ReadCoord()
             * };*/
        }
        protected override void Parse(ref BitStreamReader bsr)
        {
            PaintType = (PaintType)bsr.ReadByte();
            EHandle   = bsr.ReadEHandle();
            UnkHf1    = bsr.ReadFloat();
            UnkHf2    = bsr.ReadFloat();
            byte len = bsr.ReadByte();

            bsr.ReadVector3(out Center);
            if (bsr.BitsRemaining % 48 != 0)
            {
                throw new ParseException($"{GetType().Name} doesn't have the right number of bits left, " +
                                         $"expected a multiple of 48 but got {bsr.BitsRemaining}");
            }
            Positions = new Vector3[len];
            for (int i = 0; i < len; i++)
            {
                Positions[i] = Center + new Vector3(bsr.ReadSShort(), bsr.ReadSShort(), bsr.ReadSShort());
            }
        }
 protected override void Parse(ref BitStreamReader bsr)
 {
     Ent       = bsr.ReadEHandle();
     PaintType = (PaintType)bsr.ReadByte();
     bsr.ReadVector3(out Pos);
 }