예제 #1
0
 public void Awake()
 {
     if (m_instance == null)
     {
         m_instance = this;
     }
 }
예제 #2
0
 private new void Start()
 {
     base.Start();
     // Custom taskInfo initialization
     taskInfo            = gameObject.GetComponentInChildren <WisconsinTaskInfo>();
     taskInfo.OnPublish += Publish;
     // CurrentTrial placeholder
     currentTrial = new WisconsinTrialState();
     animator     = WisconsinGUIController.m_instance.stateMachine;
     // ReactionTimer
     reactionTimer           = new Timer(Time.deltaTime * 100);
     reactionTimer.Elapsed  += (object sender, ElapsedEventArgs e) => currentTrial.ReactionTime++;
     reactionTimer.AutoReset = true;
     reactionTimer.Enabled   = false;
     // GateTimer
     _gateTimer           = new Timer(10);
     _gateTimer.Elapsed  += (object sender, ElapsedEventArgs e) => gateTimer += 0.01f;
     _gateTimer.AutoReset = true;
     _gateTimer.Enabled   = false;
     // FixationTimer
     _fixationTimer           = new Timer(10);
     _fixationTimer.Elapsed  += (object sender, ElapsedEventArgs e) => fixationTimer += 0.01f;
     _fixationTimer.AutoReset = true;
     _fixationTimer.Enabled   = false;
     // Reset HUD
     HUDManager.instance.GenerateScore();
 }
예제 #3
0
    void AssignTrialProperties(int _modifiers, int _conditionTypes, int _responseTypes, int rule, int target_offset, Color[] _color, int[] _shape, int[] _number, int ruleLength)
    {
        WisconsinTaskInfo myTaskInfo = WisconsinTaskInfo.m_instance;

        WisconsinTrialState.TargetObject[] TargetObjectList = new WisconsinTrialState.TargetObject[5];
        TargetObjectList[0] = new TargetObject(_shape[0], _color[0], _number[0]);
        TargetObjectList[1] = new TargetObject(_shape[1], _color[1], _number[1]);
        TargetObjectList[2] = new TargetObject(_shape[2], _color[2], _number[2]);
        TargetObjectList[3] = new TargetObject(_shape[3], _color[3], _number[3]);
        TargetObjectList[4] = new TargetObject(_shape[4], _color[4], _number[4]);

        var taskParams = new WisconsinTrialState()
        {
            TaskName              = taskInfo.taskName,
            Modifier              = myTaskInfo.myModifiers[_modifiers],
            Condition             = myTaskInfo.myConditionTypes[_conditionTypes],
            Response              = myTaskInfo.myResponseTypes[_responseTypes],
            TargetPositionIndex   = target_offset,
            TargetObjectL         = TargetObjectList,
            SelectedPositionIndex = target_offset,
            TrialRule             = rule,
            TrialRuleLength       = ruleLength
        };

        switch (_modifiers)
        {
        // Prosacccade Trials
        case 0 when _responseTypes == 0:
            proTrials.Add(taskParams);
            break;

        // Undesirable combinations (Debug)
        default:
            //trashedTrials.Add(taskParams);
            break;
        }
    }
예제 #4
0
    // Generate conditions (TODO: Look at Guillaume's combinations/permutations generator)
    private void Populate(int multiplier)
    {
        System.Random randomGenerator = new System.Random();

        // Shape relates to TargetObject indexes (0:Cube, 1: Cross, 3: Spheres, 4: Star)
        int[]   shape  = { 0, 1, 2, 3 };
        int[]   number = { 1, 2, 3, 4 };
        Color[] color  = { Color.red, Color.blue, Color.green, Color.yellow };
        Color[] _sColor;
        int[]   _sShape;
        int[]   _sNumber;

        WisconsinTaskInfo myTaskInfo = WisconsinTaskInfo.m_instance;

        for (int i = 0; i < multiplier; i++) // multiplier loop
        {
            for (int _modifiers = 0; _modifiers < myTaskInfo.myModifiers.Count; _modifiers++)
            {
                for (int _conditionTypes = 0; _conditionTypes < myTaskInfo.myConditionTypes.Count; _conditionTypes++)
                {
                    for (int _responseTypes = 0; _responseTypes < myTaskInfo.myResponseTypes.Count; _responseTypes++)
                    {
                        // rule will be set randomly from 1..3 (1:Color, 2: Shape, 3: Number)
                        int rule          = UnityEngine.Random.Range(1, 4);
                        int target_offset = 0;
                        for (int _rule_length = 0; _rule_length < UnityEngine.Random.Range(3, 8); _rule_length++)
                        {
                            _sColor  = color.OrderBy(x => randomGenerator.Next(0, 3)).ToArray();
                            _sShape  = shape.OrderBy(x => randomGenerator.Next(0, 3)).ToArray();
                            _sNumber = number.OrderBy(x => randomGenerator.Next(0, 3)).ToArray();
                            Array.Resize(ref _sColor, _sColor.Length + 1);
                            Array.Resize(ref _sShape, _sShape.Length + 1);
                            Array.Resize(ref _sNumber, _sNumber.Length + 1);

                            _sColor[_sColor.Length - 1] = color[UnityEngine.Random.Range(0, 4)];
                            // Adding extra 4 to access cue target objects which are following the 4 targets.
                            _sShape[_sShape.Length - 1]   = shape[UnityEngine.Random.Range(0, 4)] + 4;
                            _sNumber[_sNumber.Length - 1] = number[UnityEngine.Random.Range(0, 4)];

                            switch (rule)
                            {
                            case 1:
                                Color target_color = _sColor[_sColor.Length - 1];
                                target_offset = Array.FindIndex(_sColor, tcolor => tcolor == target_color);
                                break;

                            case 2:
                                int target_shape = _sShape[_sShape.Length - 1] - 4;
                                target_offset = Array.FindIndex(_sShape, tshape => tshape == target_shape);
                                break;

                            case 3:
                                int target_index = _sNumber[_sNumber.Length - 1];
                                target_offset = Array.FindIndex(_sNumber, tnumber => tnumber == target_index);
                                break;

                            default:
                                break;
                            }
                            AssignTrialProperties(_modifiers, _conditionTypes, _responseTypes, rule, target_offset, _sColor, _sShape, _sNumber, _rule_length);
                            Array.Clear(_sColor, 0, _sColor.Length);
                            Array.Clear(_sShape, 0, _sShape.Length);
                            Array.Clear(_sNumber, 0, _sNumber.Length);
                        }
                    }
                }
            }
        }
    }