예제 #1
0
        private static Entity ReadSingleEntity(BitStream stream)
        {
            var buf = new byte[4];

            stream.Read(buf, 32);
            var uid = Util.MakeI32(buf);

            Debug.Assert((uid & 0x80000000) == 0);
            //if ((something & 0x80000000) == 0) {
            stream.Read(buf, 6);
            var count = buf[0];
            var chars = new char[64];
            stream.ReadPackedText(chars, count);
            var name = new string(chars, 0, count);
            //}

            var entity = new Entity { Uid = uid, Kind = name };
            entity.X = stream.ReadFloat(32, 8);
            entity.Y = stream.ReadFloat(32, 8);
            stream.Read(buf, 16);
            entity.Rotation = (float)(Util.MakeU16(buf) / 65536.0 * 2 * Math.PI);
            stream.Read(buf, 8);
            entity.Field28 = buf[0];
            stream.Read(buf, 1);
            entity.FlipHorz = buf[0] != 0;  // buf[0] != 0 ? 1 : -1
            stream.Read(buf, 1);
            entity.FlipVert = buf[0] != 0;  // buf[0] != 0 ? 1 : -1;
            stream.Read(buf, 1);
            entity.Field34 = buf[2] != 0;
            entity.Tags = Util.ReadKeyValueList(stream);
            Trace("entity {0} {1:N} {2:N} {3:X4} {4:X2} {5} {6} {7} {8}",
                name, entity.X, entity.Y, entity.Rotation, entity.Field28,
                entity.FlipHorz, entity.FlipVert, entity.Field34, Util.DumpKeyValueList(entity.Tags));
            return entity;
        }
예제 #2
0
 private static List<Prop> LoadProps(BitStream stream)
 {
     var ret = new List<Prop>();
     var buf = new byte[4];
     stream.Read(buf, 16);
     var count = Util.MakeU16(buf);
     for (var i = 0; i < count; ++i) {
         stream.Read(buf, 32);
         var something = Util.MakeI32(buf);
         if (something >= 0) {
             var prop = new Prop();
             prop.Field4 = something;
             stream.Read(buf, 8);
             prop.LayerGroup = buf[0];
             stream.Read(buf, 8);
             prop.LayerSub = buf[0];
             prop.X = stream.ReadFloat(28, 4);
             prop.Y = stream.ReadFloat(28, 4);
             stream.Read(buf, 16);
             prop.Rotation = (float) (Util.MakeU16(buf) / 65536.0 * 2 * Math.PI);
             stream.Read(buf, 1);
             prop.FlipHorz = buf[0] == 0;  // buf[0] != 0 ? 1 : -1;
             stream.Read(buf, 1);
             prop.FlipVert = buf[0] == 0;  // buf[0] != 0 ? 1 : -1;
             stream.Read(buf, 8);
             prop.PropSet = buf[0];
             stream.Read(buf, 12);
             prop.PropGroup = Util.MakeU16(buf);
             stream.Read(buf, 12);
             prop.PropIndex = Util.MakeU16(buf);
             stream.Read(buf, 8);
             prop.Palette = buf[0];
             Trace("prop {0:N} {1:N} {2:N} {3:X8} {4:X8} {5:X2} {6:X4} {7:X4} {8:X2} {9:X2} {10:X2}",
                 prop.X, prop.Y, prop.Rotation, prop.FlipHorz, prop.FlipVert, prop.PropSet, prop.PropGroup, prop.PropIndex, prop.Palette, prop.LayerGroup, prop.LayerSub);
             ret.Add(prop);
         } else
             throw new NotImplementedException();
     }
     return ret;
 }