public void Awake() { if (m_instance == null) { m_instance = this; } }
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(); }
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; } }
// 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); } } } } } }