Exemple #1
0
        public override void AssignValues(List<ActionParameter> parameters)
        {
            obToMove = AssignFile (parameters, obToMoveParameterID, obToMoveID, obToMove);
            teleporter = AssignFile <Marker> (parameters, markerParameterID, markerID, teleporter);

            if (isPlayer && KickStarter.player)
            {
                obToMove = KickStarter.player.gameObject;
            }
        }
		public override void AssignValues (List<ActionParameter> parameters)
		{
			charToMove = AssignFile <Char> (parameters, charToMoveParameterID, charToMoveID, charToMove);
			marker = AssignFile <Marker> (parameters, markerParameterID, markerID, marker);

			if (isPlayer)
			{
				charToMove = KickStarter.player;
			}
		}
        public override void ShowGUI(List<ActionParameter> parameters)
        {
            parameterID = Action.ChooseParameterGUI ("Moveable object:", parameters, parameterID, ParameterType.GameObject);
            if (parameterID >= 0)
            {
                constantID = 0;
                linkedProp = null;
            }
            else
            {
                linkedProp = (Moveable) EditorGUILayout.ObjectField ("Moveable object:", linkedProp, typeof (Moveable), true);

                constantID = FieldToID <Moveable> (linkedProp, constantID);
                linkedProp = IDToField <Moveable> (linkedProp, constantID, false);
            }

            EditorGUILayout.BeginHorizontal ();
            transformType = (TransformType) EditorGUILayout.EnumPopup (transformType);
            if (transformType != TransformType.CopyMarker)
            {
                toBy = (ToBy) EditorGUILayout.EnumPopup (toBy);
            }
            EditorGUILayout.EndHorizontal ();

            if (transformType == TransformType.CopyMarker)
            {
                markerParameterID = Action.ChooseParameterGUI ("Marker:", parameters, markerParameterID, ParameterType.GameObject);
                if (markerParameterID >= 0)
                {
                    markerID = 0;
                    marker = null;
                }
                else
                {
                    marker = (Marker) EditorGUILayout.ObjectField ("Marker:", marker, typeof (Marker), true);

                    markerID = FieldToID <Marker> (marker, markerID);
                    marker = IDToField <Marker> (marker, markerID, false);
                }

            }
            else
            {
                newVector = EditorGUILayout.Vector3Field ("Vector:", newVector);
            }
            transitionTime = EditorGUILayout.Slider ("Transition time:", transitionTime, 0, 10f);

            if (transitionTime > 0f)
            {
                if (transformType == TransformType.Rotate)
                {
                    doEulerRotation = EditorGUILayout.Toggle ("Euler rotation?", doEulerRotation);
                }
                moveMethod = (MoveMethod) EditorGUILayout.EnumPopup ("Move method", moveMethod);
                if (moveMethod == MoveMethod.CustomCurve)
                {
                    timeCurve = EditorGUILayout.CurveField ("Time curve:", timeCurve);
                }
                willWait = EditorGUILayout.Toggle ("Wait until finish?", willWait);
            }

            AfterRunningOption ();
        }
		override public void ShowGUI (List<ActionParameter> parameters)
		{
			isPlayer = EditorGUILayout.Toggle ("Is Player?", isPlayer);

			if (!isPlayer)
			{
				charToMoveParameterID = Action.ChooseParameterGUI ("Character to move:", parameters, charToMoveParameterID, ParameterType.GameObject);
				if (charToMoveParameterID >= 0)
				{
					charToMoveID = 0;
					charToMove = null;
				}
				else
				{
					charToMove = (Char) EditorGUILayout.ObjectField ("Character to move:", charToMove, typeof (Char), true);
					
					charToMoveID = FieldToID <Char> (charToMove, charToMoveID);
					charToMove = IDToField <Char> (charToMove, charToMoveID, false);
				}
			}

			markerParameterID = Action.ChooseParameterGUI ("Marker to reach:", parameters, markerParameterID, ParameterType.GameObject);
			if (markerParameterID >= 0)
			{
				markerID = 0;
				marker = null;
			}
			else
			{
				marker = (Marker) EditorGUILayout.ObjectField ("Marker to reach:", marker, typeof (Marker), true);
				
				markerID = FieldToID <Marker> (marker, markerID);
				marker = IDToField <Marker> (marker, markerID, false);
			}

			speed = (PathSpeed) EditorGUILayout.EnumPopup ("Move speed:" , speed);
			pathFind = EditorGUILayout.Toggle ("Pathfind?", pathFind);
			if (!pathFind)
			{
				doFloat = EditorGUILayout.Toggle ("Ignore gravity?", doFloat);
			}
			willWait = EditorGUILayout.Toggle ("Wait until finish?", willWait);

			AfterRunningOption ();
		}
Exemple #5
0
        public void Move(Marker _marker, MoveMethod _moveMethod, float _transitionTime, AnimationCurve _timeCurve)
        {
            if (GetComponent <Rigidbody>() && !GetComponent <Rigidbody>().isKinematic)
            {
                GetComponent <Rigidbody>().velocity = GetComponent <Rigidbody>().angularVelocity = Vector3.zero;
            }

            StopCoroutine ("_UpdateMovement");
            transformType = TransformType.CopyMarker;

            if (_transitionTime == 0f)
            {
                isMoving = false;

                transform.localPosition = _marker.transform.localPosition;
                transform.localEulerAngles = _marker.transform.localEulerAngles;
                transform.localScale = _marker.transform.localScale;
            }
            else
            {
                isMoving = true;

                doEulerRotation = false;
                moveMethod = _moveMethod;

                startPosition = transform.localPosition;
                startRotation = transform.localRotation;
                startScale = transform.localScale;

                endPosition = _marker.transform.localPosition;
                endRotation = _marker.transform.localRotation;
                endScale = _marker.transform.localScale;

                moveChangeTime = _transitionTime;
                moveStartTime = Time.time;

                if (moveMethod == MoveMethod.CustomCurve)
                {
                    timeCurve = _timeCurve;
                }
                else
                {
                    timeCurve = null;
                }

                StartCoroutine ("_UpdateMovement");
            }
        }
 public override void AssignValues(List<ActionParameter> parameters)
 {
     linkedProp = AssignFile <Moveable> (parameters, parameterID, constantID, linkedProp);
     marker = AssignFile <Marker> (parameters, markerParameterID, markerID, marker);
 }
Exemple #7
0
        public override void ShowGUI(List<ActionParameter> parameters)
        {
            isPlayer = EditorGUILayout.Toggle ("Is Player?", isPlayer);
            if (!isPlayer)
            {
                obToMoveParameterID = Action.ChooseParameterGUI ("Object to move:", parameters, obToMoveParameterID, ParameterType.GameObject);
                if (obToMoveParameterID >= 0)
                {
                    obToMoveID = 0;
                    obToMove = null;
                }
                else
                {
                    obToMove = (GameObject) EditorGUILayout.ObjectField ("Object to move:", obToMove, typeof(GameObject), true);

                    obToMoveID = FieldToID (obToMove, obToMoveID);
                    obToMove = IDToField (obToMove, obToMoveID, false);
                }
            }

            markerParameterID = Action.ChooseParameterGUI ("Teleport to:", parameters, markerParameterID, ParameterType.GameObject);
            if (markerParameterID >= 0)
            {
                markerID = 0;
                teleporter = null;
            }
            else
            {
                teleporter = (Marker) EditorGUILayout.ObjectField ("Teleport to:", teleporter, typeof (Marker), true);

                markerID = FieldToID <Marker> (teleporter, markerID);
                teleporter = IDToField <Marker> (teleporter, markerID, false);
            }

            positionRelativeTo = (PositionRelativeTo) EditorGUILayout.EnumPopup ("Position relative to:", positionRelativeTo);
            copyRotation = EditorGUILayout.Toggle ("Copy rotation?", copyRotation);

            if (isPlayer)
            {
                snapCamera = EditorGUILayout.Toggle ("Teleport active camera too?", snapCamera);
            }

            AfterRunningOption ();
        }
        public override void ShowGUI()
        {
            if (!settingsManager)
            {
                settingsManager = AdvGame.GetReferences ().settingsManager;
            }

            if (!settingsManager)
            {
                return;
            }

            if (settingsManager.playerSwitching == PlayerSwitching.DoNotAllow)
            {
                EditorGUILayout.HelpBox ("This Action requires Player Switching to be allowed, as set in the Settings Manager.", MessageType.Info);
                return;
            }

            // Create a string List of the field's names (for the PopUp box)
            List<string> labelList = new List<string>();

            int i = 0;
            playerNumber = -1;

            if (settingsManager.players.Count > 0)
            {
                foreach (PlayerPrefab playerPrefab in settingsManager.players)
                {
                    if (playerPrefab.playerOb != null)
                    {
                        labelList.Add (playerPrefab.playerOb.name);
                    }
                    else
                    {
                        labelList.Add ("(Undefined prefab)");
                    }

                    // If a player has been removed, make sure selected player is still valid
                    if (playerPrefab.ID == playerID)
                    {
                        playerNumber = i;
                    }

                    i++;
                }

                if (playerNumber == -1)
                {
                    // Wasn't found (item was possibly deleted), so revert to zero
                    ACDebug.LogWarning ("Previously chosen Player no longer exists!");

                    playerNumber = 0;
                    playerID = 0;
                }

                playerNumber = EditorGUILayout.Popup ("New Player:", playerNumber, labelList.ToArray());
                playerID = settingsManager.players[playerNumber].ID;

                if (AdvGame.GetReferences ().settingsManager == null || !AdvGame.GetReferences ().settingsManager.shareInventory)
                {
                    keepInventory = EditorGUILayout.Toggle ("Transfer inventory?", keepInventory);
                }
                restorePreviousData = EditorGUILayout.Toggle ("Restore position?", restorePreviousData);
                if (restorePreviousData)
                {
                    EditorGUILayout.LabelField ("If first time in game:", EditorStyles.boldLabel);
                }

                newPlayerPosition = (NewPlayerPosition) EditorGUILayout.EnumPopup ("New Player position:", newPlayerPosition);

                if (newPlayerPosition == NewPlayerPosition.ReplaceNPC)
                {
                    newPlayerNPC = (NPC) EditorGUILayout.ObjectField ("NPC to be replaced:", newPlayerNPC, typeof (NPC), true);

                    newPlayerNPC_ID = FieldToID <NPC> (newPlayerNPC, newPlayerNPC_ID);
                    newPlayerNPC = IDToField <NPC> (newPlayerNPC, newPlayerNPC_ID, false);
                }
                else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker)
                {
                    newPlayerMarker = (Marker) EditorGUILayout.ObjectField ("Marker to appear at:", newPlayerMarker, typeof (Marker), true);

                    newPlayerMarker_ID = FieldToID <Marker> (newPlayerMarker, newPlayerMarker_ID);
                    newPlayerMarker = IDToField <Marker> (newPlayerMarker, newPlayerMarker_ID, false);
                }
                else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene)
                {
                    chooseNewSceneBy = (ChooseSceneBy) EditorGUILayout.EnumPopup ("Choose scene by:", chooseNewSceneBy);
                    if (chooseNewSceneBy == ChooseSceneBy.Name)
                    {
                        newPlayerSceneName = EditorGUILayout.TextField ("Scene to appear in:", newPlayerSceneName);
                    }
                    else
                    {
                        newPlayerScene = EditorGUILayout.IntField ("Scene to appear in:", newPlayerScene);
                    }
                }

                if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.AppearAtMarker)
                {
                    EditorGUILayout.Space ();
                    oldPlayer = (OldPlayer) EditorGUILayout.EnumPopup ("Old Player", oldPlayer);

                    if (oldPlayer == OldPlayer.ReplaceWithNPC)
                    {
                        oldPlayerNPC = (NPC) EditorGUILayout.ObjectField ("NPC to replace old Player:", oldPlayerNPC, typeof (NPC), true);

                        oldPlayerNPC_ID = FieldToID <NPC> (oldPlayerNPC, oldPlayerNPC_ID);
                        oldPlayerNPC = IDToField <NPC> (oldPlayerNPC, oldPlayerNPC_ID, false);
                    }
                }
            }

            else
            {
                EditorGUILayout.LabelField ("No players exist!");
                playerID = -1;
                playerNumber = -1;
            }

            EditorGUILayout.Space ();

            AfterRunningOption ();
        }
 public override void AssignValues()
 {
     oldPlayerNPC = AssignFile <NPC> (oldPlayerNPC_ID, oldPlayerNPC);
     newPlayerNPC = AssignFile <NPC> (newPlayerNPC_ID, newPlayerNPC);
     newPlayerMarker = AssignFile <Marker> (newPlayerMarker_ID, newPlayerMarker);
 }
Exemple #10
0
        public override void ShowGUI(List<ActionParameter> parameters)
        {
            chooseSceneBy = (ChooseSceneBy) EditorGUILayout.EnumPopup ("Choose scene by:", chooseSceneBy);
            if (chooseSceneBy == ChooseSceneBy.Name)
            {
                sceneNameParameterID = Action.ChooseParameterGUI ("Scene name:", parameters, sceneNameParameterID, ParameterType.String);
                if (sceneNameParameterID < 0)
                {
                    sceneName = EditorGUILayout.TextField ("Scene name:", sceneName);
                }
            }
            else
            {
                sceneNumberParameterID = Action.ChooseParameterGUI ("Scene number:", parameters, sceneNumberParameterID, ParameterType.Integer);
                if (sceneNumberParameterID < 0)
                {
                    sceneNumber = EditorGUILayout.IntField ("Scene number:", sceneNumber);
                }
            }

            relativePosition = EditorGUILayout.ToggleLeft ("Position Player relative to Marker?", relativePosition);
            if (relativePosition)
            {
                relativeMarkerParameterID = Action.ChooseParameterGUI ("Relative Marker:", parameters, relativeMarkerParameterID, ParameterType.GameObject);
                if (relativeMarkerParameterID >= 0)
                {
                    relativeMarkerID = 0;
                    relativeMarker = null;
                }
                else
                {
                    relativeMarker = (Marker) EditorGUILayout.ObjectField ("Relative Marker:", relativeMarker, typeof(Marker), true);

                    relativeMarkerID = FieldToID (relativeMarker, relativeMarkerID);
                    relativeMarker = IDToField (relativeMarker, relativeMarkerID, false);
                }
            }
            else
            {
                onlyPreload = EditorGUILayout.ToggleLeft ("Don't change scene, just preload data?", onlyPreload);
            }

            if (onlyPreload && !relativePosition)
            {
                if (AdvGame.GetReferences () != null && AdvGame.GetReferences ().settingsManager != null && AdvGame.GetReferences ().settingsManager.useAsyncLoading)
                {}
                else
                {
                    EditorGUILayout.HelpBox ("To pre-load scenes, 'Load scenes asynchronously?' must be enabled in the Settings Manager.", MessageType.Warning);
                }

                AfterRunningOption ();
            }
            else
            {
                assignScreenOverlay = EditorGUILayout.ToggleLeft ("Overlay current screen during switch?", assignScreenOverlay);
            }
        }
Exemple #11
0
 public override void AssignValues(List<ActionParameter> parameters)
 {
     sceneNumber = AssignInteger (parameters, sceneNumberParameterID, sceneNumber);
     sceneName = AssignString (parameters, sceneNameParameterID, sceneName);
     relativeMarker = AssignFile <Marker> (parameters, relativeMarkerParameterID, relativeMarkerID, relativeMarker);
 }
Exemple #12
0
 override public void AssignValues()
 {
     oldPlayerNPC    = AssignFile <NPC> (oldPlayerNPC_ID, oldPlayerNPC);
     newPlayerNPC    = AssignFile <NPC> (newPlayerNPC_ID, newPlayerNPC);
     newPlayerMarker = AssignFile <Marker> (newPlayerMarker_ID, newPlayerMarker);
 }
Exemple #13
0
        override public void ShowGUI()
        {
            if (!settingsManager)
            {
                settingsManager = AdvGame.GetReferences().settingsManager;
            }

            if (!settingsManager)
            {
                return;
            }

            if (settingsManager.playerSwitching == PlayerSwitching.DoNotAllow)
            {
                EditorGUILayout.HelpBox("This Action requires Player Switching to be allowed, as set in the Settings Manager.", MessageType.Info);
                return;
            }

            // Create a string List of the field's names (for the PopUp box)
            List <string> labelList = new List <string>();

            int i = 0;

            playerNumber = -1;

            if (settingsManager.players.Count > 0)
            {
                foreach (PlayerPrefab playerPrefab in settingsManager.players)
                {
                    if (playerPrefab.playerOb != null)
                    {
                        labelList.Add(playerPrefab.playerOb.name);
                    }
                    else
                    {
                        labelList.Add("(Undefined prefab)");
                    }

                    // If a player has been removed, make sure selected player is still valid
                    if (playerPrefab.ID == playerID)
                    {
                        playerNumber = i;
                    }

                    i++;
                }

                if (playerNumber == -1)
                {
                    // Wasn't found (item was possibly deleted), so revert to zero
                    ACDebug.LogWarning("Previously chosen Player no longer exists!");

                    playerNumber = 0;
                    playerID     = 0;
                }

                playerNumber = EditorGUILayout.Popup("New Player:", playerNumber, labelList.ToArray());
                playerID     = settingsManager.players[playerNumber].ID;

                if (AdvGame.GetReferences().settingsManager == null || !AdvGame.GetReferences().settingsManager.shareInventory)
                {
                    keepInventory = EditorGUILayout.Toggle("Transfer inventory?", keepInventory);
                }
                restorePreviousData = EditorGUILayout.Toggle("Restore position?", restorePreviousData);
                if (restorePreviousData)
                {
                    EditorGUILayout.BeginVertical(CustomStyles.thinBox);
                    EditorGUILayout.LabelField("If first time in game:", EditorStyles.boldLabel);
                }

                newPlayerPosition = (NewPlayerPosition)EditorGUILayout.EnumPopup("New Player position:", newPlayerPosition);

                if (newPlayerPosition == NewPlayerPosition.ReplaceNPC)
                {
                    newPlayerNPC = (NPC)EditorGUILayout.ObjectField("NPC to be replaced:", newPlayerNPC, typeof(NPC), true);

                    newPlayerNPC_ID = FieldToID <NPC> (newPlayerNPC, newPlayerNPC_ID);
                    newPlayerNPC    = IDToField <NPC> (newPlayerNPC, newPlayerNPC_ID, false);
                }
                else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker)
                {
                    newPlayerMarker = (Marker)EditorGUILayout.ObjectField("Marker to appear at:", newPlayerMarker, typeof(Marker), true);

                    newPlayerMarker_ID = FieldToID <Marker> (newPlayerMarker, newPlayerMarker_ID);
                    newPlayerMarker    = IDToField <Marker> (newPlayerMarker, newPlayerMarker_ID, false);
                }
                else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene)
                {
                    chooseNewSceneBy = (ChooseSceneBy)EditorGUILayout.EnumPopup("Choose scene by:", chooseNewSceneBy);
                    if (chooseNewSceneBy == ChooseSceneBy.Name)
                    {
                        newPlayerSceneName = EditorGUILayout.TextField("Scene to appear in:", newPlayerSceneName);
                    }
                    else
                    {
                        newPlayerScene = EditorGUILayout.IntField("Scene to appear in:", newPlayerScene);
                    }

                    newPlayerNPC = (NPC)EditorGUILayout.ObjectField("NPC to be replaced:", newPlayerNPC, typeof(NPC), true);

                    newPlayerNPC_ID = FieldToID <NPC> (newPlayerNPC, newPlayerNPC_ID);
                    newPlayerNPC    = IDToField <NPC> (newPlayerNPC, newPlayerNPC_ID, false);
                }

                if (restorePreviousData)
                {
                    EditorGUILayout.EndVertical();
                }

                if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.AppearAtMarker || newPlayerPosition == NewPlayerPosition.AppearInOtherScene)
                {
                    EditorGUILayout.Space();
                    oldPlayer = (OldPlayer)EditorGUILayout.EnumPopup("Old Player:", oldPlayer);

                    if (oldPlayer == OldPlayer.ReplaceWithNPC)
                    {
                        oldPlayerNPC = (NPC)EditorGUILayout.ObjectField("NPC to replace old Player:", oldPlayerNPC, typeof(NPC), true);

                        oldPlayerNPC_ID = FieldToID <NPC> (oldPlayerNPC, oldPlayerNPC_ID);
                        oldPlayerNPC    = IDToField <NPC> (oldPlayerNPC, oldPlayerNPC_ID, false);
                    }
                }
            }

            else
            {
                EditorGUILayout.LabelField("No players exist!");
                playerID     = -1;
                playerNumber = -1;
            }

            EditorGUILayout.Space();

            AfterRunningOption();
        }
        public override void OnInspectorGUI()
        {
            if (AdvGame.GetReferences() == null)
            {
                ACDebug.LogError("A References file is required - please use the Adventure Creator window to create one.");
                EditorGUILayout.LabelField("No References file found!");
            }
            else
            {
                if (AdvGame.GetReferences().inventoryManager)
                {
                    inventoryManager = AdvGame.GetReferences().inventoryManager;
                }
                if (AdvGame.GetReferences().cursorManager)
                {
                    cursorManager = AdvGame.GetReferences().cursorManager;
                }
                if (AdvGame.GetReferences().settingsManager)
                {
                    settingsManager = AdvGame.GetReferences().settingsManager;
                }

                if (Application.isPlaying)
                {
                    if (_target.gameObject.layer != LayerMask.NameToLayer(settingsManager.hotspotLayer))
                    {
                        EditorGUILayout.HelpBox("Current state: OFF", MessageType.Info);
                    }
                }

                if (_target.lineID > -1)
                {
                    EditorGUILayout.LabelField("Speech Manager ID:", _target.lineID.ToString());
                }

                _target.interactionSource = (InteractionSource)EditorGUILayout.EnumPopup("Interaction source:", _target.interactionSource);
                _target.hotspotName       = EditorGUILayout.TextField("Label (if not name):", _target.hotspotName);
                _target.highlight         = (Highlight)EditorGUILayout.ObjectField("Object to highlight:", _target.highlight, typeof(Highlight), true);
                if (AdvGame.GetReferences().settingsManager != null && AdvGame.GetReferences().settingsManager.hotspotDrawing == ScreenWorld.WorldSpace)
                {
                    _target.iconSortingLayer = EditorGUILayout.TextField("Icon sorting layer:", _target.iconSortingLayer);
                    _target.iconSortingOrder = EditorGUILayout.IntField("Icon sprite order:", _target.iconSortingOrder);
                }

                EditorGUILayout.BeginHorizontal();
                _target.centrePoint = (Transform)EditorGUILayout.ObjectField("Centre point (override):", _target.centrePoint, typeof(Transform), true);

                if (_target.centrePoint == null)
                {
                    if (GUILayout.Button("Create", autoWidth))
                    {
                        string     prefabName = "Hotspot centre: " + _target.gameObject.name;
                        GameObject go         = SceneManager.AddPrefab("Navigation", "HotspotCentre", true, false, false);
                        go.name = prefabName;
                        go.transform.position = _target.transform.position;
                        _target.centrePoint   = go.transform;
                        if (GameObject.Find("_Markers"))
                        {
                            go.transform.parent = GameObject.Find("_Markers").transform;
                        }
                    }
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                _target.walkToMarker = (Marker)EditorGUILayout.ObjectField("Walk-to marker:", _target.walkToMarker, typeof(Marker), true);

                if (_target.walkToMarker == null)
                {
                    if (GUILayout.Button("Create", autoWidth))
                    {
                        string prefabName = "Marker";
                        if (settingsManager && settingsManager.IsUnity2D())
                        {
                            prefabName += "2D";
                        }
                        Marker newMarker = SceneManager.AddPrefab("Navigation", prefabName, true, false, true).GetComponent <Marker>();
                        newMarker.gameObject.name   += (": " + _target.gameObject.name);
                        newMarker.transform.position = _target.transform.position;
                        _target.walkToMarker         = newMarker;
                    }
                }
                EditorGUILayout.EndHorizontal();

                _target.limitToCamera = (_Camera)EditorGUILayout.ObjectField("Limit to camera:", _target.limitToCamera, typeof(_Camera), true);
                _target.drawGizmos    = EditorGUILayout.Toggle("Draw yellow cube?", _target.drawGizmos);

                if (settingsManager != null && (settingsManager.interactionMethod == AC_InteractionMethod.ChooseHotspotThenInteraction || settingsManager.interactionMethod == AC_InteractionMethod.ChooseInteractionThenHotspot))
                {
                    _target.oneClick = EditorGUILayout.Toggle("Single 'Use' Interaction?", _target.oneClick);
                }
                if (_target.oneClick || (settingsManager != null && settingsManager.interactionMethod == AC_InteractionMethod.ContextSensitive))
                {
                    _target.doubleClickingHotspot = (DoubleClickingHotspot)EditorGUILayout.EnumPopup("Double-clicking:", _target.doubleClickingHotspot);
                }
                if (settingsManager != null && settingsManager.playerFacesHotspots)
                {
                    _target.playerTurnsHead = EditorGUILayout.Toggle("Turn head active?", _target.playerTurnsHead);
                }

                EditorGUILayout.Space();

                UseInteractionGUI();

                if (settingsManager == null || settingsManager.interactionMethod == AC_InteractionMethod.ContextSensitive || settingsManager.interactionMethod == AC_InteractionMethod.CustomScript)
                {
                    EditorGUILayout.Space();
                    LookInteractionGUI();
                }

                EditorGUILayout.Space();
                InvInteractionGUI();

                EditorGUILayout.Space();
                UnhandledInvInteractionGUI();
            }

            UnityVersionHandler.CustomSetDirty(_target);
        }
        override public void ShowGUI(List <ActionParameter> parameters)
        {
            //Is this the player?
            isPlayer = EditorGUILayout.Toggle("Is Player?", isPlayer);
            if (!isPlayer)
            {
                controlParameterID = Action.ChooseParameterGUI("Character:", parameters, controlParameterID, ParameterType.GameObject);
                if (controlParameterID >= 0)
                {
                    controlConstantID     = 0;
                    interactionController = null;
                }
                else
                {
                    interactionController = (SimpleInteractionSystem)EditorGUILayout.ObjectField("Character:", interactionController, typeof(SimpleInteractionSystem), true);

                    controlConstantID     = FieldToID(interactionController, controlConstantID);
                    interactionController = IDToField(interactionController, controlConstantID, false);
                }
            }

            rightHandTarget = (Transform)EditorGUILayout.ObjectField("Right Hand Target:", rightHandTarget, typeof(Transform), true);
            leftHandTarget  = (Transform)EditorGUILayout.ObjectField("Left Hand Target:", leftHandTarget, typeof(Transform), true);

            //What kind of interaction is going to happen?
            interactionType = (InteractionType)EditorGUILayout.EnumPopup("Interaction Type:", interactionType);

            //If you're going to be picking up the item, send the item to the interaction controller
            if (interactionType == InteractionType.PickUp || interactionType == InteractionType.Use)
            {
                objParameterID = Action.ChooseParameterGUI("Object to Pick Up:", parameters, objParameterID, ParameterType.GameObject);
                if (objParameterID >= 0)
                {
                    objConstantID = 0;
                    intObject     = null;
                }
                else
                {
                    intObject = (SimpleInteractionObject)EditorGUILayout.ObjectField("Object to Pick Up:", intObject, typeof(SimpleInteractionObject), true);

                    objConstantID = FieldToID(intObject, objConstantID);
                    intObject     = IDToField(intObject, objConstantID, false);
                }
            }
            if (interactionType == InteractionType.PickUp)
            {
                rHoldParameterID = Action.ChooseParameterGUI("Right Hold transform:", parameters, rHoldParameterID, ParameterType.GameObject);
                if (rHoldParameterID >= 0)
                {
                    rHoldConstantID = 0;
                    rightHoldPosRot = null;
                }
                else
                {
                    rightHoldPosRot = (Transform)EditorGUILayout.ObjectField("Right Hold transform:", rightHoldPosRot, typeof(Transform), true);

                    rHoldConstantID = FieldToID(rightHoldPosRot, rHoldConstantID);
                    rightHoldPosRot = IDToField(rightHoldPosRot, rHoldConstantID, false);
                }

                lHoldParameterID = Action.ChooseParameterGUI("Left Hold transform:", parameters, lHoldParameterID, ParameterType.GameObject);
                if (lHoldParameterID >= 0)
                {
                    lHoldConstantID = 0;
                    leftHoldPosRot  = null;
                }
                else
                {
                    leftHoldPosRot = (Transform)EditorGUILayout.ObjectField("Left Hold transform:", leftHoldPosRot, typeof(Transform), true);

                    lHoldConstantID = FieldToID(leftHoldPosRot, lHoldConstantID);
                    leftHoldPosRot  = IDToField(leftHoldPosRot, lHoldConstantID, false);
                }
            }

            //If you're going to drop the item, send the place you want to drop it to the interaction controller
            else if (interactionType == InteractionType.Drop)
            {
                markerParameterID = Action.ChooseParameterGUI("Drop at:", parameters, markerParameterID, ParameterType.GameObject);
                if (markerParameterID >= 0)
                {
                    markerID   = 0;
                    dropMarker = null;
                }
                else
                {
                    dropMarker = (Marker)EditorGUILayout.ObjectField("Drop at:", dropMarker, typeof(Marker), true);

                    markerID   = FieldToID <Marker>(dropMarker, markerID);
                    dropMarker = IDToField <Marker>(dropMarker, markerID, false);
                }
            }

            //If you're going to take out the item, select the item from your inventory
            else if (interactionType == InteractionType.TakeOut)
            {
                if (!inventoryManager)
                {
                    inventoryManager = AdvGame.GetReferences().inventoryManager;
                }
                if (!settingsManager)
                {
                    settingsManager = AdvGame.GetReferences().settingsManager;
                }

                if (inventoryManager)
                {
                    // Create a string List of the field's names (for the PopUp box)
                    List <string> labelList = new List <string>();

                    int i = 0;
                    if (parameterID == -1)
                    {
                        invNumber = -1;
                    }

                    if (inventoryManager.items.Count > 0)
                    {
                        foreach (InvItem _item in inventoryManager.items)
                        {
                            labelList.Add(_item.label);

                            // If an item has been removed, make sure selected variable is still valid
                            if (_item.id == invID)
                            {
                                invNumber = i;
                            }

                            i++;
                        }

                        if (invNumber == -1)
                        {
                            ACDebug.LogWarning("Previously chosen item no longer exists!");
                            invNumber = 0;
                            invID     = 0;
                        }

                        parameterID = Action.ChooseParameterGUI("Inventory item:", parameters, parameterID, ParameterType.InventoryItem);
                        if (parameterID >= 0)
                        {
                            invNumber = Mathf.Min(invNumber, inventoryManager.items.Count - 1);
                            invID     = -1;
                        }
                        else
                        {
                            invNumber = EditorGUILayout.Popup("Inventory item:", invNumber, labelList.ToArray());
                            invID     = inventoryManager.items[invNumber].id;
                        }

                        objectPrefab = AC.KickStarter.runtimeInventory.GetItem(invID).linkedPrefab;
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("No inventory items exist!", MessageType.Info);
                        invID     = -1;
                        invNumber = -1;
                    }
                }
            }
            else if (interactionType == InteractionType.Use)
            {
                EditorGUILayout.HelpBox("This interaction will not be called from an animation event.", MessageType.Info);
            }

            AfterRunningOption();
        }
        override public void ShowGUI(List <ActionParameter> parameters)
        {
            isPlayer = EditorGUILayout.Toggle("Is Player?", isPlayer);

            if (!isPlayer)
            {
                charToMoveParameterID = Action.ChooseParameterGUI("Character to move:", parameters, charToMoveParameterID, ParameterType.GameObject);
                if (charToMoveParameterID >= 0)
                {
                    charToMoveID = 0;
                    charToMove   = null;
                }
                else
                {
                    charToMove = (Char)EditorGUILayout.ObjectField("Character to move:", charToMove, typeof(Char), true);

                    charToMoveID = FieldToID <Char> (charToMove, charToMoveID);
                    charToMove   = IDToField <Char> (charToMove, charToMoveID, false);
                }
            }

            markerParameterID = Action.ChooseParameterGUI("Marker to reach:", parameters, markerParameterID, ParameterType.GameObject);
            if (markerParameterID >= 0)
            {
                markerID = 0;
                marker   = null;

                EditorGUILayout.HelpBox("If a Hotspot is passed to this parameter, that Hotspot's 'Walk-to Marker' will be referred to.", MessageType.Info);
            }
            else
            {
                marker = (Marker)EditorGUILayout.ObjectField("Marker to reach:", marker, typeof(Marker), true);

                markerID = FieldToID <Marker> (marker, markerID);
                marker   = IDToField <Marker> (marker, markerID, false);
            }

            speed    = (PathSpeed)EditorGUILayout.EnumPopup("Move speed:", speed);
            pathFind = EditorGUILayout.Toggle("Pathfind?", pathFind);
            if (!pathFind)
            {
                doFloat = EditorGUILayout.Toggle("Ignore gravity?", doFloat);
            }
            willWait = EditorGUILayout.Toggle("Wait until finish?", willWait);

            if (willWait)
            {
                EditorGUILayout.Space();
                doTimeLimit = EditorGUILayout.Toggle("Enforce time limit?", doTimeLimit);
                if (doTimeLimit)
                {
                    maxTimeParameterID = Action.ChooseParameterGUI("Time limit (s):", parameters, maxTimeParameterID, ParameterType.Float);
                    if (maxTimeParameterID < 0)
                    {
                        maxTime = EditorGUILayout.FloatField("Time limit (s):", maxTime);
                    }
                    onReachTimeLimit = (OnReachTimeLimit)EditorGUILayout.EnumPopup("On reach time limit:", onReachTimeLimit);
                }
            }

            AfterRunningOption();
        }