public static void UpdateLayerStates(StateMachine machine, StateLayer layer) { foreach (Type stateType in LayerStateDict[layer.GetType()]) { StateMachineUtility.AddState(machine, layer, stateType); } }
private IEnumerator StartGame(FightInfo fightInfo) { StatesUtility.ClearOptionLayer(); yield return(ApplyFightInfos(fightInfo)); yield return(m_ui.GotoVersusAnim()); yield return((object)new WaitForTime(2f)); StateLayer defaultLayer = StateManager.GetDefaultLayer(); StateContext currentState = defaultLayer.GetChildState(); if (currentState != null) { defaultLayer.ClearChildState(0); while ((int)currentState.get_loadState() == 8) { yield return(null); } } FightState fightState = new FightState(fightInfo); defaultLayer.SetChildState(fightState, 0); VersusState versusState = new VersusState(m_ui, fightState); this.SetChildState(versusState, 0); }
void ShowAddSubLayer(StateLayer parent, Rect rect) { layerTypesName[0] = "Add"; if (Selection.gameObjects.Length <= 1) { rect.x = Screen.width - 72 - EditorGUI.indentLevel * 16; rect.y += 1; rect.width = 36 + EditorGUI.indentLevel * 16; EditorGUI.BeginDisabledGroup(Application.isPlaying); GUIStyle style = new GUIStyle("MiniToolbarPopup"); style.fontStyle = FontStyle.Bold; style.alignment = TextAnchor.MiddleCenter; int layerTypeIndex = EditorGUI.Popup(rect, layerTypes.IndexOf(selectedLayerType) + 1, layerTypesName.ToArray(), style) - 1; selectedLayerType = layerTypeIndex == -1 ? null : layerTypes[Mathf.Clamp(layerTypeIndex, 0, layerTypes.Count - 1)]; if (selectedLayerType != null) { StateMachineUtility.AddLayer(machine, selectedLayerType, parent); selectedLayerType = null; } EditorGUI.EndDisabledGroup(); } }
void ShowLayers() { layersProperty = serializedObject.FindProperty("layers"); CleanUpLayers(); ShowAddLayer(); if (layersProperty.arraySize > 0) { Separator(); } for (int i = 0; i < layersProperty.arraySize; i++) { currentLayerProperty = layersProperty.GetArrayElementAtIndex(i); currentLayer = currentLayerProperty.GetValue <StateLayer>(); currentLayerSerialized = new SerializedObject(currentLayerProperty.objectReferenceValue); statesProperty = currentLayerSerialized.FindProperty("states"); currentStatesProperty = currentLayerSerialized.FindProperty("currentStates"); BeginBox(); GUIStyle style = new GUIStyle("foldout"); style.fontStyle = FontStyle.Bold; if (DeleteFoldOut(layersProperty, i, currentLayer.GetType().Name.ToGUIContent(), style, OnLayerDeleted)) { break; } ShowLayer(); EndBox(); } }
public static void RemoveLayer(StateMachine machine, StateLayer layer) { #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); var statesProperty = layerSerialized.FindProperty("stateReferences"); var states = statesProperty.GetValues <UnityEngine.Object>(); for (int i = 0; i < states.Length; i++) { var state = states[i]; var sublayer = state as StateLayer; if (sublayer != null) { RemoveLayer(machine, sublayer); } else { state.Destroy(); } } layer.Destroy(); UpdateCallbacks(machine); #endif }
public static StateLayer AddLayer(StateMachine machine, StateLayer layer, UnityEngine.Object parent) { #if UNITY_EDITOR layer.hideFlags = HideFlags.HideInInspector; var parentSerialized = new UnityEditor.SerializedObject(parent); var layerSerialized = new UnityEditor.SerializedObject(layer); var layersProperty = parentSerialized.FindProperty("stateReferences"); var parentProperty = layerSerialized.FindProperty("parentReference"); if (parentProperty.GetValue <UnityEngine.Object>() == null) { parentProperty.SetValue(parent); } layerSerialized.FindProperty("machineReference").SetValue(machine); layerSerialized.ApplyModifiedProperties(); if (!layersProperty.Contains(layer)) { layersProperty.Add(layer); } UpdateLayerStates(machine, layer); UpdateCallbacks(machine); #endif return(layer); }
public void RemoveState(string stateName, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.RemoveState(stateName); } }
private void SetFocusOnLayer(string layerName) { StateLayer activeInputLayer = default(StateLayer); if (StateManager.TryGetLayer(layerName, ref activeInputLayer)) { StateManager.SetActiveInputLayer(activeInputLayer); } }
public void EnableState(string stateName, float fixedTime, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.EnableState(stateName, fixedTime); } }
public void SetInputWeight(string stateName, float weight, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.SetInputWeight(stateName, weight); } }
public void DisableState(string stateName, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.DisableState(stateName); } }
public void AddState(string stateName, Playable playable, AnimationClip clip, string groupName = null, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.AddState(stateName, false, playable, clip, groupName); } }
public static void UpdateLayerStates(StateMachine machine, StateLayer layer) { var types = LayerTypeStateTypeDict[layer.GetType()]; for (int i = 0; i < types.Count; i++) { AddState(machine, layer, types[i]); } }
void OnLayerAdded(SerializedProperty arrayProperty) { AddToArray(arrayProperty); StateLayer newLayer = stateMachineObject.AddComponent(selectedLayerType) as StateLayer; newLayer.machine = stateMachine; newLayer.hideFlags = HideFlags.HideInInspector; arrayProperty.GetLastArrayElement().SetValue(newLayer); }
public void Crossfade(string stateName, float fixedTime, bool isNormalnize, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.Crossfade(stateName, fixedTime, isNormalnize); } }
public void AddBlendTree(string stateName, Playable playable, BlendTreeConfig[] configs, string blendTreeParam, string groupName = null, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { stateLayer.AddState(stateName, true, playable, null, groupName, configs, blendTreeParam); } }
public static State AddState(StateMachine machine, StateLayer layer, Type stateType) { State state = null; #if UNITY_EDITOR state = AddState(machine, layer, machine.GetOrAddComponent(stateType) as State); #endif return(state); }
public static StateLayer AddLayer(StateMachine machine, Type layerType, UnityEngine.Object parent) { StateLayer layer = null; #if UNITY_EDITOR layer = AddLayer(machine, machine.GetOrAddComponent(layerType) as StateLayer, parent); #endif return(layer); }
public void ReducePanel() { m_isOpen = false; StateLayer val = default(StateLayer); if (StateManager.TryGetLayer("PlayerUI", ref val)) { val.GetChainRoot().ClearChildState(0); } }
private void OnOptionsClosed() { StateLayer val = default(StateLayer); if (StateManager.TryGetLayer("OptionUI", ref val)) { StateManager.DiscardInputLayer(val); UIManager.instance.NotifyLayerIndexChange(); } }
private void OpenProfileUI() { StateLayer val = default(StateLayer); if (StateManager.TryGetLayer("PlayerUI", ref val)) { ProfileState profileState = new ProfileState(); val.GetChainRoot().GetChildState().SetChildState(profileState, 0); } }
private void OpenDeckUI() { StateLayer val = default(StateLayer); if (StateManager.TryGetLayer("PlayerUI", ref val)) { DeckMainState deckMainState = new DeckMainState(); val.GetChainRoot().GetChildState().SetChildState(deckMainState, 0); } }
public StateInfo AddState(string stateName, Playable playable, AnimationClip clip, string groupName = null, int layer = 0) { StateLayer stateLayer = GetStateLayer(layer); if (stateLayer != null) { return(stateLayer.AddState(stateName, false, playable, clip, groupName)); } return(null); }
private StateLayer GetStateLayer(int layer) { StateLayer stateLayer = null; int index = m_StateLayers.FindIndex((l => l != null && l.layerIndex == layer)); stateLayer = (index == -1) ? stateLayer : m_StateLayers[index]; return(stateLayer); }
public void SetLayerWeight(int layerIndex, float weight) { if (!CheckLayerIfExist(layerIndex)) { return; } StateLayer layer = m_StateLayers[layerIndex]; layer.weight = Mathf.Clamp01(weight); layer.isLayerWeightDirty = true; }
public static bool IsParent(StateLayer layer, UnityEngine.Object parent) { bool isParent = false; #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); isParent = layerSerialized.FindProperty("parentReference").GetValue <UnityEngine.Object>() == parent; #endif return(isParent); }
public static StateLayer AddLayer(StateMachine machine, State state) { StateLayer layer = null; #if UNITY_EDITOR layer = AddLayer(machine, GetLayerTypeFromState(state), machine); AddState(machine, layer, state); #endif return(layer); }
public static void ShowApplicationError(PopupInfo popupInfo) { StateLayer val = default(StateLayer); if (!StateManager.TryGetLayer("application", ref val)) { val = StateManager.AddLayer("application"); } StateManager.SetActiveInputLayer(val); popupInfo.style = PopupStyle.Error; Show(val, popupInfo); }
public override void OnEnable() { base.OnEnable(); layer = (StateLayer)target; if (layer.Machine == null) { Type layerType = layer.GetType(); StateMachine machine = layer.CachedGameObject.GetOrAddComponent<StateMachine>(); StateMachineUtility.AddLayer(machine, layerType, machine); } }
protected override IEnumerator Update() { yield return(m_ui.PlayEnterAnimation(GetWeaponsList())); StateLayer val = default(StateLayer); if (StateManager.TryGetLayer("PlayerUI", ref val)) { m_subState = new DeckEditState(); m_subState.OnCloseComplete += BackFromEditionState; val.GetChainEnd().SetChildState(m_subState, 0); } }
public static State AddState(StateMachine machine, StateLayer layer, Type stateType) { State state = null; #if UNITY_EDITOR state = Array.Find(machine.GetComponents(stateType), component => component.GetType() == stateType) as State; state = state == null?machine.gameObject.AddComponent(stateType) as State : state; state = AddState(machine, layer, state); #endif return(state); }
public static bool IsParent(StateLayer layer, UnityEngine.Object parent) { bool isParent = false; #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); isParent = layerSerialized.FindProperty("parentReference").GetValue<UnityEngine.Object>() == parent; #endif return isParent; }
public static StateLayer[] GetSubLayersRecursive(StateLayer layer) { var subLayers = new List<StateLayer>(); #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); var subLayersProperty = layerSerialized.FindProperty("stateReferences"); for (int i = 0; i < subLayersProperty.arraySize; i++) { var subLayer = subLayersProperty.GetValue(i) as StateLayer; if (subLayer != null) { subLayers.Add(subLayer); subLayers.AddRange(GetSubLayersRecursive(subLayer)); } } #endif return subLayers.ToArray(); }
void ShowLayers() { layersProperty = serializedObject.FindProperty("layers"); CleanUpLayers(); ShowAddLayer(); if (layersProperty.arraySize > 0) { Separator(); } for (int i = 0; i < layersProperty.arraySize; i++) { currentLayerProperty = layersProperty.GetArrayElementAtIndex(i); currentLayer = currentLayerProperty.GetValue<StateLayer>(); currentLayerSerialized = new SerializedObject(currentLayerProperty.objectReferenceValue); statesProperty = currentLayerSerialized.FindProperty("states"); currentStatesProperty = currentLayerSerialized.FindProperty("currentStates"); BeginBox(); GUIStyle style = new GUIStyle("foldout"); style.fontStyle = FontStyle.Bold; if (DeleteFoldOut(layersProperty, i, currentLayer.GetType().Name.ToGUIContent(), style, OnLayerDeleted)) { break; } ShowLayer(); EndBox(); } }
public static State AddState(StateMachine machine, StateLayer layer, Type stateType) { State state = null; #if UNITY_EDITOR state = AddState(machine, layer, machine.GetOrAddComponent(stateType) as State); #endif return state; }
public static void UpdateLayerStates(StateMachine machine, StateLayer layer) { var types = LayerTypeStateTypeDict[layer.GetType()]; for (int i = 0; i < types.Count; i++) AddState(machine, layer, types[i]); }
public static void AddMissingStates(StateMachine machine, StateLayer layer) { #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); var statesProperty = layerSerialized.FindProperty("stateReferences"); var stateTypes = LayerTypeStateTypeDict[layer.GetType()]; for (int i = 0; i < stateTypes.Count; i++) { var stateType = stateTypes[i]; if (statesProperty != null && !Array.Exists(statesProperty.GetValues<UnityEngine.Object>(), state => state.GetType() == stateType)) AddState(machine, layer, stateType); } #endif }
public static StateLayer AddLayer(StateMachine machine, StateLayer layer, UnityEngine.Object parent) { #if UNITY_EDITOR layer.hideFlags = HideFlags.HideInInspector; var parentSerialized = new UnityEditor.SerializedObject(parent); var layerSerialized = new UnityEditor.SerializedObject(layer); var layersProperty = parentSerialized.FindProperty("stateReferences"); var parentProperty = layerSerialized.FindProperty("parentReference"); if (parentProperty.GetValue<UnityEngine.Object>() == null) parentProperty.SetValue(parent); layerSerialized.FindProperty("machineReference").SetValue(machine); layerSerialized.ApplyModifiedProperties(); if (!layersProperty.Contains(layer)) layersProperty.Add(layer); UpdateLayerStates(machine, layer); UpdateCallbacks(machine); #endif return layer; }
void ShowStates(SerializedProperty statesProperty, StateLayer layer) { for (int i = 0; i < statesProperty.arraySize; i++) { SerializedProperty stateProperty = statesProperty.GetArrayElementAtIndex(i); State state = stateProperty.GetValue<UnityEngine.Object>() as State; if (state == null) { ShowLayer(statesProperty, i); continue; } BeginBox(GetBoxStyle(state)); Foldout(stateProperty, StateMachineUtility.FormatState(state.GetType(), layer).ToGUIContent(), GetStateStyle(state)); Reorderable(statesProperty, i, true); ShowState(stateProperty); EndBox(); } }
void ShowLayerOptions(StateLayer layer, Rect rect) { bool isScrolling = (Screen.width - rect.xMax) > 5; GUIStyle style = new GUIStyle("MiniToolbarPopup"); style.fontStyle = FontStyle.Bold; rect.x = Screen.width - (isScrolling ? 60 : 45) - EditorGUI.indentLevel * 15; rect.y += 1; rect.width = 24 + EditorGUI.indentLevel * 15; if (!Application.isPlaying && (Event.current.type == EventType.ExecuteCommand || rect.Contains(Event.current.mousePosition))) { List<UnityEngine.Object> validParents = new List<UnityEngine.Object>(); List<Type> layerTypes = new List<Type>(); List<string> options = new List<string> { "..." }; bool machineIsParent = StateMachineUtility.IsParent(layer, machine); foreach (KeyValuePair<Type, List<Type>> pair in StateMachineUtility.LayerTypeStateTypeDict) { PropertyInfo layerProperty = pair.Key.GetProperty("Layer", ReflectionExtensions.AllFlags); PropertyInfo machineProperty = pair.Key.GetProperty("Machine", ReflectionExtensions.AllFlags); if ((machineProperty == null || machineProperty.PropertyType.IsInstanceOfType(machine)) && (layerProperty == null || layerProperty.PropertyType.IsInstanceOfType(layer)) && Array.TrueForAll(existingLayers, existingLayer => existingLayer.GetType() != pair.Key)) { layerTypes.Add(pair.Key); options.Add("Add/" + StateMachineUtility.LayerTypeFormattedDict[pair.Key]); } } if (!machineIsParent) { validParents.Add(machine); options.Add("Move To/Machine"); } for (int i = 0; i < existingLayers.Length; i++) { StateLayer existingLayer = existingLayers[i]; if (layer != existingLayer && !StateMachineUtility.IsParent(layer, existingLayer) && !StateMachineUtility.GetSubLayersRecursive(layer).Contains(existingLayer)) { validParents.Add(existingLayer); options.Add("Move To/" + StateMachineUtility.FormatLayer(existingLayer.GetType())); } } options.Add("Copy"); if (EditorPrefs.GetString("Clipboard Layer Type") == layer.GetType().Name) { options.Add("Paste/Layer"); options.Add("Paste/Layer and States"); options.Add("Paste/Layer and Sublayers"); options.Add("Paste/All"); } options.Add("Generate"); if (Selection.gameObjects.Length <= 1) { // int index = EditorGUI.Popup(rect, layerTypes.IndexOf(selectedLayerType) + 1, options.ToArray(), style) - 1; int index = EditorGUI.Popup(rect, 0, options.ToArray(), style) - 1; string option = index == -1 ? "" : options[index + 1]; if (index < layerTypes.Count) { selectedLayerType = index == -1 ? null : layerTypes[Mathf.Clamp(index, 0, options.Count - 1)]; if (selectedLayerType != null) { StateMachineUtility.AddLayer(machine, selectedLayerType, layer); selectedLayerType = null; } } else if (option.StartsWith("Move To")) { UnityEngine.Object parent = validParents[index - layerTypes.Count]; StateMachineUtility.MoveLayerTo(layer, parent); } else if (option.StartsWith("Copy")) { EditorPrefs.SetString("Clipboard Layer Type", layer.GetType().Name); EditorPrefs.SetInt("Clipboard Layer ID", layer.GetInstanceID()); } else if (option.StartsWith("Paste")) { StateLayer layerToCopy = EditorUtility.InstanceIDToObject(EditorPrefs.GetInt("Clipboard Layer ID")) as StateLayer; if (option == "Paste/Layer") { StateMachineUtility.CopyLayer(layer, layerToCopy, false, false); } else if (option == "Paste/Layer and States") { StateMachineUtility.CopyLayer(layer, layerToCopy, true, false); } else if (option == "Paste/Layer and Sublayers") { StateMachineUtility.CopyLayer(layer, layerToCopy, false, true); } else if (option == "Paste/All") { StateMachineUtility.CopyLayer(layer, layerToCopy, true, true); } EditorPrefs.SetString("Clipboard Layer Type", ""); EditorPrefs.SetInt("Clipboard Layer ID", 0); } else if (option.StartsWith("Generate")) { StateMachineGeneratorWindow generator = StateMachineGeneratorWindow.Create(); string layerTypeName = layer.GetTypeName(); string layerScriptPath = AssetDatabaseUtility.GetAssetPath(layerTypeName + ".cs"); generator.Path = string.IsNullOrEmpty(layerScriptPath) ? generator.Path : Path.GetDirectoryName(layerScriptPath); generator.Machine = StateMachineUtility.FormatMachine(machine); generator.Layer = layerTypeName; generator.Inherit = StateMachineUtility.FormatLayer(layer.GetType().BaseType); generator.SubLayer = layer.Layer == null ? "" : StateMachineUtility.FormatLayer(layer.Layer.GetType()); } } } else { EditorGUI.BeginDisabledGroup(Application.isPlaying); EditorGUI.Popup(rect, 0, new[] { "..." }, style); EditorGUI.EndDisabledGroup(); } }
GUIStyle GetLayerStyle(StateLayer layer) { GUIStyle style = new GUIStyle("foldout"); style.fontStyle = FontStyle.Bold; Color textColor = style.normal.textColor * 1.4F; style.normal.textColor = textColor * 0.7F; style.onNormal.textColor = textColor * 0.7F; style.focused.textColor = textColor * 0.85F; style.onFocused.textColor = textColor * 0.85F; style.active.textColor = textColor * 0.85F; style.onActive.textColor = textColor * 0.85F; return style; }
GUIContent GetLayerLabel(StateLayer layer) { string label = layer.GetType().Name; if (Application.isPlaying && PrefabUtility.GetPrefabType(machine) != PrefabType.Prefab) { IState[] activeStates = layer.GetActiveStates(); string[] activeStateNames = new string[activeStates.Length]; for (int i = 0; i < activeStateNames.Length; i++) activeStateNames[i] = activeStates[i] is IStateLayer ? activeStates[i].GetTypeName() : StateMachineUtility.FormatState(activeStates[i].GetType(), layer); label += " (" + activeStateNames.Concat(", ") + ")"; } return label.ToGUIContent(); }
public static void MoveLayerTo(StateLayer layer, UnityEngine.Object parent) { #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); var newParentSerialized = new UnityEditor.SerializedObject(parent); var oldParentProperty = layerSerialized.FindProperty("parentReference"); var oldParentSerialized = new UnityEditor.SerializedObject(oldParentProperty.GetValue<UnityEngine.Object>()); oldParentProperty.SetValue(parent); oldParentSerialized.FindProperty("stateReferences").Remove(layer); newParentSerialized.FindProperty("stateReferences").Add(layer); layerSerialized.ApplyModifiedProperties(); newParentSerialized.ApplyModifiedProperties(); oldParentSerialized.ApplyModifiedProperties(); #endif }
public static void RemoveLayer(StateMachine machine, StateLayer layer) { #if UNITY_EDITOR var layerSerialized = new UnityEditor.SerializedObject(layer); var statesProperty = layerSerialized.FindProperty("stateReferences"); var states = statesProperty.GetValues<UnityEngine.Object>(); for (int i = 0; i < states.Length; i++) { var state = states[i]; var sublayer = state as StateLayer; if (sublayer != null) RemoveLayer(machine, sublayer); else state.Destroy(); } layer.Destroy(); UpdateCallbacks(machine); #endif }
public static State AddState(StateMachine machine, StateLayer layer, Type stateType) { State state = null; #if UNITY_EDITOR state = Array.Find(machine.GetComponents(stateType), component => component.GetType() == stateType) as State; state = state == null ? machine.gameObject.AddComponent(stateType) as State : state; state = AddState(machine, layer, state); #endif return state; }
GUIStyle GetLayerStyle(StateLayer layer) { GUIStyle style = new GUIStyle("foldout"); style.fontStyle = FontStyle.Bold; Color textColor = style.normal.textColor * 1.4F; if (Application.isPlaying && PrefabUtility.GetPrefabType(machine) != PrefabType.Prefab) { textColor = layer.IsActive ? new Color(0, 1, 0, 10) : new Color(1, 0, 0, 10); } style.normal.textColor = textColor * 0.7F; style.onNormal.textColor = textColor * 0.7F; style.focused.textColor = textColor * 0.85F; style.onFocused.textColor = textColor * 0.85F; style.active.textColor = textColor * 0.85F; style.onActive.textColor = textColor * 0.85F; return style; }
public static State AddState(StateMachine machine, StateLayer layer, State state) { #if UNITY_EDITOR state.hideFlags = HideFlags.HideInInspector; var layerSerialized = new UnityEditor.SerializedObject(layer); var stateSerialized = new UnityEditor.SerializedObject(state); var statesProperty = layerSerialized.FindProperty("stateReferences"); stateSerialized.FindProperty("layerReference").SetValue(layer); stateSerialized.FindProperty("machineReference").SetValue(machine); stateSerialized.ApplyModifiedProperties(); if (!statesProperty.Contains(state)) statesProperty.Add(state); #endif return state; }
public static void RemoveLayer(StateLayer layer) { #if UNITY_EDITOR UnityEditor.SerializedObject layerSerialized = new UnityEditor.SerializedObject(layer); UnityEditor.SerializedProperty statesProperty = layerSerialized.FindProperty("stateReferences"); foreach (UnityEngine.Object state in statesProperty.GetValues<UnityEngine.Object>()) { if (state is StateLayer) { RemoveLayer(state as StateLayer); } else { state.Remove(); } } layer.Remove(); #endif }
public static void CopyLayer(StateLayer layer, StateLayer layerToCopy, bool copyStates, bool copySublayers) { #if UNITY_EDITOR if (layerToCopy == null) return; var layerSerialized = new UnityEditor.SerializedObject(layer); var parentReference = layerSerialized.FindProperty("parentReference").GetValue<UnityEngine.Object>(); var machineReference = layerSerialized.FindProperty("machineReference").GetValue<UnityEngine.Object>(); var stateReferences = layerSerialized.FindProperty("stateReferences").GetValues<UnityEngine.Object>(); var activeStateReferences = layerSerialized.FindProperty("activeStateReferences").GetValues<UnityEngine.Object>(); UnityEditorInternal.ComponentUtility.CopyComponent(layerToCopy); UnityEditorInternal.ComponentUtility.PasteComponentValues(layer); layerSerialized = new UnityEditor.SerializedObject(layer); layerSerialized.FindProperty("parentReference").SetValue(parentReference); layerSerialized.FindProperty("machineReference").SetValue(machineReference); layerSerialized.FindProperty("stateReferences").SetValues(stateReferences); layerSerialized.FindProperty("activeStateReferences").SetValues(activeStateReferences); for (int i = 0; i < stateReferences.Length; i++) { var stateReference = stateReferences[i]; var state = stateReference as State; var sublayer = stateReference as StateLayer; if (copyStates && state != null) { var stateToCopy = layerToCopy.GetState(state.GetType()) as State; if (stateToCopy != null) CopyState(state, stateToCopy); } if (copySublayers && sublayer != null) { var sublayerToCopy = layerToCopy.GetState(sublayer.GetType()) as StateLayer; if (sublayerToCopy != null) CopyLayer(sublayer, sublayerToCopy, copyStates, copySublayers); } } #endif }
public static void AddMissingStates(StateMachine machine, StateLayer layer) { #if UNITY_EDITOR UnityEditor.SerializedObject layerSerialized = new UnityEditor.SerializedObject(layer); UnityEditor.SerializedProperty statesProperty = layerSerialized.FindProperty("stateReferences"); foreach (Type stateType in LayerStateDict[layer.GetType()]) { if (!Array.Exists(statesProperty.GetValues<UnityEngine.Object>(), state => state.GetType() == stateType)) { AddState(machine, layer, stateType); } } #endif }
public static string FormatState(Type stateType, StateLayer layer) { return FormatState(stateType, GetLayerPrefix(layer)); }
public static string GetLayerPrefix(StateLayer layer) { return GetLayerPrefix(layer.GetType()); }