void SetTaskVisual3DFromBundle(GameObject obj, TaskBundle bundle) { if (null == obj) { return; } if (null == bundle) { return; } if (bundle.Relation.ParentID != 0) { TaskVisualObj visualParent = TryFindTaskVisual(bundle.Relation.ParentID); if (null != visualParent) { obj.transform.SetParent(visualParent.m_3DObj.transform); } } if (bundle.Visual.PositionStr != string.Empty) { obj.transform.localPosition = TaskBundleHelper.ParsePositionStr(bundle.Visual.PositionStr); } }
void CalculateUnAssignedVisualTask() { // create helper for all tasks. m_TaskCalculator.Clear(); { var taskI = m_TaskData.GetEnumerator(); while (taskI.MoveNext()) { InsertTaskPositionHelper(taskI.Current.Value); } } // calculate the parent depth CalculateParentDepth(m_TaskCalculator); CalculateXSpaceForAllTasks(m_TaskData, m_TaskCalculator); { var taskK = m_TaskData.GetEnumerator(); while (taskK.MoveNext()) { var data = taskK.Current.Value; m_TaskCalculator[data.Data.TaskID].IsSetPosition = (data.Visual.PositionStr != string.Empty); var visual = TryFindTaskVisual(data.Data.TaskID); visual.m_3DObj.transform.localPosition = TaskBundleHelper.ParsePositionStr(data.Visual.PositionStr); } } CheckAllRowIndexArray(); List <int> parentIDSet = new List <int>(); // collect parent id { var taskL = m_TaskData.GetEnumerator(); while (taskL.MoveNext()) { var data = taskL.Current.Value; int taskParenID = m_TaskCalculator[data.Data.TaskID].Bundle.Relation.ParentID; if (taskParenID != 0) { if (-1 == parentIDSet.IndexOf(m_TaskCalculator[data.Data.TaskID].Bundle.Relation.ParentID)) { parentIDSet.Add(taskParenID); } } } } Dictionary <float, List <int> > sortedForEachParent = new Dictionary <float, List <int> >(); // for each parent id { var parentIDEnum = parentIDSet.GetEnumerator(); while (parentIDEnum.MoveNext()) { List <int> taskInTheSameParentID = CreateSortingArrayForParentIDSet(m_TaskData, parentIDEnum.Current); sortedForEachParent.Add(parentIDEnum.Current, taskInTheSameParentID); } } // according to each sorted list, assigned position foreach (var row in sortedForEachParent.Values) { SetParentAndLocalPositionInArray(m_TaskData, m_TaskCalculator, row); } Dictionary <int, List <int> > sortedForEachYRow = new Dictionary <int, List <int> >(); // for each row index { var rowIndex = m_RowIndiceSet.GetEnumerator(); while (rowIndex.MoveNext()) { List <int> taskInTheSameRow = CreateSortingArrayForEachRowIndex(m_TaskData, m_TaskCalculator, rowIndex.Current); sortedForEachYRow.Add(rowIndex.Current, taskInTheSameRow); } } float tempY = 0; // according to each sorted list, assigned position foreach (var row in sortedForEachYRow) { m_RowToPosY.Add(row.Key, tempY); float maxYSpace = 0; SetLocalPositionInArray(row.Value, tempY, out maxYSpace); tempY += maxYSpace; } m_RowMaxYNow = tempY; }