private void UpdateActionMode() { ActionSequence.Action action = actionSequence.get(); string action_msg = action.name.Replace("_", MSG_PADDING); string message = MSG_INSTRUCTION.Replace("%1", action_msg); string binding = ""; if (!worldController.UsingVR()) { binding = keyBindingsCaptions[action.name][0].Replace("_", MSG_PADDING); } else { binding = keyBindingsCaptions[action.name][1].Replace("_", MSG_PADDING); } message = message.Replace("%2", binding); if (!currentEntry.actionName.Equals(action.name)) { currentEntry.actionName = action.name; currentEntry.messageTimestamp = GetCurrentUnixTimestampMillis(); } //if (timerTriggerRelease) // message += "..." + (Math.Round(timeLeftRelease)).ToString(); if (timerTriggerWaiting) { message = MSG_WAIT + " " + (Math.Round(timeLeftWaiting)).ToString(); isWaitMessage = true; } else { if (isWaitMessage) { worldController.AnimatePlayerTextPosition(); } isWaitMessage = false; if (actionSequence.isFinished()) { message = MSG_FINISH; } else { //string keyCode = GetKeyCode(entry[1]); if (GetButtonDown(action.name)) { //StopTimer(); if (!timerTriggerRelease) { currentEntry.downTimestamp = GetCurrentUnixTimestampMillis(); StartReleaseTimer(actionTime); } } else if (GetButtonUp(action.name)) { currentEntry.upTimestamp = GetCurrentUnixTimestampMillis(); Debug.Log(currentEntry.upTimestamp); StopReleaseTimer(); WriteData(filePathOutput, currentEntry.ToString()); actionFinished = true; actionSequence.advance(); //TimerReleaseDone(); shouldReleaseKey = false; } else if (GetButton(action.name)) { if (!timerTriggerRelease) { shouldReleaseKey = true; message = MSG_RELEASE_KEY; } } else { if (!actionSequence.isLast() && !timerTriggerRelease && !shouldReleaseKey && actionFinished) { StartWaitingTimer(action.duration); message = "Wait..." + (Math.Round(timeLeftWaiting)).ToString(); actionFinished = true; currentEntry = new DataEntry(); } //if (actionSequence.isLast()) //{ // actionSequence.advance(); // message = "Experiment complete"; //} } } } worldController.UpdatePlayerRequestText(message); if (actionFinished) { worldController.HidePlayerJoysticks(); } else { worldController.DisplayPlayerJoystick(action_msg); } }
private void UpdateSimulateMode() { ActionSequence.Action action = actionSequence.get(); string action_msg = action.name.Replace("_", MSG_PADDING); string message = MSG_SIMULATE_INSTRUCTION.Replace("%1", action_msg); if (!currentEntry.actionName.Equals(action.name)) { currentEntry.actionName = action.name; currentEntry.messageTimestamp = GetCurrentUnixTimestampMillis(); } if ((action.name.Equals("Crouch") && !isCrouchDown) || (action.name.Equals("Stand_Up") && !isCrouchDown)) { PrepareForAction(action.name); } if (actionFinished && !actionSequence.isFinished()) { actionFinished = false; simulateStartTimer.StopTimer(); simulateStartTimer.SetOnTimerDoneListener(new SimulateStartTimerListener(this)); simulateStartTimer.StartTimer(action.waitingTime); } if (simulateStartTimerDone) { simulateStartTimerDone = false; simulateEnabled = true; simulateActionTimer.StopTimer(); simulateActionTimer.SetOnTimerDoneListener(new SimulateActionTimerListener(this)); simulateActionTimer.StartTimer(action.duration); threshTick = action.duration * 100; } if (simulateEnabled) { float errorChoice = 1; float errorHasAction = 0; if (simulateErrorTimer.isFinished() && Math.Floor(simulateActionTimer.getTimeLeft() * 100) <= threshTick) { threshTick = Math.Floor(simulateActionTimer.getTimeLeft() * 100) - 10; errorChoice = UnityEngine.Random.Range(0.0f, 1.0f); errorHasAction = UnityEngine.Random.Range(0.0f, 1.0f); } if (simulateErrorTimer.isFinished()) { actionName = action.name; } if (errorChoice > simulateErrorProbability && !hasNoAction) { SimmulateAction(actionName); } else { if (simulateErrorTimer.isFinished()) { SimmulateActionRelease(actionName); simulateErrorTimer.SetOnTimerDoneListener(new SimulateErrorTimerListener(this)); simulateErrorTimer.StartTimer(Math.Min(simulateActionTimer.getTimeLeft(), UnityEngine.Random.Range(0.1f, 0.5f))); if (errorHasAction < actionActivationProbability) { var list = new List <string>(keyBindingsCaptions.Keys.ToArray()); list.Remove(action.name); actionName = list[UnityEngine.Random.Range(0, list.Count - 1)]; SimmulateAction(actionName); hasNoAction = false; } else { hasNoAction = true; } } } } if (!simulateWaitingTimer.isFinished()) { isWaitMessage = true; message = MSG_WAIT + Math.Round(simulateWaitingTimer.getTimeLeft()); } else { if (isWaitMessage) { worldController.AnimatePlayerTextPosition(); } //if (!simulateEnabled && !simulateStartTimerDone && actionSequence.isLast()) //{ // message = MSG_FINISH; // actionSequence.advance(); //} isWaitMessage = false; } worldController.UpdatePlayerRequestText(message); }