コード例 #1
0
 public Configuration(InterfaceConfiguration interfaces, TaskProcedure taskProcedure)
 {
     _globalPauseEnabled = false;
     _backgroundColor = Color.black;
     _interfaces = interfaces;
     _taskProcedure = taskProcedure;
     _maximumAllowablePauseTime = float.MaxValue;
 }
        //Helper function that generates a TaskProcedure object from a JSONClass that contains TaskProcedures in the proper format
        public static TaskProcedure getTaskProcedureFromJSON(JSONClass taskClass)
        {
            if (taskClass["TaskProcedure"] == null)
            {
                Debug.LogError("Error: JSON does not include TaskProcedure object. See example JSON for help.");
                Application.Quit();
            }

            TaskProcedure taskProcedure = new TaskProcedure();

            JSONArray taskArray = taskClass["TaskProcedure"].AsArray;
            int taskIndex = 0;
            for (int i = 0; i < taskArray.Count; i++)
            {
                if (taskArray[i]["ConditionalEvent"] != null)
                {
                    JSONClass task = taskArray[i].AsObject;
                    taskProcedure.addTask(CreateConditionalEventFromJSON(taskClass, task, taskIndex));
                    taskIndex++;
                }
                if (taskArray[i]["RepeatedEvent"] != null)
                {
                    JSONArray subParameters = taskArray[i]["RepeatedEvent"]["SubstitutionParameters"].AsArray;

                    //Find the minimum parameter length
                    int minParams = int.MaxValue;
                    for (int j = 0; j < subParameters.Count; j++)
                    {
                        JSONArray parameterValues = subParameters[j]["ParameterValues"].AsArray;
                        if (parameterValues.Count < minParams)
                            minParams = parameterValues.Count;
                    }

                    //Get the template for the conditional events to be generated and save independent copies for each parameter

                    string templatesString = taskArray[i]["RepeatedEvent"]["ConditionalEventTemplates"].ToString();
                    string[] conditionalEventsStrings = new string[minParams];
                    for (int j = 0; j < conditionalEventsStrings.Length; j++)
                        conditionalEventsStrings[j] = templatesString;

                    //Iterate through the parameter lists and replace values in each conditional event
                    for (int j = 0; j < subParameters.Count; j++)
                    {
                        string parameterSubstitutionString = subParameters[j]["ParameterSubstitutionString"];
                        JSONArray parameterValues = subParameters[j]["ParameterValues"].AsArray;
                        string[] substitutionValues = new string[minParams];
                        for (int k = 0; k < minParams; k++)
                            substitutionValues[k] = parameterValues[k];

                        //substitutionValues holds the list of values to be replaced in each consecutive runthrough
                        //conditionalEventsStrings holds the runthrough templates
                        //for each parameter, replace the substring in each result with the subvalue
                        for (int k = 0; k < substitutionValues.Length; k++)
                        {
                            conditionalEventsStrings[k] = conditionalEventsStrings[k].Replace(parameterSubstitutionString, substitutionValues[k]);
                            //int pos = conditionalEventsStrings[k].IndexOf(parameterSubstitutionString);
                            //if (pos < 0) break;
                            //conditionalEventsStrings[k] = conditionalEventsStrings[k].Substring(0, pos) + substitutionValues[k] + conditionalEventsStrings[k].Substring(pos + parameterSubstitutionString.Length);
                        }
                    }

                    for (int j = 0; j < conditionalEventsStrings.Length; j++)
                    {
                        JSONArray conditionalEvent = JSONArray.Parse(conditionalEventsStrings[j]).AsArray;
                        for (int k = 0; k < conditionalEvent.Count; k++)
                        {
                            taskProcedure.addTask(CreateConditionalEventFromJSON(taskClass, conditionalEvent[k].AsObject, taskIndex));
                            taskIndex++;
                        }
                    }
                }
            }

            return taskProcedure;
        }