Beispiel #1
0
    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);
        }
    }
Beispiel #2
0
    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);
    }