/// <summary> /// Initializes a new instance of the <see cref="TimeLineItemViewModel"/> class. /// </summary> /// <param name="parent">The parent <see cref="TimeLineViewModel"/>.</param> public TimeLineItemViewModel(TimeLineViewModel parent) { _parent = parent; _inputItemViewModel = new InputItemViewModel(); InputItemViewModel.PropertyChanged += InputItemViewModel_PropertyChanged; _inputItemViewModel.WaitFrames = 1; }
/// <summary> /// Opens a new time line from file. /// </summary> /// <param name="filePath"></param> /// <param name="append"></param> public void OpenTimeLine(string filePath, bool append = false) { if (string.IsNullOrWhiteSpace(filePath)) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "SF4 Combo|*.cmb"; openFileDialog.RestoreDirectory = true; openFileDialog.ShowDialog(); if (openFileDialog.FileName == "") { return; } filePath = openFileDialog.FileName; } List <string> lines = File.ReadAllLines(filePath).ToList(); if (!append) { ClearTimeLine(); } if (lines.First().StartsWith("FTComboFile")) { lines.RemoveAt(0); foreach (String line in lines) { TimeLineItemViewModel timeLineItemViewModel = new TimeLineItemViewModel(this); InputItemViewModel inputItem = InputItemViewModel.Deserialize(line); timeLineItemViewModel.PlaySound = inputItem.PlaySound; timeLineItemViewModel.WaitFrames = inputItem.WaitFrames; timeLineItemViewModel.Direction = inputItem.Direction; timeLineItemViewModel.Light_Punch = inputItem.Light_Punch; timeLineItemViewModel.Medium_Punch = inputItem.Medium_Punch; timeLineItemViewModel.Hard_Punch = inputItem.Hard_Punch; timeLineItemViewModel.Light_Kick = inputItem.Light_Kick; timeLineItemViewModel.Medium_Kick = inputItem.Medium_Kick; timeLineItemViewModel.Hard_Kick = inputItem.Hard_Kick; TimeLineItems.Add(timeLineItemViewModel); } } else { OldDeserialize(lines); } NotifyOfPropertyChange(() => CanRemoveItem); }
/// <summary> /// The get commands. /// </summary> /// <param name="commands"> /// The commands. /// </param> /// <returns> /// The <see cref="InputItemViewModel"/>. /// </returns> private static InputItemViewModel GetCommands(string commands) { InputItemViewModel input = new InputItemViewModel { Light_Punch = commands.Contains("LP"), Medium_Punch = commands.Contains("MP"), Hard_Punch = commands.Contains("HP"), Light_Kick = commands.Contains("LK"), Medium_Kick = commands.Contains("MK"), Hard_Kick = commands.Contains("HK") }; if (commands.Contains("UP, FORWARD")) { input.Direction = InputCommandModel.DirectionStateEnum.UpForward; } else if (commands.Contains("UP, BACK")) { input.Direction = InputCommandModel.DirectionStateEnum.UpBack; } else if (commands.Contains("DOWN, FORWARD")) { input.Direction = InputCommandModel.DirectionStateEnum.DownForward; } else if (commands.Contains("DOWN, BACK")) { input.Direction = InputCommandModel.DirectionStateEnum.DownBack; } else if (commands.Contains("FORWARD")) { input.Direction = InputCommandModel.DirectionStateEnum.Forward; } else if (commands.Contains("BACK")) { input.Direction = InputCommandModel.DirectionStateEnum.Back; } else if (commands.Contains("UP")) { input.Direction = InputCommandModel.DirectionStateEnum.Up; } else if (commands.Contains("DOWN")) { input.Direction = InputCommandModel.DirectionStateEnum.Down; } else { input.Direction = InputCommandModel.DirectionStateEnum.Neutral; } return(input); }
/// <summary> /// Initializes a new instance of the <see cref="TimeLineItemViewModel"/> class. /// </summary> public TimeLineItemViewModel() { _inputItemViewModel = new InputItemViewModel(); _inputItemViewModel.WaitFrames = 1; }
public void OldDeserialize(List <string> lines) { foreach (String line in lines) { List <Input> inputsOnHold = new List <Input>(); String[] tokens = line.Split('#'); InputItemModel item = new InputItemModel(); int numInputs; Input[] inputs; string inputType = tokens[0].ToString().ToUpper(); switch (inputType) { case "WAIT": // Only hold inputs needed item = new InputItemModel(); item.Inputs = inputsOnHold.ToArray(); break; case "PRESS": // Add hold inputs to given inputs numInputs = int.Parse(tokens[2]); inputs = new Input[numInputs]; for (int i = 0; i < numInputs; i++) { inputs[i] = InputItemModel.ParseInput(tokens[3 + i]); } item = new InputItemModel(); item.Inputs = inputsOnHold.Concat(inputs.ToList()).Distinct().ToArray(); break; case "HOLD": numInputs = int.Parse(tokens[2]); for (int i = 0; i < numInputs; i++) { inputsOnHold.Add(InputItemModel.ParseInput(tokens[3 + i])); } item = new InputItemModel(); item.Inputs = inputsOnHold.Distinct().ToArray(); break; case "RELEASE": // First remove released inputs from on hold list numInputs = int.Parse(tokens[2]); inputs = new Input[numInputs]; for (int i = 0; i < numInputs; i++) { inputsOnHold.RemoveAll((x) => x == InputItemModel.ParseInput(tokens[3 + i])); } // Add remaining holds item = new InputItemModel(); item.Inputs = inputsOnHold.ToArray(); break; default: throw new FormatException("Failed to deserialize TimelineItem, wrong string format: " + line); } item.PlaySound = Boolean.Parse(tokens[1]); item.Frames = int.Parse(tokens[2].ToString()); //Setup TimeLineItemViewModel InputItemViewModel result = new InputItemViewModel(); result.InputItem = item; result.Index = -1; TimeLineItemViewModel timeLineItemViewModel = new TimeLineItemViewModel(this); timeLineItemViewModel.PlaySound = result.PlaySound; timeLineItemViewModel.WaitFrames = result.WaitFrames; timeLineItemViewModel.Direction = result.Direction; timeLineItemViewModel.Light_Punch = result.Light_Punch; timeLineItemViewModel.Medium_Punch = result.Medium_Punch; timeLineItemViewModel.Hard_Punch = result.Hard_Punch; timeLineItemViewModel.Light_Kick = result.Light_Kick; timeLineItemViewModel.Medium_Kick = result.Medium_Kick; timeLineItemViewModel.Hard_Kick = result.Hard_Kick; TimeLineItems.Add(timeLineItemViewModel); } }