public BCSV GenerateBCSV(List <Triangle> triangles)
        {
            var entries = GetCollisionEntries();
            var col     = RemoveDuplicateEntries(entries);

            KclLibrary.DebugLogger.WriteLine("Generating BCSV...");

            var bcsv = new BCSV();

            bcsv.IsBigEndian = false;
            bcsv.Fields.Add(new BCSV.Field("Sound_code", BCSV.FieldType.Int32, 0, 0x7F, 0));
            bcsv.Fields.Add(new BCSV.Field("Floor_code", BCSV.FieldType.Int32, 0, 0x1F80, 7));
            bcsv.Fields.Add(new BCSV.Field(51726534, BCSV.FieldType.Int32, 0, 0x7E000, 13));
            bcsv.Fields.Add(new BCSV.Field("Wall_code", BCSV.FieldType.Int32, 0, 0x780000, 19));
            bcsv.Fields.Add(new BCSV.Field("Camera_through", BCSV.FieldType.Int32, 0, 0x800000, 23));

            foreach (var tri in triangles)
            {
                var entry  = col[tri.Attribute];
                var record = new BCSV.Record(new object[5]
                {
                    (uint)CreateEntry(SoundCodes, entry.SoundCode),
                    (uint)CreateEntry(FloorCodes, entry.FloorCode),
                    (uint)entry.UnknownCode,
                    (uint)CreateEntry(WallCodes, entry.WallCode),
                    (uint)(entry.CameraThrough ? 1 : 0),
                });
                tri.Attribute = (ushort)bcsv.Records.Count;
                bcsv.Records.Add(record);
            }

            return(bcsv);
        }
Exemplo n.º 2
0
        public BCSV GenerateBCSV(List <Triangle> triangles)
        {
            var entries = GetCollisionEntries();
            var col     = RemoveDuplicateEntries(entries);

            KclLibrary.DebugLogger.WriteLine("Generating BCSV...");

            var bcsv = new BCSV();

            bcsv.IsBigEndian = true;
            bcsv.Fields.Add(new BCSV.Field("camera_id", BCSV.FieldType.Int32, 0, 0x000000FF, 0));
            bcsv.Fields.Add(new BCSV.Field("Sound_code", BCSV.FieldType.Int32, 0, 0x00007F00, 8));
            bcsv.Fields.Add(new BCSV.Field("Floor_code", BCSV.FieldType.Int32, 0, 0x01F8000, 15));
            bcsv.Fields.Add(new BCSV.Field("Wall_code", BCSV.FieldType.Int32, 0, 0x01E00000, 21));
            bcsv.Fields.Add(new BCSV.Field("Camera_through", BCSV.FieldType.Int32, 0, 0x02000000, 25));

            foreach (var tri in triangles)
            {
                var entry  = col[tri.Attribute];
                var record = new BCSV.Record(new object[5]
                {
                    (uint)(entry.CameraIndex == -1 ? 255 : entry.CameraIndex),
                    (uint)CreateEntry(SoundCodes, entry.SoundCode),
                    (uint)CreateEntry(FloorCodes, entry.FloorCode),
                    (uint)CreateEntry(WallCodes, entry.WallCode),
                    (uint)(entry.CameraThrough ? 1 : 0),
                });
                tri.Attribute = (ushort)bcsv.Records.Count;
                bcsv.Records.Add(record);
            }

            return(bcsv);
        }