示例#1
0
    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;
    }