예제 #1
0
        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);
            });
        }
예제 #2
0
        // 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());
            }
        }