/// <inheritdoc /> /// <summary> /// </summary> /// <param name="gameTime"></param> public override void Update(GameTime gameTime) { // Select all input if (KeyboardManager.CurrentState.IsKeyDown(Keys.LeftControl) || KeyboardManager.CurrentState.IsKeyDown(Keys.RightControl)) { if (KeyboardManager.IsUniqueKeyPress(Keys.A)) { SelectedVelocities.Clear(); SelectedVelocities.AddRange(WorkingMap.SliderVelocities); if (SelectedVelocities.Count >= 1 || SelectedVelocities.Count == 0) { TextTime = ""; TextMultiplier = $""; } else { SetInputTextToFirstSelected(); } } } base.Update(gameTime); }
/// <summary> /// </summary> /// <param name="sv"></param> /// <param name="isSelected"></param> private void OnSvButtonClicked(SliderVelocityInfo sv, bool isSelected) { var t = TimeSpan.FromMilliseconds(sv.StartTime); if (!ImGui.Button($"{t.Minutes:00}:{t.Seconds:00}:{t.Milliseconds:000}", new Vector2())) { return; } // User is holding control down, so add this SV to the selected ones if (KeyboardManager.CurrentState.IsKeyDown(Keys.LeftControl) || KeyboardManager.CurrentState.IsKeyDown(Keys.LeftControl)) { if (isSelected) { if (SelectedVelocities.Count != 1) { SelectedVelocities.Remove(sv); } if (SelectedVelocities.Count == 1) { SetInputTextToFirstSelected(); } } else { SelectedVelocities.Add(sv); if (SelectedVelocities.Count == 1) { SetInputTextToFirstSelected(); } else { TextTime = ""; TextMultiplier = ""; } } } // Clicking the currently selected button seeks the user to that point in time else { if (isSelected && !AudioEngine.Track.IsDisposed) { AudioEngine.Track.Seek(sv.StartTime); var game = GameBase.Game as QuaverGame; var screen = game?.CurrentScreen as EditorScreen; screen?.SetHitSoundObjectIndex(); } SelectedVelocities.Clear(); SelectedVelocities.Add(sv); TextTime = sv.StartTime.ToString(CultureInfo.InvariantCulture); TextMultiplier = $"{sv.Multiplier:0.00}"; } }
/// <summary> /// </summary> private void AddSvTable() { ImGui.BeginChild("SV Area"); ImGui.Columns(2); ImGui.SetColumnWidth(0, 105); if (NeedsToScroll && SelectedVelocities.Count != 0 && WorkingMap.SliderVelocities.Count == 0) { ImGui.SetScrollHereY(-0.05f); NeedsToScroll = false; } foreach (var sv in WorkingMap.SliderVelocities) { var isSelected = SelectedVelocities.Contains(sv); if (!isSelected) { ImGui.PushStyleColor(ImGuiCol.Button, new Vector4(100, 100, 100, 0)); } if (NeedsToScroll && SelectedVelocities.Count != 0 && SelectedVelocities.First() == sv) { ImGui.SetScrollHereY(-0.05f); NeedsToScroll = false; } OnSvButtonClicked(sv, isSelected); if (!isSelected) { ImGui.PopStyleColor(); } ImGui.NextColumn(); ImGui.Text($"{sv.Multiplier:0.00}x"); ImGui.NextColumn(); } ImGui.EndChild(); }
/// <summary> /// </summary> private void SelectClosestVelocity() { if (WorkingMap.SliderVelocities.Count == 0) { return; } // Find the closest SV point so it can be selected upon opening. SliderVelocityInfo closestVelocity = null; var minDiff = double.MaxValue; WorkingMap.SliderVelocities.ForEach(x => { var diff = Math.Abs(AudioEngine.Track.Time - x.StartTime); if (!(diff < minDiff)) { return; } minDiff = diff; closestVelocity = x; }); if (closestVelocity == null) { return; } SelectedVelocities.Clear(); SelectedVelocities.Add(closestVelocity); NeedsToScroll = true; TextTime = closestVelocity.StartTime.ToString(CultureInfo.InvariantCulture); TextMultiplier = $"{closestVelocity.Multiplier:0.00}"; }
/// <summary> /// </summary> private void SetInputTextToFirstSelected() { TextTime = SelectedVelocities.First().StartTime.ToString(CultureInfo.InvariantCulture); TextMultiplier = $"{SelectedVelocities.First().Multiplier:0.00}"; }
/// <summary> /// </summary> private void HandleAddRemoveButtons() { if (ImGui.Button("Add")) { var sv = new SliderVelocityInfo() { StartTime = (int)AudioEngine.Track.Time, Multiplier = 1.0f }; var game = GameBase.Game as QuaverGame; var screen = game?.CurrentScreen as EditorScreen; screen?.Ruleset.ActionManager.Perform(new EditorActionAddSliderVelocity(WorkingMap, sv)); SelectedVelocities.Clear(); SelectedVelocities.Add(sv); NeedsToScroll = true; TextTime = sv.StartTime.ToString(CultureInfo.InvariantCulture); TextMultiplier = $"{sv.Multiplier:0.00}"; } ImGui.SameLine(); if (ImGui.Button("Remove")) { if (SelectedVelocities.Count == 0) { return; } var game = GameBase.Game as QuaverGame; var screen = game?.CurrentScreen as EditorScreen; var lastSv = SelectedVelocities.Last(); screen?.Ruleset.ActionManager.Perform(new EditorActionRemoveSliderVelocities(WorkingMap, new List <SliderVelocityInfo>(SelectedVelocities))); SelectedVelocities.Clear(); if (WorkingMap.SliderVelocities.Count != 0) { var sv = WorkingMap.SliderVelocities.FindLast(x => x.StartTime <= lastSv.StartTime); if (sv != null) { TextTime = sv.StartTime.ToString(CultureInfo.InvariantCulture); TextMultiplier = $"{sv.Multiplier:0.00}"; SelectedVelocities.Add(sv); } else { TextTime = ""; TextMultiplier = $""; } } else { TextTime = ""; TextMultiplier = $""; } NeedsToScroll = true; } }