private void Load() { InterpCurveTracks = new List <InterpCurve>(); var props = CurrentLoadedExport.GetProperties(); foreach (var prop in props) { if (prop is StructProperty structProp) { if (Enum.TryParse(structProp.StructType, out CurveType _)) { InterpCurveTracks.Add(new InterpCurve(CurrentLoadedExport.FileRef, structProp)); } } } foreach (var interpCurve in InterpCurveTracks) { foreach (var curve in interpCurve.Curves) { curve.SaveChanges = Commit; } } TrackList.ItemsSource = InterpCurveTracks; graph.Paint(); }
private void StartBinaryScan() { BinaryInterpreter_TreeView.Items.Clear(); byte[] data = CurrentLoadedExport.Data; int binarystart = CurrentLoadedExport.propsEnd(); TreeViewItem topLevelTree = new TreeViewItem() { Header = $"{binarystart:X4} : {CurrentLoadedExport.ObjectName}", Tag = nodeType.Root, Name = "_0", IsExpanded = true }; BinaryInterpreter_TreeView.Items.Add(topLevelTree); switch (CurrentLoadedExport.ClassName) { case "WwiseStream": Scan_WwiseStream(topLevelTree, data, binarystart); break; case "WwiseEvent": Scan_WwiseEvent(topLevelTree, data, binarystart); break; } }
private void Commit() { var props = CurrentLoadedExport.GetProperties(); foreach (InterpCurve item in InterpCurveTracks) { props.AddOrReplaceProp(item.WriteProperties()); } CurrentLoadedExport.WriteProperties(props); }
private void Load() { InterpCurveTracks = new List <InterpCurve>(); var props = CurrentLoadedExport.GetProperties(); foreach (var prop in props) { if (prop is StructProperty structProp) { if (Enum.TryParse(structProp.StructType, out CurveType _)) { InterpCurveTracks.Add(new InterpCurve(CurrentLoadedExport.FileRef, structProp)); } } } foreach (var interpCurve in InterpCurveTracks) { foreach (var curve in interpCurve.Curves) { curve.SaveChanges = Commit; } } TrackList.ItemsSource = InterpCurveTracks; if (InterpCurveTracks.Count() > 0) { //TreeView in WPF can be really ugly sometimes //Select the first track and display it so the default view isn't empty //does not work yet - probably should ask SirC how this tool works var tvi = TrackList.ItemContainerGenerator.ContainerFromItem(InterpCurveTracks[0]) as TreeViewItem; if (tvi != null) { tvi.IsSelected = true; } } graph.Paint(); }
private void Scan_WwiseStream(TreeViewItem topLevelTree, byte[] data, int binaryStart) { /* * * count +4 * stream length in AFC +4 * stream length in AFC +4 (repeat) * stream offset in AFC +4 * */ try { int pos = data.Length - 16; int unk1 = BitConverter.ToInt32(data, pos); topLevelTree.Items.Add(new TreeViewItem() { Header = $"{pos:X4} Unknown: {unk1}", Name = "_" + pos.ToString(), }); pos += 4; int length = BitConverter.ToInt32(data, pos); topLevelTree.Items.Add(new TreeViewItem() { Header = $"{pos:X4} stream length: {length} (0x{length:X})", Name = "_" + pos.ToString(), Tag = nodeType.StructLeafInt }); pos += 4; length = BitConverter.ToInt32(data, pos); topLevelTree.Items.Add(new TreeViewItem() { Header = $"{ pos:X4} stream length: { length} (0x{ length:X})", Name = "_" + pos.ToString(), Tag = nodeType.StructLeafInt }); pos += 4; int offset = BitConverter.ToInt32(data, pos); topLevelTree.Items.Add(new TreeViewItem() { Header = $"{pos:X4} stream offset in file: {offset} (0x{offset:X})", Name = "_" + pos.ToString(), Tag = nodeType.StructLeafInt }); pos += 4; if (pos < data.Length && CurrentLoadedExport.GetProperty <NameProperty>("Filename") == null) { topLevelTree.Items.Add(new TreeViewItem() { Header = $"{pos:X4} Embedded sound data. Can be extracted with Soundplorer.", Name = "_" + pos.ToString(), Tag = nodeType.Unknown }); topLevelTree.Items.Add(new TreeViewItem() { Header = $"The stream offset to this data will be automatically updated when this file is saved.", Tag = nodeType.Unknown }); } } catch (Exception ex) { topLevelTree.Items.Add(new TreeViewItem() { Header = $"Error reading binary data: {ex}" }); } //topLevelTree.Expand(); //treeView1.Nodes[0].Expand(); }