Esempio n. 1
0
        private GhostAuthoringComponent.ComponentOverride AddModifier(string fullTypeName, GameObject gameObject)
        {
            var modifier = new GhostAuthoringComponent.ComponentOverride
            {
                gameObject   = gameObject,
                fullTypeName = fullTypeName,
            };

            ComponentOverrides.Add(modifier);
            return(modifier);
        }
Esempio n. 2
0
        /// <summary>
        /// </summary>
        /// <param name="fullTypeName"></param>
        /// <param name="gameObject"></param>
        /// <param name="modifier"></param>
        /// <returns>The index of the modifier and valid modifier instance. -1 if nothing is found. </returns>
        int GetPrefabModifier(string fullTypeName, GameObject gameObject, out GhostAuthoringComponent.ComponentOverride modifier)
        {
            for (int i = 0; i < ComponentOverrides.Count; ++i)
            {
                var element = ComponentOverrides[i];
                if (element.fullTypeName == fullTypeName &&
                    element.gameObject == gameObject)
                {
                    modifier = element;
                    return(i);
                }
            }

            modifier = null;
            return(-1);
        }
Esempio n. 3
0
        private void ShowOverride(GhostAuthoringComponent.ComponentOverride element, int overrideIndex)
        {
            var fullTypeName = element.fullTypeName;

            element.isExpanded = EditorGUILayout.BeginFoldoutHeaderGroup(element.isExpanded, new GUIContent(fullTypeName));
            var rect = GUILayoutUtility.GetLastRect();

            if (element.isExpanded)
            {
                // We don't support more that 1 level of object hierarchy so this check is sufficient to retrieve the
                // entity / child index.
                var transform  = element.gameObject.transform;
                var childIndex = transform.parent == null ? 0 : transform.GetSiblingIndex() + 1;
                EditorGUI.BeginDisabledGroup(true);
                EditorGUILayout.LabelField("Entity Index", childIndex.ToString());
                EditorGUILayout.ObjectField("gameObject", element.gameObject, typeof(GameObject), true);
                if (element.PrefabType != GhostAuthoringComponent.ComponentOverride.UseDefaultValue)
                {
                    EditorGUILayout.LabelField("PrefabType", ((GhostPrefabType)element.PrefabType).ToString());
                }
                if (element.OwnerPredictedSendType != GhostAuthoringComponent.ComponentOverride.UseDefaultValue)
                {
                    EditorGUILayout.LabelField("OwnerPredictedSendType", ((GhostSendType)element.OwnerPredictedSendType).ToString());
                }
                if (element.ComponentVariant != 0)
                {
                    var    value       = element.ComponentVariant;
                    string variantName = null;
                    if (GhostAuthoringModifiers.VariantsCache.TryGetValue(fullTypeName, out var variants))
                    {
                        variantName = variants.Where(v => v.Attribute.VariantHash == value).Select(v => v.Attribute.DisplayName).FirstOrDefault();
                    }
                    if (variantName != null)
                    {
                        EditorGUILayout.LabelField("Variant", variantName);
                    }
                    else
                    {
                        Debug.LogError($"Cannot find variant with hash {value}");
                        EditorGUILayout.LabelField("Variant", "INVALID!!");
                    }
                }
                EditorGUI.EndDisabledGroup();
            }

            EditorGUILayout.EndFoldoutHeaderGroup();
            if (Event.current.type == EventType.MouseDown && Event.current.button == 1)
            {
                if (rect.Contains(Event.current.mousePosition))
                {
                    var menu = new GenericMenu();
                    menu.AddItem(new GUIContent("Remove Modifier"), false, () =>
                    {
                        //Add modifier if not present
                        ComponentOverrides.RemoveAt(overrideIndex);
                        EditorUtility.SetDirty(target);
                    });
                    menu.ShowAsContext();
                }
            }
        }