public void ChangeReminder(int mod) // change the reminder period by a step size of "mod", allowing for a time period of Never, Hours, and Days { Deck_Handler.Deck currentDeck = deck_handler.dataList[deck_handler.selection]; if (currentDeck.reminder.period.Days + mod >= 0) { currentDeck.reminder.period += new TimeSpan(mod, 0, 0, 0); periodText.text = currentDeck.reminder.period.Days + " Day"; if (currentDeck.reminder.period.Days > 1) // Plural { periodText.text += "s"; } else if (currentDeck.reminder.period.Days == 0) // None { periodText.text = "Never"; } } if (currentDeck.reminder != null) // If a reminder is assigned, remove it { int ID = currentDeck.reminder.ID ?? default; // Parsing nullable int into an int. Taken from:https://stackoverflow.com/questions/5995317/how-to-convert-c-sharp-nullable-int-to-int/5995418 AndroidNotificationCenter.CancelNotification(ID); } if (currentDeck.reminder.period > TimeSpan.Zero) // if a period is assigned schedule a notification { currentDeck.reminder.ID = SendRepeatNotification("Practice Reminder", "Don't forget to practice the " + currentDeck.title + " deck!", currentDeck.reminder.period); } }
/* Goals: * Get number of data points * evenly space verteices for each along the x axis !INSIDE THE RECT! * Get marks for each data point * Create a second set of vertecies with the same x, and a y of 0 to 1 depending on percentage * Create two triangles for each interval following vertex scheme: * 1 3 * 0 2 * Render graph with current light colour */ static public bool GenerateGraph(Deck_Handler.Deck deck, Rect container, MeshFilter graph) { int count = deck.practiceSessions.Count; if (count > 1) { float offsetX = -container.width / 2; float offsetY = -container.height / 2; Mesh mesh = new Mesh(); List <Vector3> vertecies = new List <Vector3>(); List <int> triangles = new List <int>(); float interval = container.width / (count - 1); for (int i = 0; i < count; i++) { // Assign the vertecies for that mark vertecies.Add(new Vector3(offsetX + (i * interval), offsetY, 0)); vertecies.Add(new Vector3(offsetX + (i * interval), offsetY + (container.height * deck.practiceSessions[i].grade), 0)); // if a triangle can be created, do so. if (i < count - 1) { /* vertex scheme: * 1 3 * 0 2 * * connections: * 0, 3, 2 & 0, 1, 3 */ int index = i * 2; triangles.Add(index); triangles.Add(index + 3); triangles.Add(index + 2); triangles.Add(index); triangles.Add(index + 1); triangles.Add(index + 3); } } mesh.vertices = vertecies.ToArray(); mesh.triangles = triangles.ToArray(); graph.mesh = mesh; return(true); } else { return(false); } }
// Functions public void UpdateContent() // assign all visual values to the parameters in the selected deck { currentDeck = deck_handler.dataList[deck_handler.selection]; practiceCount.text = currentDeck.practiceSessions.Count.ToString(); // # of practices recentScore.text = ParseGrade(currentDeck.practiceSessions[currentDeck.practiceSessions.Count - 1].grade); // most recent score float avgScoreTotal = 0f; for (int i = 0; i < currentDeck.practiceSessions.Count; i++) { avgScoreTotal += currentDeck.practiceSessions[i].grade; } averageScore.text = ParseGrade(avgScoreTotal / currentDeck.practiceSessions.Count); // average score for 3 most recent float recentAvgScoreTotal = 0f; int count = 0; for (int i = 3; i > 0; i--) { if (currentDeck.practiceSessions.Count >= i) { recentAvgScoreTotal += currentDeck.practiceSessions[currentDeck.practiceSessions.Count - i].grade; count++; } } recentAverageScore.text = ParseGrade(recentAvgScoreTotal / count); // average score for 3 most recent if (Graph_Renderer.GenerateGraph(currentDeck, container.rect, graph)) { graphError.SetActive(false); graphPointer.SetActive(true); } else { graphError.SetActive(true); graphPointer.SetActive(false); } sessionInput.text = "1"; SelectSession(0); }