Example #1
0
    private static void DrawProperties(SteamRPC _rpc, SteamRPC.Entry nowEntry, int index)
    {
        if (nowEntry.target == null)
        {
            return;
        }

        var Methods = nowEntry.target.GetType().GetMethods(
            BindingFlags.Instance | BindingFlags.Public);
        Component igorne         = new MonoBehaviour();
        var       igorne_methond = igorne.GetType().GetMethods(
            BindingFlags.Public | BindingFlags.Instance);

        var oldIndex = 0;
        var names    = new List <string> {
            "<None>"
        };
        var avalible_mthods = (from t in Methods let ignore = igorne_methond.Any(t1 => t1.Name == t.Name) where !ignore select t).ToList();

        foreach (var t in avalible_mthods)
        {
            if (t.Name == nowEntry.method_name)
            {
                oldIndex = names.Count;
            }
            names.Add(t.Name);
        }

        var new_index = EditorGUILayout.Popup(oldIndex, names.ToArray());

        GUI.backgroundColor = Color.red;
        var delete = GUILayout.Button("X", GUILayout.Width(24f), GUILayout.Height(14f));

        if (delete)
        {
            _rpc.entries.RemoveAt(index);
            EditorUtility.SetDirty(_rpc);
            return;
        }
        if (new_index == oldIndex)
        {
            return;
        }
        nowEntry.method      = (new_index == 0) ? null : avalible_mthods[new_index - 1];
        nowEntry.method_name = nowEntry.method == null?"<None>": nowEntry.method.Name;
        EditorUtility.SetDirty(_rpc);
    }
Example #2
0
    public override void OnInspectorGUI()
    {
        var rpc = target as SteamRPC;

        var components = GetComponents(rpc);
        var names      = GetComponentNames(components);

        GUILayout.Space(10);
        GUILayout.BeginVertical("Steam Multiplayer RPC", "window", GUILayout.Height(10));
        EditorGUILayout.BeginVertical("box");
        for (var i = 0; i < rpc.entries.Count;)
        {
            GUILayout.BeginHorizontal();
            {
                if (DrawTarget(rpc, i, components, names))
                {
                    DrawProperties(rpc, rpc.entries[i], i);
                    ++i;
                }
            }
            GUILayout.EndHorizontal();
        }
        GUI.backgroundColor = Color.green;

        if (GUILayout.Button("Add a New Sync Function"))
        {
            var ent = new SteamRPC.Entry {
                target = components[0]
            };
            rpc.entries.Add(ent);
            EditorUtility.SetDirty(rpc);
        }
        GUI.backgroundColor = Color.white;
        EditorGUILayout.EndVertical();
        GUILayout.EndVertical();
        //*******************DEBUG*******************
        //   GUILayout.Space(4f);
        //   EditorGUILayout.BeginVertical("box");
        //GUILayout.Label(rpc.entries.Count.ToString());
        //   foreach (var t in rpc.entries)
        //    GUILayout.Label(t.target.GetType() + " -- " +t.MethodName+"--"+ (t.method == null ? "null" : t.method.Name));
        //   GUILayout.Label(rpc.mList.Count.ToString());
        //foreach (var t in rpc.mList)
        //    GUILayout.Label(t.target.GetType() + " -- " + t.MethodName + "--" + (t.method == null ? "null" : t.method.Name));
        //EditorGUILayout.EndVertical();
        //*******************DEBUG*******************
    }