private void StartDragGridTargetAction(TargetIcon icon) { isDraggingNotesOnGrid = true; startGridMovePos = icon.data.position; gridTargetMoveIntents = new List <TargetGridMoveIntent>(); timeline.selectedNotes.ForEach(target => { var intent = new TargetGridMoveIntent(); intent.target = target.data; intent.startingPosition = new Vector2(target.data.x, target.data.y); gridTargetMoveIntents.Add(intent); }); }
// Capture raw input and set the state of frame intents private void CaptureInput() { // TODO: Move these intents to a new input manager bool primaryModifierHeld = false; bool secondaryModifierHeld = false; // all intents are reset every frame frameIntentSelect = false; frameIntentDragStart = false; frameIntentDragging = false; frameIntentDragEnd = false; frameIntentCut = false; frameIntentCopy = false; frameIntentPaste = false; frameIntentDelete = false; frameIntentDeselectAll = false; frameIntentSwapColors = false; frameIntentFlipTargetsHorizontally = false; frameIntentFlipTargetsVertically = false; // Keyboard input if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) { primaryModifierHeld = true; } if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) { secondaryModifierHeld = true; } if (primaryModifierHeld && !secondaryModifierHeld) { // permits holding primary and secondary down frameIntentFlipTargetsHorizontally = Input.GetKeyDown(KeyCode.F); frameIntentCut = Input.GetKeyDown(KeyCode.X); frameIntentCopy = Input.GetKeyDown(KeyCode.C); frameIntentPaste = Input.GetKeyDown(KeyCode.V); frameIntentDeselectAll = Input.GetKeyDown(KeyCode.D); } else if (secondaryModifierHeld) { frameIntentFlipTargetsVertically = Input.GetKeyDown(KeyCode.F); } else { frameIntentDelete = Input.GetKeyDown(KeyCode.Delete); frameIntentSwapColors = Input.GetKeyDown(KeyCode.F); // hitsound selection frameIntentSetHitSoundStandard = Input.GetKeyDown(KeyCode.Q); frameIntentSetHitSoundSnare = Input.GetKeyDown(KeyCode.W); frameIntentSetHitSoundPercussion = Input.GetKeyDown(KeyCode.E); frameIntentSetHitSoundChainStart = Input.GetKeyDown(KeyCode.R); frameIntentSetHitSoundChain = Input.GetKeyDown(KeyCode.T); frameIntentSetHitSoundMelee = Input.GetKeyDown(KeyCode.Y); } // Mouse input if (EditorInput.selectedTool == EditorTool.DragSelect) { if (Input.GetMouseButtonDown(0)) { startClickDetectPos = new Vector2(Input.mousePosition.x, Input.mousePosition.y); } bool isSelectionDown = Input.GetMouseButton(0); if (isSelectionDown) { frameIntentDragging = hasInputDragMovedOutOfClickBounds; if (frameIntentDragging && !dragStarted) { frameIntentDragStart = true; dragStarted = true; } else { // Check for a tiny amount of mouse movement to test whether a release is meant to be a selection float movement = Math.Abs(startClickDetectPos.magnitude - Input.mousePosition.magnitude); hasInputDragMovedOutOfClickBounds = (movement > 2); } } } if (Input.GetMouseButtonUp(0)) { frameIntentDragging = false; frameIntentDragEnd = dragStarted; frameIntentSelect = !dragStarted; // these are not reset every frame, only on mouse up! hasInputDragMovedOutOfClickBounds = false; dragStarted = false; } //Handle note movement by arrow keys Vector2 noteMovement = new Vector2(0, 0); noteMovement.x += Input.GetKeyDown(KeyCode.RightArrow) ? NotePosCalc.xSize : 0; noteMovement.x += Input.GetKeyDown(KeyCode.LeftArrow) ? -NotePosCalc.xSize : 0; noteMovement.y += Input.GetKeyDown(KeyCode.UpArrow) ? NotePosCalc.ySize : 0; noteMovement.y += Input.GetKeyDown(KeyCode.DownArrow) ? -NotePosCalc.ySize : 0; if (noteMovement.x != 0 || noteMovement.y != 0) { if (primaryModifierHeld) { noteMovement /= 2; } if (secondaryModifierHeld) { noteMovement /= 4; } timeline.MoveGridTargets(timeline.selectedNotes.Select(target => { var intent = new TargetGridMoveIntent(); intent.target = target.data; intent.startingPosition = new Vector2(target.data.x, target.data.y); intent.intendedPosition = new Vector2(target.data.x + noteMovement.x, target.data.y + noteMovement.y); return(intent); }).ToList()); } }