Example #1
0
        public void ShowGUI()
        {
            isPlayerLine = CustomGUILayout.Toggle("Player line?", isPlayerLine, "", "If True, the line is spoken by the active Player");
            if (isPlayerLine)
            {
                if (KickStarter.settingsManager != null && KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow)
                {
                    playerID = ChoosePlayerGUI(playerID);
                }
            }
            else
            {
                // For some reason, dynamically generating an ID number for a Char component destroys the component (?!), so we need to store a GameObject instead and convert to Char in the GUI
                Char speakerPrefab = (speakerObject != null) ? speakerObject.GetComponent <Char>() : null;
                speakerPrefab = (Char)CustomGUILayout.ObjectField <Char> ("Speaker prefab:", speakerPrefab, false, "", "The prefab of the character who is speaking the lines on this track");
                speakerObject = (speakerPrefab != null) ? speakerPrefab.gameObject : null;

                if (speakerObject != null)
                {
                    if (speakerObject.GetComponent <ConstantID>() == null || speakerObject.GetComponent <ConstantID>().constantID == 0)
                    {
                        UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (speakerObject, true);
                    }

                    if (speakerObject.GetComponent <ConstantID>())
                    {
                        speakerConstantID = speakerObject.GetComponent <ConstantID>().constantID;
                    }

                    if (speakerObject.GetComponent <ConstantID>() == null || speakerConstantID == 0)
                    {
                        EditorGUILayout.HelpBox("A Constant ID number must be assigned to " + speakerObject + ".  Attach a ConstantID component and check 'Retain in prefab?'", MessageType.Warning);
                    }
                    else
                    {
                        EditorGUILayout.BeginVertical("Button");
                        EditorGUILayout.LabelField("Recorded ConstantID: " + speakerConstantID.ToString(), EditorStyles.miniLabel);
                        EditorGUILayout.EndVertical();
                    }
                }
            }

            playbackMode = (SpeechTrackPlaybackMode)EditorGUILayout.EnumPopup("Playback mode:", playbackMode);

            if (playbackMode == SpeechTrackPlaybackMode.Natural)
            {
                EditorGUILayout.HelpBox("Speech lines will last as long as the settings in the Speech Manager dictate.", MessageType.Info);
            }
            else if (playbackMode == SpeechTrackPlaybackMode.ClipDuration)
            {
                EditorGUILayout.HelpBox("Speech lines will last for the duration of their associated Timeline clip.", MessageType.Info);
            }
        }
Example #2
0
        private int FieldToID <T> (T field, int _constantID) where T : Component
        {
            if (field == null)
            {
                return(_constantID);
            }

            if (field.GetComponent <ConstantID> ())
            {
                if (!field.gameObject.activeInHierarchy && field.GetComponent <ConstantID> ().constantID == 0)
                {
                    UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (field.gameObject, true);
                }
                _constantID = field.GetComponent <ConstantID> ().constantID;
            }
            else
            {
                UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (field.gameObject, true);
                AssetDatabase.SaveAssets();
                _constantID = field.GetComponent <ConstantID> ().constantID;
            }

            return(_constantID);
        }
Example #3
0
        private void SetParametersGUI(List <ActionParameter> externalParameters, List <ActionParameter> ownParameters)
        {
            setParameters = EditorGUILayout.Toggle("Set parameters?", setParameters);
            if (!setParameters)
            {
                return;
            }

            SyncLists(externalParameters, localParameters);

            EditorGUILayout.BeginVertical("Button");
            for (int i = 0; i < externalParameters.Count; i++)
            {
                string label    = externalParameters[i].label;
                int    linkedID = parameterIDs[i];

                localParameters[i].parameterType = externalParameters[i].parameterType;
                if (externalParameters[i].parameterType == ParameterType.GameObject)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GameObject);
                    if (linkedID < 0)
                    {
                        if (isAssetFile)
                        {
                            localParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", localParameters[i].gameObject, typeof(GameObject), true);
                            if (localParameters[i].gameObject != null)
                            {
                                if (!UnityVersionHandler.IsPrefabFile(localParameters[i].gameObject))
                                {
                                    localParameters[i].intValue   = FieldToID(localParameters[i].gameObject, localParameters[i].intValue);
                                    localParameters[i].gameObject = IDToField(localParameters[i].gameObject, localParameters[i].intValue, true);
                                }
                                else
                                {
                                    // A prefab, ask if we want to affect the prefab or the scene-based instance?
                                    localParameters[i].gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", localParameters[i].gameObjectParameterReferences);
                                }
                            }
                            else
                            {
                                localParameters[i].intValue = EditorGUILayout.IntField(label + " (ID #):", localParameters[i].intValue);
                            }
                        }
                        else
                        {
                            // Gameobject
                            localParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", localParameters[i].gameObject, typeof(GameObject), true);
                            localParameters[i].intValue   = 0;
                            if (localParameters[i].gameObject != null && localParameters[i].gameObject.GetComponent <ConstantID>() == null)
                            {
                                UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (localParameters[i].gameObject);
                            }
                        }
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.UnityObject)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.UnityObject);
                    if (linkedID < 0)
                    {
                        localParameters[i].objectValue = (Object)EditorGUILayout.ObjectField(label + ":", localParameters[i].objectValue, typeof(Object), true);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.GlobalVariable)
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GlobalVariable);
                        if (linkedID < 0)
                        {
                            VariablesManager variablesManager = AdvGame.GetReferences().variablesManager;
                            localParameters[i].intValue = ShowVarSelectorGUI(label + ":", variablesManager.vars, localParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.InventoryItem)
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.InventoryItem);
                        if (linkedID < 0)
                        {
                            InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                            localParameters[i].intValue = ShowInvItemSelectorGUI(label + ":", inventoryManager.items, localParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.LocalVariable)
                {
                    if (KickStarter.localVariables)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.LocalVariable);
                        if (linkedID < 0)
                        {
                            localParameters[i].intValue = ShowVarSelectorGUI(label + ":", KickStarter.localVariables.localVars, localParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.String)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.String);
                    if (linkedID < 0)
                    {
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField(label + ":", GUILayout.Width(145f));
                        EditorStyles.textField.wordWrap = true;
                        localParameters[i].stringValue  = EditorGUILayout.TextArea(localParameters[i].stringValue, GUILayout.MaxWidth(400f));
                        EditorGUILayout.EndHorizontal();
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Float)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Float);
                    if (linkedID < 0)
                    {
                        localParameters[i].floatValue = EditorGUILayout.FloatField(label + ":", localParameters[i].floatValue);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Integer)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Integer);
                    if (linkedID < 0)
                    {
                        localParameters[i].intValue = EditorGUILayout.IntField(label + ":", localParameters[i].intValue);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Vector3)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Vector3);
                    if (linkedID < 0)
                    {
                        localParameters[i].vector3Value = EditorGUILayout.Vector3Field(label + ":", localParameters[i].vector3Value);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Boolean)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Boolean);
                    if (linkedID < 0)
                    {
                        BoolValue boolValue = BoolValue.False;
                        if (localParameters[i].intValue == 1)
                        {
                            boolValue = BoolValue.True;
                        }

                        boolValue = (BoolValue)EditorGUILayout.EnumPopup(label + ":", boolValue);

                        if (boolValue == BoolValue.True)
                        {
                            localParameters[i].intValue = 1;
                        }
                        else
                        {
                            localParameters[i].intValue = 0;
                        }
                    }
                }

                parameterIDs[i] = linkedID;
            }
            EditorGUILayout.EndVertical();
        }
Example #4
0
        public static void ShowLocalParametersGUI(List <ActionParameter> localParameters, List <ActionParameter> assetParameters, bool isAssetFile)
        {
            int numParameters = assetParameters.Count;

            if (numParameters < localParameters.Count)
            {
                localParameters.RemoveRange(numParameters, localParameters.Count - numParameters);
            }
            else if (numParameters > localParameters.Count)
            {
                if (numParameters > localParameters.Capacity)
                {
                    localParameters.Capacity = numParameters;
                }
                for (int i = localParameters.Count; i < numParameters; i++)
                {
                    ActionParameter newParameter = new ActionParameter(ActionListEditor.GetParameterIDArray(localParameters));
                    localParameters.Add(newParameter);
                }
            }

            for (int i = 0; i < numParameters; i++)
            {
                string label = assetParameters[i].label;
                localParameters[i].parameterType = assetParameters[i].parameterType;

                if (Application.isPlaying)
                {
                    EditorGUILayout.LabelField(assetParameters[i].ID.ToString() + ": " + localParameters[i].parameterType.ToString() + " '" + label + "'");
                    EditorGUILayout.LabelField("Current value: '" + localParameters[i].GetLabel() + "'");
                }
                else
                {
                    if (assetParameters[i].parameterType == ParameterType.String)
                    {
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField(label + ":", GUILayout.Width(145f));
                        EditorStyles.textField.wordWrap = true;
                        localParameters[i].stringValue  = EditorGUILayout.TextArea(localParameters[i].stringValue, GUILayout.MaxWidth(400f));
                        EditorGUILayout.EndHorizontal();
                    }
                    else if (assetParameters[i].parameterType == ParameterType.Float)
                    {
                        localParameters[i].floatValue = EditorGUILayout.FloatField(label + ":", localParameters[i].floatValue);
                    }
                    else if (assetParameters[i].parameterType == ParameterType.Integer)
                    {
                        localParameters[i].intValue = EditorGUILayout.IntField(label + ":", localParameters[i].intValue);
                    }
                    else if (assetParameters[i].parameterType == ParameterType.Boolean)
                    {
                        BoolValue boolValue = BoolValue.False;
                        if (localParameters[i].intValue == 1)
                        {
                            boolValue = BoolValue.True;
                        }

                        boolValue = (BoolValue)EditorGUILayout.EnumPopup(label + ":", boolValue);

                        if (boolValue == BoolValue.True)
                        {
                            localParameters[i].intValue = 1;
                        }
                        else
                        {
                            localParameters[i].intValue = 0;
                        }
                    }
                    else if (assetParameters[i].parameterType == ParameterType.GlobalVariable)
                    {
                        if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager)
                        {
                            VariablesManager variablesManager = AdvGame.GetReferences().variablesManager;
                            localParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", variablesManager.vars, localParameters[i].intValue);
                        }
                        else
                        {
                            EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning);
                        }
                    }
                    else if (assetParameters[i].parameterType == ParameterType.InventoryItem)
                    {
                        if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                        {
                            InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                            localParameters[i].intValue = ActionRunActionList.ShowInvItemSelectorGUI(label + ":", inventoryManager.items, localParameters[i].intValue);
                        }
                        else
                        {
                            EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning);
                        }
                    }
                    else if (assetParameters[i].parameterType == ParameterType.LocalVariable)
                    {
                        if (KickStarter.localVariables)
                        {
                            localParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", KickStarter.localVariables.localVars, localParameters[i].intValue);
                        }
                        else
                        {
                            EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning);
                        }
                    }
                    else if (assetParameters[i].parameterType == ParameterType.GameObject)
                    {
                        if (isAssetFile)
                        {
                            // ID
                            localParameters[i].intValue   = EditorGUILayout.IntField(label + " (ID):", localParameters[i].intValue);
                            localParameters[i].gameObject = null;
                        }
                        else
                        {
                            // Gameobject
                            localParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", localParameters[i].gameObject, typeof(GameObject), true);
                            localParameters[i].intValue   = 0;
                            if (localParameters[i].gameObject != null && localParameters[i].gameObject.GetComponent <ConstantID>() == null)
                            {
                                UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (localParameters[i].gameObject);
                            }
                        }
                    }
                    else if (assetParameters[i].parameterType == ParameterType.UnityObject)
                    {
                        localParameters[i].objectValue = (Object)EditorGUILayout.ObjectField(label + ":", localParameters[i].objectValue, typeof(Object), true);
                    }
                    else if (assetParameters[i].parameterType == ParameterType.ComponentVariable)
                    {
                        localParameters[i].variables = (Variables)EditorGUILayout.ObjectField("'" + label + "' component:", localParameters[i].variables, typeof(Variables), true);
                        if (localParameters[i].variables != null)
                        {
                            localParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", localParameters[i].variables.vars, localParameters[i].intValue);
                        }
                    }
                }

                if (i < (numParameters - 1))
                {
                    EditorGUILayout.Space();
                }
            }
        }
        public static GUIData SetParametersGUI(List <ActionParameter> externalParameters, bool isAssetFile, GUIData guiData, List <ActionParameter> ownParameters = null)
        {
            guiData = SyncLists(externalParameters, guiData);

            EditorGUILayout.BeginVertical("Button");
            for (int i = 0; i < externalParameters.Count; i++)
            {
                string label    = externalParameters[i].label;
                int    linkedID = (i < guiData.parameterIDs.Count)
                                                                ? guiData.parameterIDs[i]
                                                                : -1;

                //guiData.fromParameters[i].ID = externalParameters[i].ID;
                guiData.fromParameters[i].parameterType = externalParameters[i].parameterType;
                if (externalParameters[i].parameterType == ParameterType.GameObject)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GameObject);
                    if (linkedID < 0)
                    {
                        if (isAssetFile)
                        {
                            guiData.fromParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", guiData.fromParameters[i].gameObject, typeof(GameObject), true);
                            if (guiData.fromParameters[i].gameObject != null)
                            {
                                if (!UnityVersionHandler.IsPrefabFile(guiData.fromParameters[i].gameObject))
                                {
                                    guiData.fromParameters[i].intValue   = Action.FieldToID(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, false, isAssetFile);
                                    guiData.fromParameters[i].gameObject = Action.IDToField(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, true, false, isAssetFile);
                                }
                                else
                                {
                                    // A prefab, ask if we want to affect the prefab or the scene-based instance?
                                    guiData.fromParameters[i].gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", guiData.fromParameters[i].gameObjectParameterReferences);
                                }
                            }
                            else
                            {
                                guiData.fromParameters[i].intValue = EditorGUILayout.IntField(label + " (ID #):", guiData.fromParameters[i].intValue);
                            }
                        }
                        else
                        {
                            // Gameobject
                            guiData.fromParameters[i].gameObject = (GameObject)EditorGUILayout.ObjectField(label + ":", guiData.fromParameters[i].gameObject, typeof(GameObject), true);
                            guiData.fromParameters[i].intValue   = 0;
                            if (guiData.fromParameters[i].gameObject != null && guiData.fromParameters[i].gameObject.GetComponent <ConstantID>() == null)
                            {
                                UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (guiData.fromParameters[i].gameObject);
                            }
                        }
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.UnityObject)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.UnityObject);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].objectValue = (Object)EditorGUILayout.ObjectField(label + ":", guiData.fromParameters[i].objectValue, typeof(Object), true);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.GlobalVariable)
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GlobalVariable);
                        if (linkedID < 0)
                        {
                            VariablesManager variablesManager = AdvGame.GetReferences().variablesManager;
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", variablesManager.vars, guiData.fromParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.InventoryItem)
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.InventoryItem);
                        if (linkedID < 0)
                        {
                            InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowInvItemSelectorGUI(label + ":", inventoryManager.items, guiData.fromParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Document)
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Document);
                        if (linkedID < 0)
                        {
                            InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowDocumentSelectorGUI(label + ":", inventoryManager.documents, guiData.fromParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required to pass Documents.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.LocalVariable)
                {
                    if (KickStarter.localVariables)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.LocalVariable);
                        if (linkedID < 0)
                        {
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", KickStarter.localVariables.localVars, guiData.fromParameters[i].intValue);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.String)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.String);
                    if (linkedID < 0)
                    {
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField(label + ":", GUILayout.Width(145f));
                        EditorStyles.textField.wordWrap       = true;
                        guiData.fromParameters[i].stringValue = EditorGUILayout.TextArea(guiData.fromParameters[i].stringValue, GUILayout.MaxWidth(400f));
                        EditorGUILayout.EndHorizontal();
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Float)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Float);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].floatValue = EditorGUILayout.FloatField(label + ":", guiData.fromParameters[i].floatValue);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Integer)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Integer);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].intValue = EditorGUILayout.IntField(label + ":", guiData.fromParameters[i].intValue);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Vector3)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Vector3);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].vector3Value = EditorGUILayout.Vector3Field(label + ":", guiData.fromParameters[i].vector3Value);
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.Boolean)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Boolean);
                    if (linkedID < 0)
                    {
                        BoolValue boolValue = BoolValue.False;
                        if (guiData.fromParameters[i].intValue == 1)
                        {
                            boolValue = BoolValue.True;
                        }

                        boolValue = (BoolValue)EditorGUILayout.EnumPopup(label + ":", boolValue);

                        if (boolValue == BoolValue.True)
                        {
                            guiData.fromParameters[i].intValue = 1;
                        }
                        else
                        {
                            guiData.fromParameters[i].intValue = 0;
                        }
                    }
                }
                else if (externalParameters[i].parameterType == ParameterType.ComponentVariable)
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.ComponentVariable);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].variables = (Variables)EditorGUILayout.ObjectField("'" + label + "' component:", guiData.fromParameters[i].variables, typeof(Variables), true);
                        if (guiData.fromParameters[i].variables != null)
                        {
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", guiData.fromParameters[i].variables.vars, guiData.fromParameters[i].intValue);
                        }
                    }
                }

                if (i < guiData.parameterIDs.Count)
                {
                    guiData.parameterIDs[i] = linkedID;
                }

                if (i < externalParameters.Count - 1)
                {
                    EditorGUILayout.Space();
                }
            }
            EditorGUILayout.EndVertical();

            return(guiData);
        }
Example #6
0
        public void ShowGUI(bool isAssetFile, bool onlyEditValues = false, bool readOnly = false)
        {
            if (Application.isPlaying || readOnly)
            {
                EditorGUILayout.LabelField("Type:", parameterType.ToString());
                EditorGUILayout.LabelField("Current value:", "'" + GetLabel() + "'");
                CustomGUILayout.TokenLabel("[param:" + ID.ToString() + "]");
            }
            else
            {
                if (onlyEditValues)
                {
                    EditorGUILayout.LabelField("Type:", parameterType.ToString());
                }
                else
                {
                    parameterType = (ParameterType)EditorGUILayout.EnumPopup("Type:", parameterType);
                }

                switch (parameterType)
                {
                case ParameterType.Boolean:
                    BoolValue boolValue = (intValue == 1) ? BoolValue.True : BoolValue.False;
                    boolValue = (BoolValue)EditorGUILayout.EnumPopup("Default value:", boolValue);
                    intValue  = (boolValue == BoolValue.True) ? 1 : 0;
                    break;

                case ParameterType.Integer:
                    intValue = EditorGUILayout.IntField("Default value:", intValue);
                    break;

                case ParameterType.Float:
                    floatValue = EditorGUILayout.FloatField("Default value:", floatValue);
                    break;

                case ParameterType.String:
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("Default value:", GUILayout.Width(145f));
                    EditorStyles.textField.wordWrap = true;
                    stringValue = EditorGUILayout.TextArea(stringValue, GUILayout.MaxWidth(400f));
                    EditorGUILayout.EndHorizontal();
                    break;

                case ParameterType.Vector3:
                    vector3Value = EditorGUILayout.Vector3Field("Default value:", vector3Value);
                    break;

                case ParameterType.UnityObject:
                    objectValue = (Object)EditorGUILayout.ObjectField("Default value:", objectValue, typeof(Object), true);
                    break;

                case ParameterType.Document:
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                        intValue = ActionRunActionList.ShowDocumentSelectorGUI("Default value:", inventoryManager.documents, intValue);
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required.", MessageType.Warning);
                    }
                    break;

                case ParameterType.InventoryItem:
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                        intValue = ActionRunActionList.ShowInvItemSelectorGUI("Default value:", inventoryManager.items, intValue);
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning);
                    }
                    break;

                case ParameterType.GlobalVariable:
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager)
                    {
                        VariablesManager variablesManager = AdvGame.GetReferences().variablesManager;
                        intValue = ActionRunActionList.ShowVarSelectorGUI("Default value:", variablesManager.vars, intValue);
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning);
                    }
                    break;

                case ParameterType.LocalVariable:
                    if (isAssetFile)
                    {
                        intValue = 0;
                        EditorGUILayout.HelpBox("Local Variable parameters cannot have default values in ActionList Assets.", MessageType.Info);
                    }
                    else
                    {
                        if (KickStarter.localVariables)
                        {
                            intValue = ActionRunActionList.ShowVarSelectorGUI("Default value:", KickStarter.localVariables.localVars, intValue);
                        }
                        else
                        {
                            EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning);
                        }
                    }
                    break;

                case ParameterType.ComponentVariable:
                    if (isAssetFile)
                    {
                        variables = null;
                        intValue  = 0;
                        EditorGUILayout.HelpBox("Component Variable parameters cannot have default values in ActionList Assets.", MessageType.Info);
                    }
                    else
                    {
                        variables = (Variables)EditorGUILayout.ObjectField("Variables component:", variables, typeof(Variables), true);
                        if (variables != null)
                        {
                            intValue = ActionRunActionList.ShowVarSelectorGUI("Default value:", variables.vars, intValue);
                        }
                    }
                    break;

                case ParameterType.GameObject:
                    if (isAssetFile)
                    {
                        gameObject = (GameObject)EditorGUILayout.ObjectField("Default value:", gameObject, typeof(GameObject), true);
                        if (gameObject != null)
                        {
                            if (!UnityVersionHandler.IsPrefabFile(gameObject))
                            {
                                intValue   = Action.FieldToID(gameObject, intValue, false, isAssetFile);
                                gameObject = Action.IDToField(gameObject, intValue, true, false, isAssetFile);
                            }
                            else
                            {
                                // A prefab, ask if we want to affect the prefab or the scene-based instance?
                                gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", gameObjectParameterReferences);
                            }
                        }
                        else
                        {
                            intValue = EditorGUILayout.IntField("Default value (ID #):", intValue);
                        }
                    }
                    else
                    {
                        // Gameobject
                        gameObject = (GameObject)EditorGUILayout.ObjectField("Default value:", gameObject, typeof(GameObject), true);
                        intValue   = 0;
                        if (gameObject != null && gameObject.GetComponent <ConstantID> () == null)
                        {
                            UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (gameObject);
                        }
                    }
                    break;

                default:
                    break;
                }

                CustomGUILayout.TokenLabel("[param:" + ID.ToString() + "]");
            }
        }
        public static GUIData SetParametersGUI(List <ActionParameter> externalParameters, bool isAssetFile, GUIData guiData, List <ActionParameter> ownParameters = null)
        {
            guiData = SyncLists(externalParameters, guiData);

            CustomGUILayout.BeginVertical();
            for (int i = 0; i < externalParameters.Count; i++)
            {
                string label    = externalParameters[i].label;
                string tooltip  = externalParameters[i].description;
                int    linkedID = (i < guiData.parameterIDs.Count)
                                                                ? guiData.parameterIDs[i]
                                                                : -1;

                guiData.fromParameters[i].parameterType = externalParameters[i].parameterType;

                switch (externalParameters[i].parameterType)
                {
                case ParameterType.GameObject:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GameObject);
                    if (linkedID < 0)
                    {
                        if (isAssetFile)
                        {
                            guiData.fromParameters[i].gameObject = (GameObject)CustomGUILayout.ObjectField <GameObject> (label + ":", guiData.fromParameters[i].gameObject, true, string.Empty, tooltip);
                            if (guiData.fromParameters[i].gameObject)
                            {
                                if (!UnityVersionHandler.IsPrefabFile(guiData.fromParameters[i].gameObject))
                                {
                                    guiData.fromParameters[i].intValue   = Action.FieldToID(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, false, isAssetFile);
                                    guiData.fromParameters[i].gameObject = Action.IDToField(guiData.fromParameters[i].gameObject, guiData.fromParameters[i].intValue, true, false, isAssetFile);
                                }
                                else
                                {
                                    // A prefab, ask if we want to affect the prefab or the scene-based instance?
                                    guiData.fromParameters[i].gameObjectParameterReferences = (GameObjectParameterReferences)EditorGUILayout.EnumPopup("GameObject parameter:", guiData.fromParameters[i].gameObjectParameterReferences);
                                }
                            }
                            else
                            {
                                guiData.fromParameters[i].intValue = CustomGUILayout.IntField(label + " (ID #):", guiData.fromParameters[i].intValue, string.Empty, tooltip);
                            }
                        }
                        else
                        {
                            // Gameobject
                            guiData.fromParameters[i].gameObject = (GameObject)CustomGUILayout.ObjectField <GameObject> (label + ":", guiData.fromParameters[i].gameObject, true, string.Empty, tooltip);
                            guiData.fromParameters[i].intValue   = 0;
                            if (guiData.fromParameters[i].gameObject && guiData.fromParameters[i].gameObject.GetComponent <ConstantID>() == null)
                            {
                                UnityVersionHandler.AddConstantIDToGameObject <ConstantID> (guiData.fromParameters[i].gameObject);
                            }
                        }
                    }
                }
                break;

                case ParameterType.UnityObject:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.UnityObject);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].objectValue = (Object)CustomGUILayout.ObjectField <Object> (label + ":", guiData.fromParameters[i].objectValue, true, string.Empty, tooltip);
                    }
                }
                break;

                case ParameterType.GlobalVariable:
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().variablesManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.GlobalVariable, -1, tooltip);
                        if (linkedID < 0)
                        {
                            VariablesManager variablesManager = AdvGame.GetReferences().variablesManager;
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", variablesManager.vars, guiData.fromParameters[i].intValue, tooltip);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A Variables Manager is required to pass Global Variables.", MessageType.Warning);
                    }
                }
                break;

                case ParameterType.InventoryItem:
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.InventoryItem, -1, tooltip);
                        if (linkedID < 0)
                        {
                            InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowInvItemSelectorGUI(label + ":", inventoryManager.items, guiData.fromParameters[i].intValue, tooltip);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required to pass Inventory items.", MessageType.Warning);
                    }
                }
                break;

                case ParameterType.Document:
                {
                    if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Document, -1, tooltip);
                        if (linkedID < 0)
                        {
                            InventoryManager inventoryManager = AdvGame.GetReferences().inventoryManager;
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowDocumentSelectorGUI(label + ":", inventoryManager.documents, guiData.fromParameters[i].intValue, tooltip);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("An Inventory Manager is required to pass Documents.", MessageType.Warning);
                    }
                }
                break;

                case ParameterType.LocalVariable:
                {
                    if (KickStarter.localVariables)
                    {
                        linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.LocalVariable, -1, tooltip);
                        if (linkedID < 0)
                        {
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", KickStarter.localVariables.localVars, guiData.fromParameters[i].intValue, tooltip);
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("A GameEngine prefab is required to pass Local Variables.", MessageType.Warning);
                    }
                }
                break;

                case ParameterType.String:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.String, -1, tooltip);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].stringValue = CustomGUILayout.TextArea(label, guiData.fromParameters[i].stringValue, string.Empty, tooltip);
                    }
                }
                break;

                case ParameterType.Float:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Float, -1, tooltip);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].floatValue = CustomGUILayout.FloatField(label + ":", guiData.fromParameters[i].floatValue, string.Empty, tooltip);
                    }
                }
                break;

                case ParameterType.Integer:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Integer, -1, tooltip);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].intValue = CustomGUILayout.IntField(label + ":", guiData.fromParameters[i].intValue, string.Empty, tooltip);
                    }
                }
                break;

                case ParameterType.Vector3:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Vector3, -1, tooltip);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].vector3Value = CustomGUILayout.Vector3Field(label + ":", guiData.fromParameters[i].vector3Value, string.Empty, tooltip);
                    }
                }
                break;

                case ParameterType.Boolean:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.Boolean, -1, tooltip);
                    if (linkedID < 0)
                    {
                        BoolValue boolValue = BoolValue.False;
                        if (guiData.fromParameters[i].intValue == 1)
                        {
                            boolValue = BoolValue.True;
                        }

                        boolValue = (BoolValue)CustomGUILayout.EnumPopup(label + ":", boolValue, string.Empty, tooltip);

                        if (boolValue == BoolValue.True)
                        {
                            guiData.fromParameters[i].intValue = 1;
                        }
                        else
                        {
                            guiData.fromParameters[i].intValue = 0;
                        }
                    }
                }
                break;

                case ParameterType.ComponentVariable:
                {
                    linkedID = Action.ChooseParameterGUI(label + ":", ownParameters, linkedID, ParameterType.ComponentVariable);
                    if (linkedID < 0)
                    {
                        guiData.fromParameters[i].variables = (Variables)EditorGUILayout.ObjectField("'" + label + "' component:", guiData.fromParameters[i].variables, typeof(Variables), true);
                        if (guiData.fromParameters[i].variables != null)
                        {
                            guiData.fromParameters[i].intValue = ActionRunActionList.ShowVarSelectorGUI(label + ":", guiData.fromParameters[i].variables.vars, guiData.fromParameters[i].intValue);
                        }
                    }
                }
                break;

                default:
                    break;
                }

                if (i < guiData.parameterIDs.Count)
                {
                    guiData.parameterIDs[i] = linkedID;
                }

                if (i < externalParameters.Count - 1)
                {
                    EditorGUILayout.Space();
                }
            }
            CustomGUILayout.EndVertical();

            return(guiData);
        }