示例#1
0
 internal void ReadChildren(OptReader reader)
 {
     foreach (var child in reader.ReadChildren(this))
     {
         Children.Add(child);
     }
 }
示例#2
0
        internal LodCollection(OptReader reader) : base()
        {
            int lodChildCount      = reader.ReadInt32();
            int lodChildOffset     = reader.ReadInt32();
            int lodThresholdCount  = reader.ReadInt32();
            int lodThresholdOffset = reader.ReadInt32();

            // No idea why this would happen, but my understanding of this block is wrong if it does.
            if (lodChildCount != lodThresholdCount)
            {
                reader.logger?.Invoke(String.Format(CultureInfo.CurrentCulture, "Not the same number of LOD meshes ({0}) as LOD offsets ({1}) at {2:X}", lodChildCount, lodThresholdCount, reader.BaseStream.Position));
            }

            reader.Seek(lodChildOffset);
            ReadChildren(reader, lodChildCount, lodChildOffset);

            reader.Seek(lodThresholdOffset);
            MaxRenderDistance.Clear();
            for (int i = 0; i < lodChildCount; i++)
            {
                float distance = reader.ReadSingle();
                MaxRenderDistance.Add(distance);
                // A distance of 0 represents infinate draw distance
                // Converting to PositiveInfinity sorts it correctly.
                distance = distance == 0 ? float.PositiveInfinity : distance;
            }
        }
示例#3
0
 internal void ReadChildren(OptReader reader, int count, int jumpListOffset)
 {
     foreach (var child in reader.ReadChildren(count, jumpListOffset, this))
     {
         Children.Add(child);
     }
 }
示例#4
0
        internal NamedNodeCollection(OptReader reader, int nameOffset) : base()
        {
            var child_pp = reader.ReadInt32();

            reader.Seek(nameOffset);
            // arbitrary length null-terminated string
            Name = reader.ReadString(maxLen: 32);

            ReadChildren(reader, 1, child_pp);
        }
示例#5
0
 internal TexturePallet(OptReader reader)
 {
     // For some reason pallets 0-7 seem to be padding, 8-15 appear to be increasing brightness
     for (int i = 0; i < PalletCount; i++)
     {
         for (int j = 0; j < ColorCount; j++)
         {
             pallets[i, j] = reader.ReadUInt16();
         }
     }
 }
示例#6
0
        internal MeshVertices(OptReader reader) : base(reader)
        {
            // unknown zeros
            reader.ReadUnknownUseValue(0, this);
            reader.ReadUnknownUseValue(0, this);

            var count = reader.ReadInt32();

            reader.FollowPointerToNextByte(this);

            Vertices = reader.ReadVectorCollection <TVector3>(count);
        }
示例#7
0
        internal EngineGlow(OptReader reader) : base(reader)
        {
            reader.ReadUnknownUseValue(0, this);
            reader.ReadUnknownUseValue(0, this);
            reader.ReadUnknownUseValue(1, this);
            reader.FollowPointerToNextByte(this);
            reader.ReadUnknownUseValue(0, this);

            InnerColor = reader.ReadInt32();
            OuterColor = reader.ReadInt32();
            Center     = reader.ReadVector <TVector3>();

            // Cargo culting the order.
            Y = reader.ReadVector <TVector3>();
            Z = reader.ReadVector <TVector3>();
            X = reader.ReadVector <TVector3>();
        }
示例#8
0
        internal PartDescriptor(OptReader reader) : base(reader)
        {
            reader.ReadUnknownUseValue(0, this);
            reader.ReadUnknownUseValue(0, this);
            reader.ReadUnknownUseValue(1, this);

            reader.FollowPointerToNextByte(this);

            PartType      = (PartType)reader.ReadUInt32();
            ExplosionType = reader.ReadInt32();

            HitboxSpan        = reader.ReadVector <TVector3>();
            HitboxCenterPoint = reader.ReadVector <TVector3>();
            HitboxLowerCorner = reader.ReadVector <TVector3>();
            HitboxUpperCorner = reader.ReadVector <TVector3>();

            TargetGroupId = reader.ReadInt32();

            TargetPoint = reader.ReadVector <TVector3>();
        }
示例#9
0
 internal abstract object ReadCollection(OptReader reader, int count);
示例#10
0
 internal abstract object Read(OptReader reader);
示例#11
0
 internal SkinCollection(OptReader reader) : base()
 {
     ReadChildren(reader);
 }
示例#12
0
 internal NodeCollection(OptReader reader) : base(reader)
 {
     ReadChildren(reader);
 }
示例#13
0
文件: BaseNode.cs 项目: foonix/XWOpt
 internal BaseNode(OptReader opt)
 {
     OffsetInFile = opt.BaseStream.Position;
 }