internal RegisteredMove getRegisteredMove() { RegisteredMove tmp = registeredMove; registeredMove = null; return(tmp); }
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); } }
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; } }