Beispiel #1
0
        public override void Read(Iff iff,System.IO.Stream stream)
        {
            using (var io = IoBuffer.FromStream(stream,ByteOrder.LITTLE_ENDIAN)){
                var zero      = io.ReadUInt32();
                var version   = io.ReadUInt32();
                var slotMagic = io.ReadBytes(4);
                var numSlots  = io.ReadUInt32();

                Slots = new Dictionary <ushort,List <SLOTItem> >();

                /** The span for version 4 is 34.  The span for version 6 is 54.  The span for version 7 is 58.  The span for version 8 is 62.  The span for version 9 is 66.  The span for version 10 is 70.  **/
                for (var i = 0; i < numSlots; i++)
                {
                    io.Mark();

                    var item = new SLOTItem();
                    item.Type   = io.ReadUInt16();
                    item.Offset = new Vector3(
                        io.ReadFloat(),
                        io.ReadFloat(),
                        io.ReadFloat()
                        );

                    var standing       = io.ReadInt32();
                    var sitting        = io.ReadInt32();
                    var ground         = io.ReadInt32();
                    var rsflags        = io.ReadInt32();
                    var snaptargetslot = io.ReadInt32();
                    var minproximity   = io.ReadInt32();

                    item.Standing       = standing;
                    item.Sitting        = sitting;
                    item.Ground         = ground;
                    item.Rsflags        = (SLOTFlags)rsflags;
                    item.SnapTargetSlot = snaptargetslot;
                    item.MinProximity   = minproximity;

                    if (version >= 6)
                    {
                        var maxproximity     = io.ReadInt32();
                        var optimalproximity = io.ReadInt32();
                        var i9  = io.ReadInt32();
                        var i10 = io.ReadInt32();


                        item.MaxProximity     = maxproximity;
                        item.OptimalProximity = optimalproximity;
                    }

                    if (version >= 7)
                    {
                        item.Gradient = io.ReadFloat();
                    }

                    if (version >= 8)
                    {
                        item.Height = io.ReadInt32();
                    }

                    if (version >= 9)
                    {
                        item.Facing = io.ReadInt32();
                    }

                    if (version >= 10)
                    {
                        item.Resolution = io.ReadInt32();
                    }

                    if (!Slots.ContainsKey(item.Type))
                    {
                        Slots.Add(item.Type,new List <SLOTItem>());
                    }
                    Slots[item.Type].Add(item);
                }
            }
        }
Beispiel #2
0
        public override void Read(Iff iff, System.IO.Stream stream)
        {
            using (var io = IoBuffer.FromStream(stream, ByteOrder.LITTLE_ENDIAN)){
                var zero = io.ReadUInt32();
                var version = io.ReadUInt32();
                var slotMagic = io.ReadBytes(4);
                var numSlots = io.ReadUInt32();

                Slots = new Dictionary<ushort, List<SLOTItem>>();

                /** The span for version 4 is 34.
                 * The span for version 6 is 54.
                 * The span for version 7 is 58.
                 * The span for version 8 is 62.
                 * The span for version 9 is 66.
                 * The span for version 10 is 70.  **/
                for (var i = 0; i < numSlots; i++){
                    io.Mark();

                    var item = new SLOTItem();
                    item.Type = io.ReadUInt16();
                    item.Offset = new Vector3(
                        io.ReadFloat(),
                        io.ReadFloat(),
                        io.ReadFloat()
                    );

                    var standing = io.ReadInt32();
                    var sitting = io.ReadInt32();
                    var ground = io.ReadInt32();
                    var rsflags = io.ReadInt32();
                    var snaptargetslot = io.ReadInt32();
                    var minproximity = io.ReadInt32();

                    //bonuses (0 means never)
                    item.Standing = standing; //score bonus for standing destinations
                    item.Sitting = sitting; //score bonus for sitting destinations
                    item.Ground = ground; //score bonus for sitting on ground

                    item.Rsflags = (SLOTFlags)rsflags;
                    item.SnapTargetSlot = snaptargetslot;
                    item.MinProximity = minproximity;

                    if (version >= 6)
                    {
                        var maxproximity = io.ReadInt32();
                        var optimalproximity = io.ReadInt32();
                        var i9 = io.ReadInt32();
                        var i10 = io.ReadInt32();

                        item.MaxProximity = maxproximity;
                        item.OptimalProximity = optimalproximity;
                    }

                    if (version >= 7) item.Gradient = io.ReadFloat();

                    if (version >= 8) item.Height = io.ReadInt32();

                    if (version >= 9) item.Facing = (SLOTFacing)io.ReadInt32();

                    if (version >= 10) item.Resolution = io.ReadInt32();

                    if (!Slots.ContainsKey(item.Type)) Slots.Add(item.Type, new List<SLOTItem>());
                    Slots[item.Type].Add(item);
                }
            }
        }