Пример #1
0
        public void ReverseEntry1()
        {
            var maxIndex = Entry1List.Count - 1;

            Entry1List.Reverse();

            short ReverseChildIndex(short child)
            {
                if (child != -1)
                {
                    child = Convert.ToInt16(maxIndex - child);
                }
                return(child);
            }

            foreach (var one in Entry1List)
            {
                one.Child1 = ReverseChildIndex(one.Child1);
                one.Child2 = ReverseChildIndex(one.Child2);
                one.Child3 = ReverseChildIndex(one.Child3);
                one.Child4 = ReverseChildIndex(one.Child4);
                one.Child5 = ReverseChildIndex(one.Child5);
                one.Child6 = ReverseChildIndex(one.Child6);
                one.Child7 = ReverseChildIndex(one.Child7);
                one.Child8 = ReverseChildIndex(one.Child8);
            }
        }
Пример #2
0
        public Entry1 CompleteAndAdd(Entry1 it)
        {
            Entry1List.Add(it);

            it.BoundingBox = Enumerable.Range(
                it.Entry2Index,
                it.Entry2LastIndex - it.Entry2Index
                )
                             .Select(index => Entry2List[index].BoundingBox)
                             .Concat(SelectBoundingBoxList(it))
                             .MergeAll();

            return(it);
        }
        internal override void Read(ResourceReader reader)
        {
            Field140 = reader.ReadInt32();
            Field13C = reader.ReadSingle();
            Field138 = reader.ReadSingle();
            Field134 = reader.ReadSingle();
            Field130 = reader.ReadSingle();

            int entry1Count = reader.ReadInt32(); // r28
            int entry2Count = reader.ReadInt32(); // r21
            int entry3Count = reader.ReadInt32(); // r20

            for (int i = 0; i < entry1Count; i++)
            {
                var entry = new ChunkType000100F9Entry1();
                entry.Field34 = reader.ReadSingle();
                entry.Field38 = reader.ReadSingle();

                if (Version > 0x1104120)
                {
                    entry.Field3C = reader.ReadSingle();
                    entry.Field40 = reader.ReadSingle();
                }
                else
                {
                    entry.Field38 += 20.0f;
                    entry.Field3C  = 0;
                    entry.Field40  = 1.0f;
                }

                if (reader.ReadBoolean())
                {
                    entry.NodeName = reader.ReadStringWithHash(Version);
                }
                else
                {
                    entry.Field10 = reader.ReadSingle();
                    entry.Field08 = reader.ReadSingle();
                    entry.Field04 = reader.ReadSingle();
                }

                Entry1List.Add(entry);
            }

            for (int i = 0; i < entry2Count; i++)
            {
                var entry = new ChunkType000100F9Entry2();

                entry.Field94 = reader.ReadInt16();

                if (entry.Field94 == 0)
                {
                    entry.Field84 = reader.ReadSingle();
                }
                else if (entry.Field94 == 1)
                {
                    entry.Field84 = reader.ReadSingle();
                    entry.Field88 = reader.ReadSingle();
                }

                entry.Field8C = reader.ReadMatrix4x4();
                if (reader.ReadBoolean())
                {
                    entry.NodeName = reader.ReadStringWithHash(Version);
                }

                Entry2List.Add(entry);
            }

            // r24 = 0x1104120

            for (int i = 0; i < entry3Count; i++)
            {
                var entry = new ChunkType000100F9Entry3();
                entry.Field00 = reader.ReadSingle();
                entry.Field04 = reader.ReadSingle();

                if (Version <= 0x1104120)
                {
                    entry.Field0C = reader.ReadInt16();
                    entry.Field0E = reader.ReadInt16();
                }
                else
                {
                    entry.Field08 = reader.ReadSingle();
                    entry.Field0C = reader.ReadInt16();
                    entry.Field0E = reader.ReadInt16();
                }

                Entry3List.Add(entry);
            }
        }