private GhostAuthoringComponent.ComponentOverride AddModifier(string fullTypeName, GameObject gameObject) { var modifier = new GhostAuthoringComponent.ComponentOverride { gameObject = gameObject, fullTypeName = fullTypeName, }; ComponentOverrides.Add(modifier); return(modifier); }
/// <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); }
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(); } } }