Exemplo n.º 1
0
    // Use this for initialization
    void Start()
    {
        pid        = PlayerPrefs.GetString("pid").Trim();
        configFile = PlayerPrefs.GetString("config", "configuration.ini").Trim();
        Debug.Log(configFile);
        mostItemsInTrial = 0;

        // Open the INI file
        INIParser ini = new INIParser();

        string configFilePath = Application.dataPath + '/' + configFile;

        if (!File.Exists(configFilePath))
        {
            Application.Quit();
        }

        ini.Open(configFilePath);

        // Read the global configuration variables
        stimuliFolder = ini.ReadValue("Global", "StimuliFolder", Application.dataPath).Trim();
        logFolder     = ini.ReadValue("Global", "LogFolder", Application.dataPath).Trim();
        string nextTrialKeyString = ini.ReadValue("Global", "NextButton", "Space");

        nextTrialKey = (KeyCode)System.Enum.Parse(typeof(KeyCode), nextTrialKeyString);

        // Read the raw contents and isolate the Trials section (assumed to be at the end of the file)
        string contents      = ini.ToString();
        string trialContents = contents.Split(new string[] { "[Trials]" }, System.StringSplitOptions.RemoveEmptyEntries)[1].Trim();

        string[] trialStrings = trialContents.Split(new char[] { '\n' }, System.StringSplitOptions.RemoveEmptyEntries);

        // Generate variables for the filenames and positions of items
        numTrials = 0;
        List <Vector2Int>  trialItemSizeTmp       = new List <Vector2Int>();
        List <string>      trialLogInstructionTmp = new List <string>();
        List <string[]>    trialFilenamesTmp      = new List <string[]>();
        List <Vector2[]>   trialPositionsTmp      = new List <Vector2[]>();
        List <Texture2D[]> trialStimuliTmp        = new List <Texture2D[]>();
        List <int>         trialStudyTimesTmp     = new List <int>();
        List <int>         trialDelayTimesTmp     = new List <int>();

        int leadingElements = 5;

        // Parse each trial, skipping any that fail (i.e. that row in the jagged arrays defined above will be null)
        for (int i = 0; i < trialStrings.Length; i++)
        {
            try
            {
                if (trialStrings[i].Trim()[0] == ';')
                {
                    continue;                                   // Check for comment lines
                }
                string[] trialSplit = trialStrings[i].Trim().Split(new char[] { ' ' });
                if (trialSplit.Length < leadingElements + 3)
                {
                    continue;                                          //Skip lines that don't have at least one valid item plus the times
                }
                if ((trialSplit.Length - leadingElements) % 3 != 0)
                {
                    continue;                                                 // Skip lines that don't have a multiple of 3 elements (filename, x, y)
                }
                // Allocate within-trial variables
                int numItems = (trialSplit.Length - leadingElements) / 3;
                if (numItems > mostItemsInTrial)
                {
                    mostItemsInTrial = numItems;
                }
                string[]    filenames = new string[numItems];
                Vector2[]   positions = new Vector2[numItems];
                Texture2D[] stimuli   = new Texture2D[numItems];

                Vector2Int size = new Vector2Int(int.Parse(trialSplit[3]), int.Parse(trialSplit[4]));

                // Parse the items
                for (int j = 0; j < numItems; j++)
                {
                    filenames[j] = Path.Combine(stimuliFolder, trialSplit[j + leadingElements].Trim());
                    positions[j] = new Vector2(float.Parse(trialSplit[j * 2 + numItems + leadingElements].Trim()), float.Parse(trialSplit[j * 2 + numItems + leadingElements + 1].Trim()));
                    stimuli[j]   = LoadTexture(filenames[j], size);
                    if (stimuli[j] == null)
                    {
                        continue;
                    }
                }

                // Store the values in the trial tables
                trialLogInstructionTmp.Add(trialSplit[0].Trim());
                trialStudyTimesTmp.Add(int.Parse(trialSplit[1]));
                trialDelayTimesTmp.Add(int.Parse(trialSplit[2]));
                trialItemSizeTmp.Add(size);
                trialFilenamesTmp.Add(filenames);
                trialPositionsTmp.Add(positions);
                trialStimuliTmp.Add(stimuli);

                numTrials++;
            }
            catch (System.Exception) { continue; } // If anything goes weird, just skip the line
        }

        trialItemSize                = trialItemSizeTmp.ToArray();
        trialLogInstruction          = trialLogInstructionTmp.ToArray();
        trialStudyTimeInMilliseconds = trialStudyTimesTmp.ToArray();
        trialDelayTimeInMilliseconds = trialDelayTimesTmp.ToArray();
        trialFilenames               = trialFilenamesTmp.ToArray();
        trialPositions               = trialPositionsTmp.ToArray();
        trialStimuli = trialStimuliTmp.ToArray();
    }