Exemplo n.º 1
0
    public override void OnInspectorGUI()
    {
        TNAutoSync sync = target as TNAutoSync;

        List <Component> components = GetComponents(sync);

        string[] names = GetComponentNames(components);

        for (int i = 0; i < sync.entries.Count;)
        {
            GUILayout.BeginHorizontal();
            {
                if (DrawTarget(sync, i, components, names))
                {
                    DrawProperties(sync, sync.entries[i]);
                    ++i;
                }
            }
            GUILayout.EndHorizontal();
        }

        GUI.backgroundColor = Color.green;

        if (GUILayout.Button("Add a New Synchronized Property"))
        {
            TNAutoSync.SavedEntry ent = new TNAutoSync.SavedEntry();
            ent.target = components[0];
            sync.entries.Add(ent);
#if UNITY_4_7
            EditorUtility.SetDirty(sync);
#else
            UnityEditorExtensions.SetDirty(sync);
#endif
        }
        GUI.backgroundColor = Color.white;

        GUILayout.Space(4f);
        float updates    = EditorGUILayout.FloatField("Updates Per Second", sync.updatesPerSecond);
        bool  persistent = EditorGUILayout.Toggle("Saved On Server", sync.isSavedOnServer);
        bool  important  = EditorGUILayout.Toggle("Important", sync.isImportant);
        bool  owner      = EditorGUILayout.Toggle("Only Owner Syncs", sync.onlyOwnerCanSync);

        if (sync.updatesPerSecond != updates ||
            sync.isSavedOnServer != persistent ||
            sync.isImportant != important ||
            sync.onlyOwnerCanSync != owner)
        {
            sync.updatesPerSecond = updates;
            sync.isSavedOnServer  = persistent;
            sync.isImportant      = important;
            sync.onlyOwnerCanSync = owner;
#if UNITY_4_7
            EditorUtility.SetDirty(sync);
#else
            UnityEditorExtensions.SetDirty(sync);
#endif
        }
    }
Exemplo n.º 2
0
    static bool DrawTarget(TNAutoSync sync, int index, List <Component> components, string[] names)
    {
        TNAutoSync.SavedEntry ent = sync.entries[index];

        if (ent.target == null)
        {
            ent.target = components[0];
#if UNITY_4_7
            EditorUtility.SetDirty(sync);
#else
            UnityEditorExtensions.SetDirty(sync);
#endif
        }

        int    oldIndex = 0;
        string tname    = (ent.target != null) ? ent.target.GetType().ToString() : "<None>";

        for (int i = 1; i < names.Length; ++i)
        {
            if (names[i] == tname)
            {
                oldIndex = i;
                break;
            }
        }

        GUI.backgroundColor = Color.red;
        bool delete = GUILayout.Button("X", GUILayout.Width(24f));
        GUI.backgroundColor = Color.white;
        int newIndex = EditorGUILayout.Popup(oldIndex, names);

        if (delete)
        {
            sync.entries.RemoveAt(index);
#if UNITY_4_7
            EditorUtility.SetDirty(sync);
#else
            UnityEditorExtensions.SetDirty(sync);
#endif
            return(false);
        }

        if (newIndex != oldIndex)
        {
            ent.target       = (newIndex == 0) ? null : components[newIndex - 1];
            ent.propertyName = "";
#if UNITY_4_7
            EditorUtility.SetDirty(sync);
#else
            UnityEditorExtensions.SetDirty(sync);
#endif
        }
        return(true);
    }
Exemplo n.º 3
0
    static void DrawProperties(TNAutoSync sync, TNAutoSync.SavedEntry saved)
    {
        if (saved.target == null)
        {
            return;
        }

        FieldInfo[] fields = saved.target.GetType().GetFields(
            BindingFlags.Instance | BindingFlags.Public);

        PropertyInfo[] properties = saved.target.GetType().GetProperties(
            BindingFlags.Instance | BindingFlags.Public);

        int           oldIndex = 0;
        List <string> names    = new List <string>();

        names.Add("<None>");

        for (int i = 0; i < fields.Length; ++i)
        {
            if (fields[i].Name == saved.propertyName)
            {
                oldIndex = names.size;
            }
            names.Add(fields[i].Name);
        }

        for (int i = 0; i < properties.Length; ++i)
        {
            PropertyInfo pi = properties[i];

            if (pi.CanWrite && pi.CanRead)
            {
                if (pi.Name == saved.propertyName)
                {
                    oldIndex = names.size;
                }
                names.Add(pi.Name);
            }
        }

        int newIndex = EditorGUILayout.Popup(oldIndex, names.ToArray(), GUILayout.Width(90f));

        if (newIndex != oldIndex)
        {
            saved.propertyName = (newIndex == 0) ? "" : names[newIndex];
#if UNITY_4_7
            EditorUtility.SetDirty(sync);
#else
            UnityEditorExtensions.SetDirty(sync);
#endif
        }
    }
Exemplo n.º 4
0
    static List <Component> GetComponents(TNAutoSync sync)
    {
        Component[] comps = sync.GetComponents <Component>();

        List <Component> list = new List <Component>();

        for (int i = 0, imax = comps.Length; i < imax; ++i)
        {
            if (comps[i] != sync && comps[i].GetType() != typeof(TNObject))
            {
                list.Add(comps[i]);
            }
        }
        return(list);
    }
Exemplo n.º 5
0
    static void DrawProperties(TNAutoSync sync, TNAutoSync.SavedEntry saved)
    {
        if (saved.target == null) return;

        FieldInfo[] fields = saved.target.GetType().GetFields(
            BindingFlags.Instance | BindingFlags.Public);

        PropertyInfo[] properties = saved.target.GetType().GetProperties(
            BindingFlags.Instance | BindingFlags.Public);

        int oldIndex = 0;
        List<string> names = new List<string>();
        names.Add("<None>");

        for (int i = 0; i < fields.Length; ++i)
        {
            if (TNet.UnityTools.CanBeSerialized(fields[i].FieldType))
            {
                if (fields[i].Name == saved.propertyName) oldIndex = names.size;
                names.Add(fields[i].Name);
            }
        }

        for (int i = 0; i < properties.Length; ++i)
        {
            PropertyInfo pi = properties[i];

            if (TNet.UnityTools.CanBeSerialized(pi.PropertyType) && pi.CanWrite && pi.CanRead)
            {
                if (pi.Name == saved.propertyName) oldIndex = names.size;
                names.Add(pi.Name);
            }
        }

        int newIndex = EditorGUILayout.Popup(oldIndex, names.ToArray(), GUILayout.Width(90f));

        if (newIndex != oldIndex)
        {
            saved.propertyName = (newIndex == 0) ? "" : names[newIndex];
            EditorUtility.SetDirty(sync);
        }
    }
Exemplo n.º 6
0
 static void AddRequiredComponents()
 {
     foreach (GameObject selectedObject in Selection.gameObjects)
     {
         selectedObject.GetOrAdd <Animator> ();
         selectedObject.GetOrAdd <Rigidbody> ();
         selectedObject.GetOrAdd <CharacterAnimator> ();
         selectedObject.GetOrAdd <BodyTransforms> ();
         selectedObject.GetOrAdd <CharacterBody> ();
         selectedObject.GetOrAdd <CharacterSounds> ();
         CapsuleCollider cc = selectedObject.GetComponent <CapsuleCollider> ();
         if (cc != null)
         {
             GameObject.DestroyImmediate(cc);
         }
         if (selectedObject.GetComponent <Animation>() != null)
         {
             GameObject.DestroyImmediate(selectedObject.GetComponent <Animation>());
         }
         TNObject   tnObject   = selectedObject.GetOrAdd <TNObject> ();
         TNAutoSync tnAutoSync = selectedObject.GetOrAdd <TNAutoSync> ();
     }
 }
Exemplo n.º 7
0
    static List<Component> GetComponents(TNAutoSync sync)
    {
        Component[] comps = sync.GetComponents<Component>();

        List<Component> list = new List<Component>();

        for (int i = 0, imax = comps.Length; i < imax; ++i)
        {
            if (comps[i] != sync && comps[i].GetType() != typeof(TNObject))
            {
                list.Add(comps[i]);
            }
        }
        return list;
    }
Exemplo n.º 8
0
    static bool DrawTarget(TNAutoSync sync, int index, List<Component> components, string[] names)
    {
        TNAutoSync.SavedEntry ent = sync.entries[index];

        if (ent.target == null)
        {
            ent.target = components[0];
            EditorUtility.SetDirty(sync);
        }

        int oldIndex = 0;
        string tname = (ent.target != null) ? ent.target.GetType().ToString() : "<None>";

        for (int i = 1; i < names.Length; ++i)
        {
            if (names[i] == tname)
            {
                oldIndex = i;
                break;
            }
        }

        GUI.backgroundColor = Color.red;
        bool delete = GUILayout.Button("X", GUILayout.Width(24f));
        GUI.backgroundColor = Color.white;
        int newIndex = EditorGUILayout.Popup(oldIndex, names);

        if (delete)
        {
            sync.entries.RemoveAt(index);
            EditorUtility.SetDirty(sync);
            return false;
        }

        if (newIndex != oldIndex)
        {
            ent.target = (newIndex == 0) ? null : components[newIndex - 1];
            ent.propertyName = "";
            EditorUtility.SetDirty(sync);
        }
        return true;
    }