public CourseNode getCourseDetails(int CourseId) { CourseNode courseNode = new CourseNode(); courseNode.CourseId = CourseId; courseNode.CourseSchedule = getCourseSchedule(CourseId); //courseNode.Prerequisites = getPrerequisite(CourseId); courseNode.Corequisites = getCorequisite(CourseId); return(courseNode); }
public void SetCourse(Course c) { course = Instantiate(DegreeTree.instance.courseNode); course.SetCourse(c); DegreeTree.instance.currentCourses.Add(c); course.transform.SetParent(assignedContainer, false); removeCourseButton.interactable = true; }
public void AddCourse(CourseNode course) { if (string.IsNullOrWhiteSpace(course.CourseId)) { throw new InvalidDataException(nameof(course.CourseId)); } if (_courses.ContainsKey(course.CourseId)) { throw new DuplicateNameException(nameof(course.CourseId)); } _courses.Add(course.CourseId, course); }
public void CourseNodeValid_Serialize_Done() { // ----- Setup Environment ----- CourseNode courseNode = new CourseNode { CourseCode = "255", FieldOfStudy = "Math", MarkUp = "HTML CONTENT HERE", PreReqs = new List <Dependency> { new DependencyAbsolute { courseIds = new HashSet <string> { "ENG210" } }, new DependencyNumberOfCourses(1) { courseIds = new HashSet <string> { "ENG150", "MATH160" } } }, CoReqs = new List <Dependency> { new DependencyAbsolute { courseIds = new HashSet <string> { "SENG321" } } } }; // ----- Action ----- var jsonSting = JsonConvert.SerializeObject(courseNode); string expectedJson = "{\"CourseCode\":\"255\",\"FieldOfStudy\":\"Math\",\"MarkUp\":\"HTML CONTENT HERE\",\"PreReqs\":[{\"courseIds\":[\"ENG210\"],\"UserFriendlyCondition\":\"Absolute\"},{\"NumberOfCourses\":1,\"courseIds\":[\"ENG150\",\"MATH160\"],\"UserFriendlyCondition\":\"Courses\"}],\"CoReqs\":[{\"courseIds\":[\"SENG321\"],\"UserFriendlyCondition\":\"Absolute\"}],\"PreOrCoReqs\":null}"; // ----- Expected Result ----- Assert.AreEqual(expectedJson, jsonSting); }
public void AddCourse(Course course) { CourseNode cn = Instantiate(DegreeTree.instance.courseNode); cn.transform.SetParent(rect, false); cn.SetCourse(course); courses.Add(cn); Toggle t = Instantiate(togglePrefab); t.transform.SetParent(cn.transform, false); t.transform.position += (Vector3)toggleOffset; t.group = GetComponent <ToggleGroup>(); }
public void CourseRepoWithOneCourse_Save_FileSaved() { // ----- Setup Environment ----- CourseNode courseNode = new CourseNode { CourseCode = "255", FieldOfStudy = "Math", MarkUp = "HTML CONTENT HERE", PreReqs = new List <Dependency> { new DependencyAbsolute { courseIds = new HashSet <string> { "ENG210" } }, new DependencyNumberOfCourses(1) { courseIds = new HashSet <string> { "ENG150", "MATH160" } } }, CoReqs = new List <Dependency> { new DependencyAbsolute { courseIds = new HashSet <string> { "SENG321" } } } }; CourseNodeRepo courseRepo = new CourseNodeRepo(); courseRepo.AddCourse(courseNode); courseRepo.Save(); courseRepo.Reload(); }
public void Reload() { if (!Directory.Exists(_dataPath)) { return; } _courses = new Dictionary <string, CourseNode>(); foreach (var folder in new DirectoryInfo(_dataPath).GetDirectories()) { foreach (var file in folder.GetFiles("*.JSON")) { var rawJson = File.ReadAllText(file.FullName); CourseNode course = (CourseNode)JsonConvert.DeserializeObject <CourseNode>(rawJson, jset); _courses.Add(course.CourseId, course); } } }
void AddCourseNode(Course course, int columnID) { if (columnID >= columns.Count) { AddColumn(columnID - columns.Count + 1); } CourseNode cn = Instantiate(courseNode); cn.SetCourse(course); cn.rowID = columns[columnID].transform.childCount; cn.transform.SetParent(columns[columnID].transform, false); columns[columnID].GetComponent <VerticalLayoutGroup>().spacing += cn.rect.sizeDelta.y * 1.5f; cn.column = columns[columnID].GetComponent <RectTransform>(); cn.columnID = columnID; nodes.Add(cn); currentCourses.Add(course); if (cn.course.prereqs.Count > 0) { //look for prereq and join their row List <Course> done = new List <Course>(); foreach (Prereq prereq in cn.course.prereqs) { foreach (Course c in prereq.equivalent) { bool skip = false; foreach (CourseNode node in nodes) { foreach (CourseNode checkEq in node.equivalent) { if (done.Contains(checkEq.course)) { skip = true; break; } } if (skip) { break; } if (node.course == c) { done.Add(c); if (node.equivalent.Count > 0) { UILineRenderer edge = DrawLine(node.rect.parent.GetComponent <RectTransform>(), cn.rect); cn.backEdge.Add(edge); node.rect.parent.GetComponent <OneOfNode>().forwardEdge.Add(edge); } else { UILineRenderer edge = DrawLine(node.rect, cn.rect); cn.backEdge.Add(edge); node.forwardEdge.Add(edge); } break; } } } } } else { //start a row if we are the only prereq for a course, and a row doesn't already exist for that req chain } }
// when adding courses, if they are the first in their column / row, make a layout group // can achieve ideal column / row setup? // -> add chain link when columnID = 0, if the course unlocks Vector2Int AddCourseNode(Course course, Vector2Int gridPos) { CourseNode cn = Instantiate(courseNode); cn.SetCourse(course); cn.columnID = gridPos.x; if (gridPos.x == 0) { //make a new chain CourseChain chain = Instantiate(treeRow).AddComponent <CourseChain>(); chain.head = cn; chain.transform.SetParent(content, false); chains.Add(chain); cn.rowID = chains.Count - 1; GameObject chainLink = Instantiate(treeColumn); chainLink.transform.SetParent(chain.transform, false); chains[chains.Count - 1].chainLinks.Add(chainLink); cn.transform.SetParent(chains[chains.Count - 1].chainLinks[0].transform, false); } else { cn.rowID = gridPos.y; //parent node to chain[gridPos.y].getchild(gridPos.x) while (gridPos.x >= chains[gridPos.y].chainLinks.Count) { GameObject chainLink = Instantiate(treeColumn); chainLink.transform.SetParent(chains[gridPos.y].transform, false); chains[gridPos.y].chainLinks.Add(chainLink); } cn.transform.SetParent(chains[gridPos.y].chainLinks[gridPos.x].transform, false); if (chains[gridPos.y].GetComponent <HorizontalLayoutGroup>()) { chains[gridPos.y].GetComponent <HorizontalLayoutGroup>().spacing += cn.rect.sizeDelta.x; } else if (chains[gridPos.y].GetComponent <VerticalLayoutGroup>()) { chains[gridPos.y].GetComponent <VerticalLayoutGroup>().spacing += cn.rect.sizeDelta.x; } if (chains[gridPos.y].chainLinks[gridPos.x].GetComponent <VerticalLayoutGroup>()) { chains[gridPos.y].chainLinks[gridPos.x].GetComponent <VerticalLayoutGroup>().spacing += cn.rect.sizeDelta.y; } else if (chains[gridPos.y].chainLinks[gridPos.x].GetComponent <HorizontalLayoutGroup>()) { chains[gridPos.y].chainLinks[gridPos.x].GetComponent <HorizontalLayoutGroup>().spacing += cn.rect.sizeDelta.y; } } nodes.Add(cn); currentCourses.Add(course); if (cn.course.prereqs.Count > 0) { //look for prereq and join their row List <Course> done = new List <Course>(); foreach (Prereq prereq in cn.course.prereqs) { foreach (Course c in prereq.equivalent) { bool skip = false; foreach (CourseNode node in nodes) { foreach (CourseNode checkEq in node.equivalent) { if (done.Contains(checkEq.course)) { skip = true; break; } } if (skip) { break; } if (node.course == c) { done.Add(c); if (node.equivalent.Count > 0) { UILineRenderer edge = DrawLine(node.rect.parent.GetComponent <RectTransform>(), cn.rect); cn.backEdge.Add(edge); node.rect.parent.GetComponent <OneOfNode>().forwardEdge.Add(edge); } else { UILineRenderer edge = DrawLine(node.rect, cn.rect); cn.backEdge.Add(edge); node.forwardEdge.Add(edge); } break; } } } } } return(new Vector2Int(cn.columnID, cn.rowID)); }
public void AddNode(CourseNode node) { nodes.Add(node); }