void initResources()
    {
        subwindowNames = new string[] { "Profile", "Cluster View", "Cluster Command", "Command Executor", "CommandGraph" };

        hintTexture    = FduEditorGUI.getHintIcon();
        warningTexture = FduEditorGUI.getWarningIcon();
    }
    //绘制动画控制器所有的参数
    void DrawAnimatorParameters()
    {
        EditorGUILayout.LabelField("Animator Parameters", FduEditorGUI.getTextCenter());
        EditorGUILayout.BeginHorizontal();
        var list = m_target.getParameterList();

        for (int i = 0; i < list.Count; ++i)
        {
            EditorGUILayout.LabelField(list[i].name + "(" + list[i].type + ")");
            if (i % 2 == 1)
            {
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal();
            }
        }
        EditorGUILayout.EndHorizontal();
    }
    void OnGUI()
    {
#if !CLUSTER_ENABLE
        GUI.Label(windowRect, new GUIContent("Cluster Is Disable", warningTexture), FduEditorGUI.getTitleStyle_LevelOne());
        return;
#endif
        //该控制台是主节点还是从节点的提示label
        string nodeText = "";
        if (ClusterHelper.Instance != null && ClusterHelper.Instance.Server != null)
        {
            nodeText = "-MasterNode";
        }
        if (ClusterHelper.Instance != null && ClusterHelper.Instance.Client != null)
        {
            nodeText = "-SlaveNode";
        }

        GUILayout.Label("Console" + nodeText, FduEditorGUI.getTitleStyle_LevelOne(), GUILayout.Width(windowRect.width - 6));
        curSubWindowIndex = GUILayout.Toolbar(curSubWindowIndex, subwindowNames, GUILayout.Width(windowRect.width - 6));

        GUI.Box(new Rect(subWindowRect.x - 3, subWindowRect.y - 3, subWindowRect.width + 6, subWindowRect.height + 6), "");

        if (subwindows != null)
        {
            //窗口发生切换 触发OnExit和OnEnter函数
            if (oldSubWindowIndex != curSubWindowIndex)
            {
                if (oldSubWindowIndex >= 0)
                {
                    subwindows[oldSubWindowIndex].OnExit();
                }
                subwindows[curSubWindowIndex].OnEnter();
                oldSubWindowIndex = curSubWindowIndex;
            }
            try
            {
                subwindows[curSubWindowIndex].DrawSubWindow();
            }
            catch (System.ArgumentException) { } //由于非运行和运行状态切换时 某几帧会报错 错误原因上不明了 但不影响运行
        }
        else
        {
            initSubwindowInstance();
        }
    }
    //绘制自定义监控属性功能面板
    protected void DrawAttributeField()
    {
        GUIStyle style = new GUIStyle();

        style.alignment = TextAnchor.MiddleCenter;
        EditorGUILayout.LabelField(new GUIContent("Observed Attributes", FduEditorGUI.getAttributeIcon()), style);
        EditorGUILayout.BeginHorizontal();

        if (Application.isPlaying)
        {
            states = new System.Collections.Specialized.BitVector32(((FduMultiAttributeObserverBase)target).getObservedIntData());
        }

        string [] attrList = getAttributeList();
        if (attrList == null)
        {
            return;
        }
        for (int i = 1; i < attrList.Length; ++i)
        {
            if (!Application.isPlaying)
            {
                states[FduGlobalConfig.BIT_MASK[i]] = EditorGUILayout.Toggle(attrList[i], states[FduGlobalConfig.BIT_MASK[i]]);
            }
            else
            {
                EditorGUILayout.Toggle(attrList[i], states[FduGlobalConfig.BIT_MASK[i]]);
            }

            if (i % 2 == 0)
            {
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal();
            }
        }
        EditorGUILayout.EndHorizontal();
    }
    //绘制子窗口
    public override void DrawSubWindow()
    {
        var leftOffset = new GUIStyle();

        leftOffset.margin.left = 10;
        if (!Application.isPlaying)
        {
            GUI.Label(subWindowRect, new GUIContent("You can get the information of cluster views at run time", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
            return;
        }

        //画两个Box 上面用于列表 下面用于详细内容
        GUI.Box(viewScroll, "");
        GUI.Box(detailScroll, "");

        views = FduClusterViewManager.getClusterViews();

        FduClusterView view = null;

        //==========================================搜索与总数部分Start===================================
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));
        EditorGUILayout.LabelField("Total views ", FduClusterViewManager.getViewCount().ToString(), leftOffset);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));


        searchText_view = EditorGUILayout.TextField("Search", searchText_view, GUILayout.Width(subWindowRect.width * 0.5f), GUILayout.Height(20));
        EditorGUILayout.Space();
        if (GUILayout.Button("Clear", GUILayout.Height(21)))
        {
            Debug.Log("click clear");
            searchText_view = "";
            searchingFlag   = false;
            EditorGUI.FocusTextInControl("");
        }
        if (GUILayout.Button("Search", GUILayout.Height(21)))
        {
            searchingFlag = true;
            EditorGUI.FocusTextInControl("");
        }
        EditorGUILayout.EndHorizontal();
        //==========================================搜索与总数部分End===================================


        //==========================================View列表部分Start===================================
        leftOffset.margin.left += 15;
        //var center = new GUIStyle();
        //center.alignment = TextAnchor.MiddleCenter;
        var labelStyle = new GUIStyle();

        labelStyle.fontStyle = FontStyle.Bold;
        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));
        EditorGUILayout.LabelField("ViewId", labelStyle, GUILayout.Width(viewScroll.width * 0.07f));
        EditorGUILayout.LabelField("Name", labelStyle, GUILayout.Width(viewScroll.width * 0.25f));
        EditorGUILayout.LabelField("Path", labelStyle, GUILayout.Width(viewScroll.width * 0.5f));
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Space();


        var Nonestyle = new GUIStyle();

        Nonestyle.name = "a";

        viewScrollPos = EditorGUILayout.BeginScrollView(viewScrollPos, leftOffset, GUILayout.Width(viewScroll.width - 10), GUILayout.Height(viewScroll.height - 10));
        string id, name, path;

        float len1, len2, len3, len4;

        len1 = viewScroll.width * 0.07f;
        len2 = viewScroll.width * 0.25f;
        len3 = viewScroll.width * 0.5f;
        len4 = viewScroll.width * 0.1f;

        int listCount = 0;

        while (views.MoveNext())
        {
            view = views.Current.Value;
            if (view == null)
            {
                //EditorGUILayout.HelpBox("One view is disappeared but reference still exist in cluster manager!", MessageType.Warning);
            }
            else
            {
                id   = view.ViewId.ToString();
                name = view.name;
                path = FduSupportClass.getGameObjectPath(view.gameObject);
                if (!searchingFlag || checkSearchText(id, name, path))
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(id, GUILayout.Width(len1));
                    EditorGUILayout.LabelField(name, GUILayout.Width(len2));
                    EditorGUILayout.LabelField(path, GUILayout.Width(len3));
                    if (GUILayout.Button("Detail", GUILayout.Width(len4)))
                    {
                        selectedViewId = views.Current.Value.ViewId;
                    }
                    EditorGUILayout.EndHorizontal();
                    listCount++;
                }
            }
        }
        bool noViewFlag = false;

        if (listCount == 0)
        {
            noViewFlag = true;
        }


        //为了强制显示scroll view 的进度条 BeginScrollView里面的alwaysShowVertical参数没用
        for (int i = listCount; i < 22; ++i)
        {
            EditorGUILayout.LabelField("");
        }
        EditorGUILayout.EndScrollView();

        if (noViewFlag)
        {
            GUI.Label(viewScroll, new GUIContent("No Registed View", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
        }



        //for (int i = 0; i < 500; ++i)
        //{
        //    EditorGUILayout.BeginHorizontal();
        //    EditorGUILayout.LabelField(i.ToString(), GUILayout.Width(len1));
        //    EditorGUILayout.LabelField("tentententententenssssssssssssssssssssss", GUILayout.Width(len2));
        //    EditorGUILayout.LabelField("miao/ssss/wwww/qqqq/aaaa/zzzz/xxxx/ccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", GUILayout.Width(len3));
        //    GUILayout.Button("Yes" + i, GUILayout.Width(len4));
        //    EditorGUILayout.EndHorizontal();
        //}


        //==========================================View列表部分End===================================

        var selectedView = FduClusterViewManager.getClusterView(selectedViewId);

        if (selectedView == null)
        {
            GUI.Label(detailScroll, new GUIContent("No Selected View", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
            selectedViewId = -1;
            return;
        }


        //==========================================View detail 部分===================================
        leftOffset.margin.top = 25;
        detailScrollPos       = EditorGUILayout.BeginScrollView(detailScrollPos, leftOffset, GUILayout.Width(detailScroll.width - 10), GUILayout.Height(detailScroll.height - 10));
        var pstyle = new GUIStyle();

        pstyle.wordWrap    = true;
        pstyle.margin.left = 5;



        EditorGUILayout.LabelField("ViewId: " + selectedView.ViewId + " GameObject Name: " + selectedView.name + " Observer Count: " + selectedView.getObserverCount(), GUILayout.Width(detailScroll.width - 50.0f));
        EditorGUILayout.LabelField("Path: " + FduSupportClass.getGameObjectPath(selectedView.gameObject), pstyle, GUILayout.Width(detailScroll.width - 50.0f));

        if (selectedView.getObserverCount() <= 0)
        {
            EditorGUILayout.EndScrollView();
            return;
        }

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("GameObject Name", GUILayout.Width(detailScroll.width * 0.3f));
        EditorGUILayout.LabelField("Observer Type", GUILayout.Width(detailScroll.width * 0.3f));
        EditorGUILayout.LabelField("DTS Type", GUILayout.Width(detailScroll.width * 0.2f));
        EditorGUILayout.LabelField("DTS Parameter", GUILayout.Width(detailScroll.width * 0.3f));
        EditorGUILayout.EndHorizontal();

        List <FduObserverBase> .Enumerator observers = selectedView.getObservers();
        string dtsName = "NULL";
        string dtsPara = "NULL";

        while (observers.MoveNext())
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(observers.Current.name, GUILayout.Width(detailScroll.width * 0.3f));
            EditorGUILayout.LabelField(observers.Current.GetType().FullName, GUILayout.Width(detailScroll.width * 0.3f));
            if (observers.Current.getDataTransmitStrategy() != null)
            {
                dtsName = observers.Current.getDataTransmitStrategy().GetType().FullName;
                dtsPara = getDTSParaInfo(observers.Current.getDataTransmitStrategy());
                //dtsPara = observers.Current.getDataTransmitStrategy().getCustomData().ToString();
            }
            EditorGUILayout.LabelField(dtsName, GUILayout.Width(detailScroll.width * 0.2f));
            EditorGUILayout.LabelField(dtsPara, GUILayout.Width(detailScroll.width * 0.3f));
            EditorGUILayout.EndHorizontal();
        }

        //for (int i = 0; i < 10; ++i)
        //{
        //    EditorGUILayout.BeginHorizontal();
        //    EditorGUILayout.LabelField("Observer GameObject name",GUILayout.Width(detailScroll.width*0.3f));
        //    EditorGUILayout.LabelField("FduTransformObserver", GUILayout.Width(detailScroll.width * 0.3f));
        //    EditorGUILayout.LabelField("FduDTS_Direct", GUILayout.Width(detailScroll.width * 0.2f));
        //    EditorGUILayout.LabelField("OnGetPlayerSetIKEvent", GUILayout.Width(detailScroll.width * 0.3f));
        //    EditorGUILayout.EndHorizontal();
        //}
        EditorGUILayout.EndScrollView();
        //==========================================View detail 部分===================================
    }
 public override void DrawSubWindow()
 {
     if (!Application.isPlaying)
     {
         GUI.Label(subWindowRect, new GUIContent("You can get the information of Command graph at run time", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
         return;
     }
     DrawRects();
     if (GUI.Button(refreshButtonPos, "Refresh"))
     {
         RefreshData();
     }
 }
    //通过显示数据 画所有内容
    void DrawRects()
    {
        if (displayNodeList.Count < 1)
        {
            GUI.Label(subWindowRect, new GUIContent("No Command Data", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
        }

        //根据生成的显示数据 画每一个节点
        foreach (displayNode dis in displayNodeList)
        {
            GUI.DrawTexture(new Rect(dis.position.x + dis.position.width * 0.5f * (1 - scale), dis.position.y + dis.position.height * 0.5f * (1 - scale),
                                     dis.position.width * scale, dis.position.height * scale), rectTexture[(int)dis.color]);

            if (scale >= 1.0f)                            //缩放完成后显示Label
            {
                if (dis.state == displayNodeState.normal) //可以正常显示的节点显示信息
                {
                    GUI.Label(dis.position, getShowMessage(dis.nodeData), labelStyle);
                }
                else
                {
                    GUI.Label(dis.position, dis.hideIndex.ToString(), labelStyle);//显示不了的节点显示index 可以由用户通过index查找到对应信息
                }
            }
        }

        //画左侧的颜色标识标签
        GUI.DrawTexture(colorHintLabelPos, colorHintLabelTexture);
        GUI.Label(new Rect(colorHintLabelPos.x, colorHintLabelPos.y - 20, 100, 20), "Rasied Times");
        float interval = colorHintLabelPos.height / (int)colorLevel.Others;

        float x = colorHintLabelPos.x + colorHintLabelPos.width + 5;
        float y = colorHintLabelPos.y + colorHintLabelPos.height - interval * 0.5f;

        GUI.Label(new Rect(x, y, 100, 20), "0~" + (int)colorStep[0]);
        //为每一个颜色添加标签
        for (int i = 1; i < (int)colorLevel.Others; ++i)
        {
            x = colorHintLabelPos.x + colorHintLabelPos.width + 5;
            y = colorHintLabelPos.y + colorHintLabelPos.height - interval * 0.5f - i * interval;
            if (((int)colorStep[i - 1]) < ((int)colorStep[i]))
            {
                GUI.Label(new Rect(x, y, 100, 20), ((int)colorStep[i - 1]) + 1 + "~" + ((int)colorStep[i]));
            }
            else
            {
                GUI.Label(new Rect(x, y, 100, 20), "None");
            }
        }
        var detailStyle = FduEditorGUI.getWordWarp();

        //画下方的Detail部分
        if (hideIndexCount > 0 && scale >= 1.0f)
        {
            GUI.Box(detailScrollPos, "");
            scrollPos = GUI.BeginScrollView(detailScrollPos, scrollPos, new Rect(0, 0, detailScrollPos.width, detailHeight));
            var content = new GUIContent("");
            detailHeight = 0.0f;
            foreach (displayNode dis in displayNodeList)
            {
                if (dis.state != displayNodeState.normal)
                {
                    content.text = dis.getHideInfoString();
                    GUI.Label(new Rect(10, detailHeight, detailScrollPos.width - 10, 15), content, detailStyle); //启动换行了 那么Rect的height形同虚设
                    detailHeight += detailStyle.CalcHeight(content, detailScrollPos.width - 10);
                }
            }
            if (noExecutorCommandList.Count > 0)
            {
                string noExecutorInfo = "No Executor Commands: " + noExecutorCommandList[0];
                for (int i = 1; i < noExecutorCommandList.Count; ++i)
                {
                    noExecutorInfo += ", " + noExecutorCommandList[i];
                }
                content.text = noExecutorInfo;
                GUI.Label(new Rect(10, detailHeight, detailScrollPos.width - 10, 15), content, detailStyle);
                detailHeight += detailStyle.CalcHeight(content, detailScrollPos.width - 10);
            }
            GUI.EndScrollView();
        }
    }
    //绘制窗口
    public override void DrawSubWindow()
    {
        var leftOffset = new GUIStyle();

        leftOffset.margin.left = 10;

        if (!Application.isPlaying)
        {
            GUI.Label(subWindowRect, new GUIContent("You can get the information of cluster Commands at run time", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
            return;
        }

        //==========================================搜索与总数部分Start===================================
        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));
        EditorGUILayout.LabelField("Cached Command Count ", ClusterCommandStatisticClass.instance.getCommandCount().ToString(), leftOffset);
        EditorGUILayout.EndHorizontal();

        //画两个Box 上面用于列表 下面用于详细内容
        GUI.Box(CommandScroll, "");
        GUI.Box(detailScroll, "");

        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));


        searchText_Command = (string)EditorGUILayout.TextField("Search", searchText_Command, GUILayout.Width(subWindowRect.width * 0.5f), GUILayout.Height(20)).Clone();

        EditorGUILayout.Space();
        if (GUILayout.Button("Clear", GUILayout.Height(21)))
        {
            Debug.Log("click clear");
            searchText_Command = "";
            searchingFlag      = false;
            EditorGUI.FocusTextInControl("");
        }
        if (GUILayout.Button("Search", GUILayout.Height(21)))
        {
            searchingFlag = true;
            EditorGUI.FocusTextInControl("");
        }
        EditorGUILayout.EndHorizontal();
        //==========================================搜索与总数部分End===================================


        if (ClusterCommandStatisticClass.instance.getCommandCount() <= 0)
        {
            GUI.Label(CommandScroll, new GUIContent("No Cached Command", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
        }

        //==========================================Command列表部分Start===================================
        leftOffset.margin.left += 15;

        float len1, len2, len3, len4, len5;

        len1 = CommandScroll.width * 0.25f;
        len2 = CommandScroll.width * 0.07f;
        len3 = CommandScroll.width * 0.07f;
        len4 = CommandScroll.width * 0.43f;
        len5 = CommandScroll.width * 0.1f;

        var labelStyle = new GUIStyle();

        labelStyle.fontStyle = FontStyle.Bold;

        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));
        EditorGUILayout.LabelField("Command Name", labelStyle, GUILayout.Width(len1));
        EditorGUILayout.LabelField("Frame", labelStyle, GUILayout.Width(len2));
        EditorGUILayout.LabelField("Parameter Count And Names", labelStyle, GUILayout.Width(len3 * 5));
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Space();

        int listCount = 0;

        CommandScrollPos = EditorGUILayout.BeginScrollView(CommandScrollPos, leftOffset, GUILayout.Width(CommandScroll.width - 10), GUILayout.Height(CommandScroll.height - 10));


        var    enu = ClusterCommandStatisticClass.instance.getStatisticCommandData();
        string CommandName;

        while (enu.MoveNext())
        {
            CommandName = enu.Current.e.getCommandName();
            if (!searchingFlag || checkSearchText(CommandName))
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(CommandName, GUILayout.Width(len1));
                EditorGUILayout.LabelField(enu.Current.frameCount.ToString(), GUILayout.Width(len2));
                EditorGUILayout.LabelField(enu.Current.e.getParameterCount().ToString(), GUILayout.Width(len3));
                EditorGUILayout.LabelField(getCommandParameters(enu.Current.e), GUILayout.Width(len4));
                if (GUILayout.Button("Check", GUILayout.Width(len5)))
                {
                    detailData = new ClusterCommandShowData(enu.Current.e, enu.Current.frameCount);
                }
                EditorGUILayout.EndHorizontal();
                listCount++;
            }
        }

        //为了强制显示scroll view 的进度条 BeginScrollView里面的alwaysShowVertical参数没用
        for (int i = listCount; i < 22; ++i)
        {
            EditorGUILayout.LabelField("");
        }

        EditorGUILayout.EndScrollView();
        //==========================================Command列表部分End===================================

        //==========================================Command detail 部分===================================
        if (detailData == null)
        {
            GUI.Label(detailScroll, new GUIContent("No Selected Command", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
            return;
        }

        leftOffset.margin.top = 25;
        detailScrollPos       = EditorGUILayout.BeginScrollView(detailScrollPos, leftOffset, GUILayout.Width(detailScroll.width - 10), GUILayout.Height(detailScroll.height - 10));


        EditorGUILayout.LabelField("CommandName: " + detailData.e.getCommandName() + " Raised Frame: " + detailData.frameCount + " Parameter Count: " + detailData.e.getParameterCount(), GUILayout.Width(detailScroll.width - 50.0f));

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Parameter Name", GUILayout.Width(detailScroll.width * 0.3f));
        EditorGUILayout.LabelField("Parameter Value", GUILayout.Width(detailScroll.width * 0.3f));
        EditorGUILayout.EndHorizontal();

        var paraMap = detailData.e.getMapEnumerator();

        while (paraMap.MoveNext())
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(paraMap.Current.Key, GUILayout.Width(detailScroll.width * 0.3f));
            EditorGUILayout.LabelField(paraMap.Current.Value.ToString(), GUILayout.Width(detailScroll.width * 0.3f));
            EditorGUILayout.EndHorizontal();
        }

        var collMap = detailData.e.getCollectionsMapEnumerator();

        while (collMap.MoveNext())
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(collMap.Current.Key, GUILayout.Width(detailScroll.width * 0.3f));
            string collectorInfo = getCollectionInfo(collMap.Current.Value);
            EditorGUILayout.LabelField(collectorInfo, FduEditorGUI.getWordWarp(), GUILayout.Width(detailScroll.width * 0.6f));
            EditorGUILayout.EndHorizontal();
        }

        //for (int i = 0; i < 10; ++i)
        //{
        //    EditorGUILayout.BeginHorizontal();
        //    EditorGUILayout.LabelField("Observer GameObject name", GUILayout.Width(detailScroll.width * 0.3f));
        //    EditorGUILayout.LabelField("FduTransformObserver", GUILayout.Width(detailScroll.width * 0.3f));
        //    EditorGUILayout.EndHorizontal();
        //}

        EditorGUILayout.EndScrollView();
        //==========================================Command detail 部分===================================
    }
Esempio n. 9
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        m_target = (FduClusterView)target;

        if (Application.isPlaying)
        {
            EditorGUILayout.LabelField("ViewID", m_target.ViewId.ToString());
        }
        else
        {
            EditorGUILayout.LabelField("ViewID", "Set at run time");
        }

        if (EditorUtility.IsPersistent(m_target.gameObject) && m_target.gameObject.transform.parent == null)
        {
            EditorGUILayout.LabelField("SubviewCount", m_subViewList.arraySize.ToString());
            for (int i = 0; i < m_subViewList.arraySize; ++i)
            {
                EditorGUILayout.LabelField("sub view name", m_subViewList.GetArrayElementAtIndex(i).objectReferenceValue.name);
            }
            EditorGUILayout.BeginHorizontal();
            m_target.IsObservingCreation = EditorGUILayout.Toggle("Observe Creation", m_target.IsObservingCreation);
            if (m_target.IsObservingCreation)
            {
                EditorGUILayout.LabelField("Asset Id", m_assetId.intValue.ToString());
                if (m_assetId.intValue < 0)
                {
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.HelpBox("This Prefab is not added to AssetManager. Please find FduClutserAssetManager and press refresh.", MessageType.Error);
                }
            }
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.BeginHorizontal();
        m_target.IsObservingDestruction = EditorGUILayout.Toggle("Observe Destruction", m_target.IsObservingDestruction);
        m_target.IsObservingActiveState = EditorGUILayout.Toggle("Observe Active State*", m_target.IsObservingActiveState);
        EditorGUILayout.EndHorizontal();


        var bold = new GUIStyle();

        bold.fontStyle     = FontStyle.Bold;
        _advaceSettingFold = EditorGUILayout.Foldout(_advaceSettingFold, "Advance Setting");

        if (_advaceSettingFold)
        {
            EditorGUILayout.BeginHorizontal();
            m_target.IsImmediatelyDeserialize = EditorGUILayout.Toggle("Is ImmediatelyDeserialize", m_target.IsImmediatelyDeserialize);
            m_target.IsAutomaticllySend       = EditorGUILayout.Toggle("Is Automaticlly Send", m_target.IsAutomaticllySend);
            EditorGUILayout.EndHorizontal();
            m_target.resendPriority = (FDUObjectSync.Message.ResendPriority)EditorGUILayout.EnumPopup("Data Resend Priority", m_target.resendPriority);
        }



        if (m_parentView.objectReferenceValue != null)
        {
            EditorGUILayout.LabelField("ParentView", m_parentView.objectReferenceValue.name);
        }

        if (m_target.IsObservingActiveState)
        {
            EditorGUILayout.HelpBox("When you are using observing active state,please review considerations in the document.", MessageType.Info);
        }

        GUIStyle style = new GUIStyle();

        style.alignment = TextAnchor.MiddleCenter;
        EditorGUILayout.LabelField(new GUIContent("Observer List", FduEditorGUI.getObserverIcon()), style);
        if (Application.isPlaying) //程序运行时不允许额外操作
        {
            List <FduObserverBase> .Enumerator enumerator = m_target.getObservers();
            int i = 0;
            while (enumerator.MoveNext())
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(i + " " + enumerator.Current.gameObject.name + "(" + enumerator.Current.GetType().Name + ")");
                EditorGUILayout.EndHorizontal();
                i++;
            }
        }
        else
        {
            SerializedProperty property;
            bool hintFlag = false;
            for (int i = 0; i < m_observerList.arraySize; ++i)
            {
                property = m_observerList.GetArrayElementAtIndex(i);
                if (property.objectReferenceValue == null || !m_target.Equals(((FduObserverBase)(property.objectReferenceValue)).GetClusterView())) //如果obsever列表中的值为空 或者对应observer所属的view不是本view 则需要重新刷新
                {
                    hintFlag = true;
                }
                else
                {
                    EditorGUILayout.LabelField(((FduObserverBase)property.objectReferenceValue).gameObject.name + "(" + ((FduObserverBase)property.objectReferenceValue).GetType().FullName + ")");
                }
            }
            for (int i = 0; i < m_subViewList.arraySize; ++i)
            {
                property = m_subViewList.GetArrayElementAtIndex(i);
                if (property.objectReferenceValue == null)
                {
                    hintFlag = true;
                }
            }
            if (hintFlag)
            {
                Refresh();
            }
            if (GUILayout.Button("Refresh"))
            {
                Refresh();
            }
        }

        if (GUI.changed)
        {
            serializedObject.ApplyModifiedProperties();
            EditorUtility.SetDirty(target);
        }
    }
Esempio n. 10
0
    //绘制子窗口
    public override void DrawSubWindow()
    {
        var leftOffset = new GUIStyle();

        leftOffset.margin.left = 10;

        if (!Application.isPlaying)
        {
            GUI.Label(subWindowRect, new GUIContent("You can get the information of Command Executor at run time", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
            return;
        }

        //画Box背景
        GUI.Box(ExecutorScroll, "");
        //views = FduClusterViewManager.getClusterViews();


        //==========================================搜索与总数部分Start===================================

        if (ClusterHelper.Instance != null && ClusterHelper.Instance.Server != null)
        {
            hintText = "Master Node Command Executors";
        }
        if (ClusterHelper.Instance != null && ClusterHelper.Instance.Client != null)
        {
            hintText = "Slave Node Command Executors";
        }

        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));
        EditorGUILayout.LabelField("Command Executor Count ", FduClusterCommandDispatcher.getExecutorCount().ToString(), leftOffset);
        EditorGUILayout.LabelField(hintText);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));


        searchText_CommandExecutor = EditorGUILayout.TextField("Search", searchText_CommandExecutor, GUILayout.Width(subWindowRect.width * 0.5f), GUILayout.Height(20));
        EditorGUILayout.Space();
        if (GUILayout.Button("Clear", GUILayout.Height(21)))
        {
            searchText_CommandExecutor = "";
            searchingFlag = false;
            EditorGUI.FocusTextInControl("");
        }
        if (GUILayout.Button("Search", GUILayout.Height(21)))
        {
            searchingFlag = true;
            EditorGUI.FocusTextInControl("");
        }
        EditorGUILayout.EndHorizontal();
        //==========================================搜索与总数部分End===================================



        //==========================================Executor列表部分Start===================================
        leftOffset.margin.left += 15;
        var center = new GUIStyle();

        center.alignment = TextAnchor.MiddleCenter;

        float len1, len2, len3, len4, len5;

        len1 = ExecutorScroll.width * 0.3f;
        len2 = ExecutorScroll.width * 0.3f;
        len3 = ExecutorScroll.width * 0.3f;
        len4 = ExecutorScroll.width * 0.43f;
        len5 = ExecutorScroll.width * 0.1f;

        var labelStyle = new GUIStyle();

        labelStyle.fontStyle = FontStyle.Bold;

        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal(leftOffset, GUILayout.Width(subWindowRect.width));
        EditorGUILayout.LabelField("Executor Info", labelStyle, GUILayout.Width(len1));
        EditorGUILayout.LabelField("Observed Command", labelStyle, GUILayout.Width(len2));
        EditorGUILayout.LabelField("Executor Target", labelStyle, GUILayout.Width(len3));
        EditorGUILayout.EndHorizontal();

        if (FduClusterCommandDispatcher.getExecutorCount() <= 0)
        {
            GUI.Label(ExecutorScroll, new GUIContent("No Registed Command Executor", parentWindow.hintTexture), FduEditorGUI.getTitleStyle_LevelOne());
            return;
        }

        EditorGUILayout.Space();

        CommandScrollPos = EditorGUILayout.BeginScrollView(CommandScrollPos, leftOffset, GUILayout.Width(ExecutorScroll.width - 10), GUILayout.Height(ExecutorScroll.height - 10));

        var Executors = FduClusterCommandDispatcher.getExecutors();
        int listCount = 0;

        while (Executors.MoveNext())
        {
            var subExecutors = Executors.Current.Value.ActionMap.GetEnumerator();
            while (subExecutors.MoveNext())
            {
                EditorGUILayout.BeginHorizontal();
                string exeInfo = string.Format("ID:{0} Name:{1}", subExecutors.Current.Key, subExecutors.Current.Value.Method.Name);
                EditorGUILayout.LabelField(exeInfo, GUILayout.Width(len1));
                EditorGUILayout.LabelField(Executors.Current.Key, GUILayout.Width(len2));
                if (subExecutors.Current.Value.Target != null)
                {
                    EditorGUILayout.LabelField(subExecutors.Current.Value.Target.ToString(), GUILayout.Width(len3));
                }
                else
                {
                    EditorGUILayout.LabelField("NULL", GUILayout.Width(len3));
                }
                EditorGUILayout.EndHorizontal();
                listCount++;
            }
        }
        //为了强制显示scroll view 的进度条 BeginScrollView里面的alwaysShowVertical参数没用
        for (int i = listCount; i < 35; ++i)
        {
            EditorGUILayout.LabelField("");
        }
        EditorGUILayout.EndScrollView();

        //==========================================Executor列表部分End===================================
    }