// ========== FROM HERE THIS IS TWx IN/OUTPUT public bool ReadFromTWx(string path, string name) { ScopeVal = 1; try { FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read); StreamReader reader = new StreamReader(stream); string jsonText = reader.ReadToEnd(); JsonData jsonData = JsonMapper.ToObject(jsonText); TWxData data = JsonMapper.ToObject <TWxData>(jsonText); NameField.text = name; ArtistField.text = data.metadata.artist; MapperField.text = data.metadata.mapper; LevelSelect(data.metadata.level); DensityVal = data.metadata.density; DensityText.text = DensityVal.ToString(); OffsetField.text = data.metadata.offset.ToString(); LineSelect(int.Parse(path.Substring(path.Length - 1))); int curBlockIndex = -1, curBPMQueue = -1, curBeatsQueue = -1; for (int i = 0; i < data.notes.Length; i++) { while (data.notes[i].YPos / 192 > curBlockIndex) { curBlockIndex++; if ((curBPMQueue + 1 < data.metadata.bpmQueue.Length && data.metadata.bpmQueue[curBPMQueue + 1] <= curBlockIndex)) { curBPMQueue++; ChangeBPMWithValue(data.metadata.bpm[curBPMQueue]); } if (data.metadata.beats == null) { BeatVal = 4; } else if ((curBeatsQueue + 1 < data.metadata.beatsQueue.Length && data.metadata.beatsQueue[curBeatsQueue + 1] <= curBlockIndex)) { curBeatsQueue++; BeatVal = data.metadata.beats[curBeatsQueue]; } AddBlock(); } Blocks[curBlockIndex].CreateNote(data.notes[i]); } SelectedNote.Clear(); reader.Close(); stream.Close(); return(true); } catch (Exception e) { Debug.Log(e.Message + Environment.NewLine + e.StackTrace); return(false); } }
public void WriteToTWx() { if (MaxLine.Equals(0)) { MessageBox.Show(LocaleManager.instance.GetLocaleText("creator_notenoughinfo"), LocaleManager.instance.GetLocaleText("creator_error_nolineval"), MessageBoxButton.OK); return; } if (LevelVal < 1) { MessageBox.Show(LocaleManager.instance.GetLocaleText("creator_notenoughinfo"), LocaleManager.instance.GetLocaleText("creator_error_nolevelval"), MessageBoxButton.OK); return; } if (NameField.text.Equals("")) { MessageBox.Show(LocaleManager.instance.GetLocaleText("creator_notenoughinfo"), LocaleManager.instance.GetLocaleText("creator_error_nosongname"), MessageBoxButton.OK); return; } if (!OffsetField.text.Equals("") && !int.TryParse(OffsetField.text, out Offset)) { MessageBox.Show(LocaleManager.instance.GetLocaleText("creator_notenoughinfo"), LocaleManager.instance.GetLocaleText("creator_error_wrongoffset"), MessageBoxButton.OK); return; } TWxMetadata metadata = new TWxMetadata(); metadata.level = LevelVal; metadata.artist = ArtistField.text; metadata.mapper = MapperField.text; metadata.density = DensityVal; metadata.offset = Offset; int noteID = 1; double absTime = Offset / 1000f; List <TWxNote> NoteBasket = new List <TWxNote>(); List <int> BPMs = new List <int>(), BPMQueues = new List <int>(), Beats = new List <int>(), BeatsQueues = new List <int>(); for (int i = 0; i < Blocks.Count; i++) { double blockTime = (60f * Blocks[i].Beats) / Blocks[i].BPM; if (i.Equals(0) || (!i.Equals(0) && Blocks[i].BPM != BPMs[BPMs.Count - 1])) { BPMs.Add(Blocks[i].BPM); BPMQueues.Add(Blocks[i].Index); } if (i.Equals(0) || (!i.Equals(0) && Blocks[i].Beats != Beats[Beats.Count - 1])) { Beats.Add(Blocks[i].Beats); BeatsQueues.Add(Blocks[i].Index); } for (int j = 0; j < Blocks[i].GetNoteArray().Length; j++) { CreatorNote baseNote = Blocks[i].GetNoteArray()[j]; TWxNote note = new TWxNote(); baseNote.FinalIndex = noteID; List <int> prevDatas = new List <int>(); if (baseNote.PreviousNotes.Count > 0) { for (int k = 0; k < baseNote.PreviousNotes.Count; k++) { prevDatas.Add(baseNote.PreviousNotes[k].FinalIndex); } } int[] prevArr; if (prevDatas.Count.Equals(0)) { prevArr = new int[] { 0 }; } else { prevArr = prevDatas.ToArray(); } note.SetValue(baseNote.YPos + 192 * baseNote.ParentBlock.Index, noteID, baseNote.Size, new byte[4] { baseNote.NoteColor.r, baseNote.NoteColor.g, baseNote.NoteColor.b, 255 }, baseNote.Type, baseNote.Flick, (float)absTime + ((float)blockTime * (baseNote.YPos / 192f)), baseNote.Speed, baseNote.StartPoint, baseNote.EndPoint, prevArr); NoteBasket.Add(note); noteID++; } absTime += blockTime; } metadata.bpm = BPMs.ToArray(); metadata.bpmQueue = BPMQueues.ToArray(); metadata.beats = Beats.ToArray(); metadata.beatsQueue = BeatsQueues.ToArray(); TWxData data = new TWxData(); data.metadata = metadata; data.notes = NoteBasket.ToArray(); string jsonText = JsonMapper.ToJson(data); FileStream stream = new FileStream(GamePath.CreatorPath() + NameField.text + ".tw" + MaxLine.ToString(), FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(stream); writer.Write(jsonText); writer.Close(); stream.Close(); MessageBox.Show(LocaleManager.instance.GetLocaleText("creator_saved"), LocaleManager.instance.GetLocaleText("creator_saveddesc") + NameField.text + ".tw" + MaxLine.ToString(), MessageBoxButton.OK); }