private void DrawGroup(Rect rect)
        {
            if (m_ReleaseStageData.Childs.Count == 0)
            {
                EditorGUI.LabelField(rect, "Child Data is Empty.Add a new child by btn(new)");
                return;
            }

            SkillReleaseChildData childData = m_ReleaseStageData.Childs[SelectedChildIndex];

            float deltaHeight = 0.0f;

            Rect fieldRect = new Rect(rect.x, rect.y + deltaHeight, rect.width, EditorGUIUtility.singleLineHeight);

            childData.ConditionType = (SkillReleaseStageCondtionType)EditorGUI.EnumPopup(fieldRect, "ConditionType", childData.ConditionType);

            SkillReleaseTimeLengthCondition condition = childData.TimeLengthCondition;

            fieldRect.y += fieldRect.height;
            EditorGUI.LabelField(fieldRect, "TimeLengthCondition");

            fieldRect.y += fieldRect.height;
            Rect conditionRect = fieldRect;

            conditionRect.x  += 12;
            condition.MinTime = EditorGUI.FloatField(conditionRect, "MinTime", condition.MinTime);

            conditionRect.y  += conditionRect.height;
            condition.MaxTime = EditorGUI.FloatField(conditionRect, "MaxTime", condition.MaxTime);

            deltaHeight += EditorGUIUtility.singleLineHeight * 4;

            Rect groupRect = new Rect(rect.x, rect.y + deltaHeight, rect.width, (rect.height - deltaHeight) * .6f);

            EditorGUIUtil.DrawAreaLine(groupRect, Color.gray);
            groupDrawer.OnGUI(groupRect);

            deltaHeight += groupRect.height;

            Rect breakGroupRect = new Rect(rect.x, rect.y + deltaHeight, rect.width, rect.height - deltaHeight);

            EditorGUIUtil.DrawAreaLine(breakGroupRect, Color.gray);
            breakGroupDrawer.OnGUI(breakGroupRect);
        }
Exemplo n.º 2
0
    /// <summary>
    /// 根据所处阶段,获取对应轨道组
    /// </summary>
    /// <param name="skillId"></param>
    /// <param name="stageType"></param>
    /// <param name="childIndex"></param>
    /// <returns></returns>
    public TrackGroup GetTrackGroup(int skillId, SkillStageType stageType, int childIndex = 0)
    {
        TrackGroup?trackGroup = null;

        if (stageType == SkillStageType.Begin)
        {
            trackGroup = GetSkillBeginStageData(skillId).Group;
        }
        else if (stageType == SkillStageType.Release)
        {
            SkillReleaseChildData childData = GetSkillReleaseChildData(skillId, childIndex);
            trackGroup = childData.Group;
        }
        else if (stageType == SkillStageType.End)
        {
            trackGroup = GetSkillEndStageData(skillId).Group;
        }
        Assert.IsTrue(trackGroup.HasValue, $"CfgEternityProxy::GetTrackGroup->data not exist.id =  {skillId},stageType = {stageType} ,index = {childIndex}");
        return(trackGroup.Value);
    }
        public void OnGUI(Rect rect)
        {
            if (m_ReleaseStageData == null)
            {
                EditorGUI.HelpBox(rect, "Data is Null", MessageType.Error);
                return;
            }

            float deltaHeight = 0.0f;
            Rect  fieldRect   = new Rect(rect.x, rect.y + deltaHeight, rect.width, EditorGUIUtility.singleLineHeight);

            m_ReleaseStageData.IsScaleByTime = EditorGUI.Toggle(fieldRect, "IsScaleByTime", m_ReleaseStageData.IsScaleByTime);

            fieldRect.y += fieldRect.height;
            m_ReleaseStageData.LoopCount = EditorGUI.IntField(fieldRect, "LoopCount", m_ReleaseStageData.LoopCount);
            fieldRect.y += fieldRect.height;
            m_ReleaseStageData.IsDynamicLoopCount = EditorGUI.Toggle(fieldRect, "IsDynamicLoopCount", m_ReleaseStageData.IsDynamicLoopCount);

            fieldRect.y += fieldRect.height + 10;
            EditorGUI.LabelField(fieldRect, "Child Datas:");

            deltaHeight += EditorGUIUtility.singleLineHeight * 5 + 10;

            Rect childRect = new Rect(rect.x, rect.y + deltaHeight, rect.width, rect.height - deltaHeight);

            EditorGUIUtil.DrawAreaLine(childRect, Color.gray);

            Rect childOperationRect = new Rect(rect.x, rect.y + deltaHeight, rect.width, 25);

            using (new GUILayout.AreaScope(childOperationRect))
            {
                using (new GUILayout.HorizontalScope(GUILayout.Height(25)))
                {
                    if (GUILayout.Button("New", GUILayout.Width(CHILD_OPERATION_WIDTH)))
                    {
                        SkillReleaseChildData childData = new SkillReleaseChildData();
                        m_ReleaseStageData.Childs.Add(childData);

                        SelectedChildIndex = m_ReleaseStageData.Childs.Count - 1;
                    }
                    if (GUILayout.Button("Delete", GUILayout.Width(CHILD_OPERATION_WIDTH)))
                    {
                        if (m_ReleaseStageData.Childs.Count > 1)
                        {
                            m_ReleaseStageData.Childs.RemoveAt(SelectedChildIndex);
                            int prevChildIndex = SelectedChildIndex - 1;
                            if (prevChildIndex < 0)
                            {
                                prevChildIndex = 0;
                            }
                            SelectedChildIndex = prevChildIndex;
                        }
                    }

                    GUILayout.FlexibleSpace();

                    if (GUILayout.Button("Prev", GUILayout.Width(CHILD_OPERATION_WIDTH)))
                    {
                        int prevChildIndex = SelectedChildIndex - 1;
                        if (prevChildIndex >= 0)
                        {
                            SelectedChildIndex = prevChildIndex;
                        }
                    }

                    GUILayout.Label("" + (SelectedChildIndex + 1) + "/" + m_ReleaseStageData.Childs.Count);

                    if (GUILayout.Button("Next", GUILayout.Width(CHILD_OPERATION_WIDTH)))
                    {
                        int nextChildIndex = SelectedChildIndex + 1;
                        if (nextChildIndex < m_ReleaseStageData.Childs.Count)
                        {
                            SelectedChildIndex = nextChildIndex;
                        }
                    }
                }
            }
            deltaHeight += childOperationRect.height;

            Rect groupRect = new Rect(rect.x, rect.y + deltaHeight, rect.width, rect.height - deltaHeight);

            DrawGroup(groupRect);
        }