Esempio n. 1
0
    internal RegisteredMove getRegisteredMove()
    {
        RegisteredMove tmp = registeredMove;

        registeredMove = null;
        return(tmp);
    }
Esempio n. 2
0
    private void Update()
    {
        foreach (Vector3 point in _points)
        {
            DebugExtension.DebugPoint(point);
        }
        ResetInput();

        if (Vector3.Distance(transform.position, target.position) > .5f)
        {
            Vector2        targetDir = target.position - transform.position;
            float          bestAngle = float.MaxValue; //TODO make smarter
            RegisteredMove bestMove  = null;
            foreach (var move in registeredMoves)
            {
                if (!move.checkCondition())
                {
                    continue;
                }
                float angle = Vector2.Angle(targetDir, move.direction);
                if (angle < bestAngle)
                {
                    bestAngle = angle;
                    bestMove  = move;
                }
            }
            bestMove?.doMove(bestMove.distanceToDuration(targetDir.magnitude));
            //print(bestMove?.name);
        }
    }
Esempio n. 3
0
    void Update()
    {
#if UNITY_STANDALONE || UNITY_EDITOR
        if (Input.GetKeyDown(actionKey))
        {
            laneTriggerDown(Input.GetKey(KeyCode.RightShift));
        }
        if (Input.GetKeyUp(actionKey))
        {
            laneTriggerUp();
        }
#endif

        if (beatBoxArrival != null)
        {
            playBeatBox(currentTime());
        }
        if (isAlreadyInside)//allow some recoding inputs while inside (hold, directional, regular through directional press?
        {
            if (InputUtils.getDirectionalDown(triggeredByRightController))
            {
                int direction = InputUtils.getDirectionalPress(triggeredByRightController);
                if (direction >= 0)
                {
                    //boxType = SongRow.BoxType.DIR_N + direction;
                    registeredBeat.type = SongRow.BoxType.DIR_N + direction;
                }
                else
                {
                    registeredBeat.type = SongRow.BoxType.REGULAR;
                }
            }
            if (InputUtils.isHoldKeyDown(triggeredByRightController))
            {
                registeredBeat.type      = SongRow.BoxType.MAYBE_HOLD;
                registeredBeat.timestamp = currentTime() - seekOffset();
            }
        }
        if (isEnabledLaneAudio)
        {
            if ((isAlreadyInside || audioModSelected) && InputUtils.isLoopKeyDown(triggeredByRightController))
            {
                switchLooping();
            }

            if (isAlreadyInside || audioModSelected)
            {
                bool audioModifierKeys = InputUtils.isEffectBKeyPressed(triggeredByRightController) || InputUtils.isEffectAKeyPressed(triggeredByRightController);
                if (audioModifierKeys)
                {
                    applyAudioMods();
                }
            }
            float growth = audioSource.time / audioSource.clip.length;
            audioProgress.transform.localScale = new Vector3(growth, growth, growth);

            if (beatPlayMode == BeatPlayMode.TRIGGER_IMMEDIATE && wasAudioTriggered)
            {
                audioSource.Play();
                wasAudioTriggered = false;
            }
            else
            if (isNewBeat())
            {//in sync with bpm, so all samples start at the same time
             //instead of isLooping, 3 states: idle, loopToBeat, loopToAudio
             //also, trigger mode to ignore beat sync and play once at once

                //TODO option to set lane skip beats (loop clip stops and doesn't restart until n skips)
                //variable skips can create useful effects for drums/snares,...?
                //skipBeat = !skipBeat;
                //if (skipBeat)
                //{
                //    if (beatPlayMode == BeatPlayMode.LOOP_TO_BEAT)
                //    {
                //        audioSource.Stop();
                //    }
                //}
                //else
                switch (beatPlayMode)
                {
                case BeatPlayMode.TRIGGER_IN_BEAT:
                    if (audioSource.isPlaying)    //this syncs audio end with next beat
                    {
                        audioSource.Stop();
                    }
                    if (wasAudioTriggered)
                    {
                        audioSource.Play();
                        wasAudioTriggered = false;
                    }
                    break;

                case BeatPlayMode.TRIGGER_TO_BEAT:
                    if (wasAudioTriggered)
                    {
                        audioSource.Play();
                        wasAudioTriggered = false;
                    }
                    break;

                case BeatPlayMode.LOOP_TO_BEAT:
                    if (wasAudioTriggered)
                    {
                        audioSource.Play();
                    }
                    else
                    {
                        audioSource.Stop();
                    }
                    break;

                case BeatPlayMode.LOOP_TO_AUDIO:
                    if (wasAudioTriggered && !audioSource.isPlaying)
                    {
                        audioSource.Play();
                    }
                    break;
                }
            }
        }

        //TODO?: this is so that boxes can be recorded while already inside the lane end (triggered)

        if (isEnabledModelling && spawningBlock != null && !InputUtils.isDragPressed(triggeredByRightController))
        {
            //save final position
            spawningBlock.transform.parent      = null;
            spawningBlock.transform.eulerAngles = Vector3.zero;
            spawningBlock = null;
        }
        //checking user dragging the lane (or creating a build block)
        if (handTransform != null)
        {
            if (isEnabledModelling)
            {
                if (isAlreadyInside && InputUtils.isDragDown(triggeredByRightController))
                {
                    spawningBlock = Instantiate(blockPrefab);//FurnitureSpawner.spawn(f, blockPrefab);
                    spawningBlock.transform.position = handTransform.position;
                    spawningBlock.transform.parent   = handTransform;
                    Utils.resizeToMatch(spawningBlock, gameObject);
                }
            }
            else
            {
                if (InputUtils.isDragDown(triggeredByRightController))
                {
                    grabOffset       = -(transform.parent.position - handTransform.position) / 2;
                    lastDragPosition = Vector3.zero;
                }

                //if (grabOffset != Vector3.zero && InputUtils.isDragPressed(triggeredByRightController))
                if (grabOffset != Vector3.zero)
                {
                    if (InputUtils.isDragPressed(triggeredByRightController))
                    {
                        //elapsedDragTime -= Time.deltaTime;
                        //if (true ||Vector3.Distance(transform.parent.position, movingTransform.position - grabOffset) > Settings.distanceToDetectDrag)//0.25f)
                        if (Vector3.Distance(lastDragPosition, handTransform.position - grabOffset) > Settings.distanceToDetectDrag)
                        {
                            registeredMove = new RegisteredMove(currentTime(), handTransform.position - grabOffset);
                            //Debug.Log("Registering move to " + (movingTransform.position - grabOffset));
                            //elapsedDragTime = Settings.instance.laneDragTimeLapse;
                            lastDragPosition = handTransform.position - grabOffset;
                        }
                        transform.parent.position = handTransform.position - grabOffset;
                    }
                    else
                    {
                        handTransform = null;
                        grabOffset    = Vector3.zero;
                    }
                }
            }
        }

        if (Settings.instance.vibrationDuration > 0 && rightVibrationTime > 0 && rightVibrationTime <= Time.time)
        {
            OVRInput.SetControllerVibration(1.0f, 0, OVRInput.Controller.RTouch);
            rightVibrationTime = 0;
        }
        if (Settings.instance.vibrationDuration > 0 && leftVibrationTime > 0 && leftVibrationTime <= Time.time)
        {
            OVRInput.SetControllerVibration(1.0f, 0, OVRInput.Controller.LTouch);
            leftVibrationTime = 0;
        }
    }