//Method used to read in all the trials of the game private List<EventStats> ReadSpatialEvents(CsvReader csv) { List<EventStats> events = new List<EventStats>(); int fieldCount = csv.FieldCount; string[] headers = csv.GetFieldHeaders(); int i =2; while (csv.ReadNextRecord()){ List<int> dots = new List<int>(); float delay=.1f; for(int j = 0;j<fieldCount;j++){ if(headers[j].ToLower() == "dots"){ int num; string[] d = csv[j].Split(';'); for(int k =0;k<d.Length;k++){ if(int.TryParse(d[k],out num)){ if(num<1 || num>9){ NeuroLog.Error("Invalid Value for '"+ d[k] +"' value for 'dots' of line #" + i.ToString() + ". Needs to be between 1 and 9."); } else{ dots.Add(num); } } else{ NeuroLog.Error("Invalid ValueType for '"+ d[k] +"' value for 'dots' of line #" + i.ToString() + ". Needs to be a float."); } } } //Delay else if(headers[j].ToLower() == "delay"){ if(float.TryParse(csv[j],out delay)){ if(delay!= .1f && delay != 3){ NeuroLog.Log("Invalid value for 'delay' at line #" + i.ToString() + ". Needs to be either .1 or 3."); delay = .1f; } } else NeuroLog.Log("Invalid value for 'delay' at line #" + i.ToString() + ". Needs to be a float."); } else{ NeuroLog.Log(headers[j].ToLower()); } } if(dots.Count!=0){ SpatialEvent sE = new SpatialEvent(dots); sE.Delay = delay; //Add the newly compiled event to the event list events.Add(sE); } i++; } //Set the event list return events; }
//Method used to read in all the trials of the game private List<EventStats> ReadSpatialEvents(XmlNode eventsNode) { List<EventStats> events = new List<EventStats>(); //For all the trials for (int i=0; i<eventsNode.ChildNodes.Count; i++){ //Make sure were trying to deal with trial if(eventsNode.ChildNodes[i].Name =="event"){ List<int> dots = new List<int>(); float delay=.1f; //For each attribute in the trial foreach(XmlAttribute attri in eventsNode.ChildNodes[i].Attributes){ //StartRotation if(attri.Name.ToLower() == "dots"){ int num; string[] d = attri.Value.Split(';'); for(int j =0;j<d.Length;j++){ if(int.TryParse(d[j],out num)){ if(num<1 || num>9){ Debug.LogError("Invalid Value for '"+ d[j] +"' value for 'dots' of trial #" + (j+1).ToString() + ". Needs to be between 1 and 9."); } else{ dots.Add(num); } } else{ Debug.LogError("Invalid ValueType for '"+ d[j] +"' value for 'dots' of trial #" + (j+1).ToString() + ". Needs to be a float."); } } } //Delay else if(attri.Name.ToLower() == "delay"){ if(float.TryParse(attri.Value,out delay)){ if(delay!= .1f && delay != 3){ NeuroLog.Error("Invalid value for 'delay' at trial #" + (i+1).ToString() + ". Needs to be either .1 or 3."); delay = .1f; } } else NeuroLog.Error("Invalid value for 'delay' at trial #" + (i+1).ToString() + ". Needs to be a float."); } //Other attributes that don't have cases else NeuroLog.Error("Unknown attribute '" + attri.Name + "' at trial #" + (i+1).ToString() + "."); } SpatialEvent sE = new SpatialEvent(dots); sE.Delay = delay; //Add the newly compiled event to the event list events.Add(sE); } } //Set the event list return events; }
//Generate the basic group of events within a Spatial game protected override void generateEvents() { int i=0; System.Random rand = new System.Random(); //Generate the 1 dots for(i=0;i<20;i++){ List<int> d =new List<int>(); d.Add(rand.Next(1,10)); SpatialEvent e = new SpatialEvent(d); //First 10 has a delay of .1, the others have 3 seconds if(i<10) e.Delay = .1f; else e.Delay = 3f; events.Add(e); } //Generate 2 dots for(i=0;i<20;i++){ List<int> d =new List<int>(); while(d.Count<2){ int num = rand.Next(1,10); if(!d.Contains(num)){ d.Add(num); } } SpatialEvent e = new SpatialEvent(d); //First 10 has a delay of .1, the others have 3 seconds if(i<10) e.Delay = .1f; else e.Delay = 3f; events.Add(e); } //Generate 3 dots for(i=0;i<20;i++){ List<int> d =new List<int>(); while(d.Count<3){ int num = rand.Next(1,10); if(!d.Contains(num)){ d.Add(num); } } SpatialEvent e = new SpatialEvent(d); //First 10 has a delay of .1, the others have 3 seconds if(i<10) e.Delay = .1f; else e.Delay = 3f; events.Add(e); } }
//Generate practice pitches protected override void generatePractice() { System.Random rand = new System.Random(); border.renderer.enabled = true; List<EventStats> newPractice = new List<EventStats>(); SpatialEvent eS; //Create a event for every combination of events for(int j = 0;j<6;j++){ List<int> a1 =new List<int>(); if(j<2){ a1.Add(rand.Next(1,10)); } else if(j<4){ while(a1.Count<2){ int num = rand.Next(1,10); if(!a1.Contains(num)) a1.Add(num); } } else{ while(a1.Count<3){ int num = rand.Next(1,10); if(!a1.Contains(num)) a1.Add(num); } } eS = new SpatialEvent(a1); if(j%2==0) eS.Delay = 3; else eS.Delay = .1f; newPractice.Add(eS); } //Just do a base randomization for(int i=0; i<newPractice.Count-1;i++){ SpatialEvent originalStats = (SpatialEvent)newPractice[i]; int spotToMove = rand.Next(i,newPractice.Count); newPractice[i] = newPractice[spotToMove]; newPractice[spotToMove] = originalStats; } practice.AddRange(newPractice); }
//Generate the basic group of events within a Spatial game protected override void generateEvents() { int i = 0; System.Random rand = new System.Random(); //Generate the 1 dots for (i = 0; i < 20; i++) { List <int> d = new List <int>(); d.Add(rand.Next(1, 10)); SpatialEvent e = new SpatialEvent(d); //First 10 has a delay of .1, the others have 3 seconds if (i < 10) { e.Delay = .1f; } else { e.Delay = 3f; } events.Add(e); } //Generate 2 dots for (i = 0; i < 20; i++) { List <int> d = new List <int>(); while (d.Count < 2) { int num = rand.Next(1, 10); if (!d.Contains(num)) { d.Add(num); } } SpatialEvent e = new SpatialEvent(d); //First 10 has a delay of .1, the others have 3 seconds if (i < 10) { e.Delay = .1f; } else { e.Delay = 3f; } events.Add(e); } //Generate 3 dots for (i = 0; i < 20; i++) { List <int> d = new List <int>(); while (d.Count < 3) { int num = rand.Next(1, 10); if (!d.Contains(num)) { d.Add(num); } } SpatialEvent e = new SpatialEvent(d); //First 10 has a delay of .1, the others have 3 seconds if (i < 10) { e.Delay = .1f; } else { e.Delay = 3f; } events.Add(e); } }
//Generate practice pitches protected override void generatePractice() { System.Random rand = new System.Random(); border.renderer.enabled = true; List <EventStats> newPractice = new List <EventStats>(); SpatialEvent eS; //Create a event for every combination of events for (int j = 0; j < 6; j++) { List <int> a1 = new List <int>(); if (j < 2) { a1.Add(rand.Next(1, 10)); } else if (j < 4) { while (a1.Count < 2) { int num = rand.Next(1, 10); if (!a1.Contains(num)) { a1.Add(num); } } } else { while (a1.Count < 3) { int num = rand.Next(1, 10); if (!a1.Contains(num)) { a1.Add(num); } } } eS = new SpatialEvent(a1); if (j % 2 == 0) { eS.Delay = 3; } else { eS.Delay = .1f; } newPractice.Add(eS); } //Just do a base randomization for (int i = 0; i < newPractice.Count - 1; i++) { SpatialEvent originalStats = (SpatialEvent)newPractice[i]; int spotToMove = rand.Next(i, newPractice.Count); newPractice[i] = newPractice[spotToMove]; newPractice[spotToMove] = originalStats; } practice.AddRange(newPractice); }
//Method used to randomize the order of the list of events protected override void randomizeEvents() { System.Random rand = new System.Random(); //Apply a base randomization for (int i = 0; i < 41; i++) { SpatialEvent originalStats = (SpatialEvent)events[i]; int spotToMove = rand.Next(i, 42); events[i] = events[spotToMove]; events[spotToMove] = originalStats; } bool ok = true; bool eventGood; int cycleCount = 0; //Loop to make sure there are no strings of 3 same number of dots or delays do { ok = true; for (int i = 2; i < 42; i++) { eventGood = true; if (((SpatialEvent)events[i]).Dots.Count == ((SpatialEvent)events[i - 1]).Dots.Count && ((SpatialEvent)events[i]).Dots.Count == ((SpatialEvent)events[i - 2]).Dots.Count) { eventGood = false; } if (((SpatialEvent)events[i]).Delay == ((SpatialEvent)events[i - 1]).Delay && ((SpatialEvent)events[i]).Delay == ((SpatialEvent)events[i - 2]).Delay) { eventGood = false; } if (!eventGood) { ok = false; int start = i + 1; if (start >= 42) { start = 0; } for (int j = i + 1; j < 42; j++) { eventGood = true; if (((SpatialEvent)events[j]).Dots.Count == ((SpatialEvent)events[i - 1]).Dots.Count && ((SpatialEvent)events[j]).Dots.Count == ((SpatialEvent)events[i - 2]).Dots.Count) { eventGood = false; } if (((SpatialEvent)events[j]).Delay == ((SpatialEvent)events[i - 1]).Delay && ((SpatialEvent)events[j]).Delay == ((SpatialEvent)events[i - 2]).Delay) { eventGood = false; } if (eventGood) { SpatialEvent originalStats = (SpatialEvent)events[i]; events[i] = events[j]; events[j] = originalStats; break; } else if (j == 41) { j = 0; } } } } cycleCount++; //Attempt 5 loops to fix any bad instances, after 5th proceed anyway if (cycleCount > 5) { ok = true; } }while(!ok); }