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); }
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******************* }