protected Player AssignPlayer(int _playerID) { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow && _playerID >= 0) { PlayerPrefab playerPrefab = KickStarter.settingsManager.GetPlayerPrefab(_playerID); if (playerPrefab != null) { Player _player = playerPrefab.GetSceneInstance(); if (_player == null) { Debug.LogWarning("Cannot assign Player with ID = " + _playerID + " because they are not currently in the scene."); } return(_player); } else { Debug.LogWarning("No Player prefab found with ID = " + _playerID); } return(null); } return(KickStarter.player); }
public override void ShowGUI(List <ActionParameter> parameters) { isPlayer = EditorGUILayout.Toggle("Is player?", isPlayer); if (isPlayer) { if (KickStarter.settingsManager != null && KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { playerParameterID = ChooseParameterGUI("Player ID:", parameters, playerParameterID, ParameterType.Integer); if (playerParameterID < 0) { playerID = ChoosePlayerGUI(playerID, true); } } Player _player = null; if (playerParameterID < 0 || KickStarter.settingsManager == null || KickStarter.settingsManager.playerSwitching == PlayerSwitching.DoNotAllow) { if (playerID >= 0) { PlayerPrefab playerPrefab = KickStarter.settingsManager.GetPlayerPrefab(playerID); if (playerPrefab != null) { _player = (Application.isPlaying) ? playerPrefab.GetSceneInstance() : playerPrefab.playerOb; } } else { _player = (Application.isPlaying) ? KickStarter.player : AdvGame.GetReferences().settingsManager.GetDefaultPlayer(); } } if (_player != null && _player.GetShapeable()) { shapeObject = _player.GetShapeable(); } else { shapeObject = null; EditorGUILayout.HelpBox("Cannot find player with Shapeable script attached", MessageType.Warning); } } else { parameterID = ChooseParameterGUI("Object:", parameters, parameterID, ParameterType.GameObject); if (parameterID >= 0) { constantID = 0; shapeObject = null; } else { shapeObject = (Shapeable)EditorGUILayout.ObjectField("Object:", shapeObject, typeof(Shapeable), true); constantID = FieldToID <Shapeable> (shapeObject, constantID); shapeObject = IDToField <Shapeable> (shapeObject, constantID, false); } } if (shapeObject != null && shapeObject.shapeGroups != null) { shapeGroupID = ActionBlendShape.ShapeableGroupGUI("Shape group:", shapeObject.shapeGroups, shapeGroupID); disableAllKeys = EditorGUILayout.Toggle("Disable all keys?", disableAllKeys); if (!disableAllKeys) { ShapeGroup _shapeGroup = shapeObject.GetGroup(shapeGroupID); if (_shapeGroup != null) { if (_shapeGroup.shapeKeys != null && _shapeGroup.shapeKeys.Count > 0) { shapeKeyID = ShapeableKeyGUI(_shapeGroup.shapeKeys, shapeKeyID); } else { EditorGUILayout.HelpBox("No shape keys found.", MessageType.Info); } } shapeValue = EditorGUILayout.Slider("New value:", shapeValue, 0f, 100f); } } else { EditorGUILayout.HelpBox("An object must be assigned before more options can show.", MessageType.Info); } fadeTime = EditorGUILayout.FloatField("Transition time:", fadeTime); if (fadeTime > 0f) { 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(); }
public override float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { PlayerPrefab newPlayerPrefab = KickStarter.settingsManager.GetPlayerPrefab(playerID); if (newPlayerPrefab != null) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { Log("Cannot switch Player - already controlling the desired character."); return(0f); } if (newPlayerPrefab.playerOb != null) { KickStarter.playerInteraction.StopMovingToHotspot(); KickStarter.saveSystem.SaveCurrentPlayerData(); if (takeOldPlayerPosition) { if (KickStarter.player != null) { if (keepInventory) { KickStarter.saveSystem.AssignItemsToPlayer(KickStarter.runtimeInventory.PlayerInvCollection, playerID); } _Camera oldCamera = KickStarter.mainCamera.attachedCamera; KickStarter.player.RemoveFromScene(); // Transfer open sub-scene data since both are in the same scene PlayerData tempPlayerData = new PlayerData(); tempPlayerData = KickStarter.sceneChanger.SavePlayerData(tempPlayerData); string openSubSceneData = tempPlayerData.openSubScenes; PlayerData newPlayerData = KickStarter.saveSystem.GetPlayerData(playerID); newPlayerData.openSubScenes = openSubSceneData; // Force-set position / scene PlayerData oldPlayerData = KickStarter.saveSystem.GetPlayerData(KickStarter.saveSystem.CurrentPlayerID); newPlayerData.CopyPosition(oldPlayerData); newPlayerData.UpdatePresenceInScene(); oldPlayerData.currentScene = -1; Player newPlayer = newPlayerPrefab.GetSceneInstance(true); KickStarter.player = newPlayer; if (KickStarter.player != null) { KickStarter.player.EndPath(); KickStarter.player.StopFollowing(); } // Same camera if (oldCamera != null && KickStarter.mainCamera.attachedCamera != oldCamera) { oldCamera.MoveCameraInstant(); KickStarter.mainCamera.SetGameCamera(oldCamera); } return(0f); } else { LogWarning("Cannot take the old Player's position because no Player is currently active!"); } } else { if (KickStarter.player != null) { if (stopOldMoving || !KickStarter.player.IsPathfinding()) { KickStarter.player.EndPath(); } } if (keepInventory) { KickStarter.saveSystem.AssignItemsToPlayer(KickStarter.runtimeInventory.PlayerInvCollection, playerID); } int sceneIndexToLoad = KickStarter.saveSystem.GetPlayerSceneIndex(playerID); if (sceneIndexToLoad < 0) { bool hasData = (KickStarter.saveSystem.GetPlayerData(playerID) != null); if (hasData) { LogWarning("Cannot switch to Player ID " + playerID + " because their current scene index = " + sceneIndexToLoad); } else { LogWarning("Cannot switch to Player ID " + playerID + " because no save data was found for them."); } return(0f); } SubScene subScene = KickStarter.sceneChanger.GetSubScene(sceneIndexToLoad); if (subScene == null && SceneChanger.CurrentSceneIndex != sceneIndexToLoad) { // Different scene, and not open as a sub-scene if (KickStarter.player != null) { KickStarter.player.Halt(); } KickStarter.saveSystem.SwitchToPlayerInDifferentScene(playerID, sceneIndexToLoad, assignScreenOverlay); return(0f); } // Same scene // Transfer open sub-scene data since both are in the same scene PlayerData tempPlayerData = new PlayerData(); tempPlayerData = KickStarter.sceneChanger.SavePlayerData(tempPlayerData); string openSubSceneData = tempPlayerData.openSubScenes; PlayerData newPlayerData = KickStarter.saveSystem.GetPlayerData(playerID); newPlayerData.openSubScenes = openSubSceneData; Player newPlayer = newPlayerPrefab.GetSceneInstance(true); KickStarter.player = newPlayer; if (stopNewMoving && KickStarter.player != null) { KickStarter.player.EndPath(); KickStarter.player.StopFollowing(); } if (KickStarter.mainCamera.attachedCamera && alwaysSnapCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } } } else { LogWarning("Cannot switch to an empty Player - no Player prefab is defined for ID " + playerID + "."); } } else { LogWarning("Cannot switch Player - no Player prefab is defined."); } } return(0f); }
/** * <summary>Deserialises a string of data, and restores the GameObject to its previous state.</summary> * <param name = "stringData">The data, serialised as a string</param> */ public void LoadTransformData(TransformData data) { if (data == null) { return; } savePrevented = data.savePrevented; if (savePrevented) { return; } if (data.parentIsPlayer) { Player player = KickStarter.player; if (data.parentPlayerID >= 0) { player = null; PlayerPrefab playerPrefab = KickStarter.settingsManager.GetPlayerPrefab(data.parentPlayerID); if (playerPrefab != null) { player = playerPrefab.GetSceneInstance(); } } if (player) { if (data.heldHand == Hand.Left) { transform.parent = player.leftHandBone; } else { transform.parent = player.rightHandBone; } } } else if (data.parentID != 0) { ConstantID parentObject = ConstantID.GetComponent <ConstantID> (data.parentID); if (parentObject) { if (data.parentIsNPC) { Char _char = parentObject.GetComponent <NPC> (); if (_char && !_char.IsPlayer) { if (data.heldHand == Hand.Left) { transform.parent = _char.leftHandBone; } else { transform.parent = _char.rightHandBone; } } } else { transform.parent = parentObject.gameObject.transform; } } } else if (data.parentID == 0 && saveParent) { transform.parent = null; } switch (transformSpace) { case GlobalLocal.Global: transform.position = new Vector3(data.LocX, data.LocY, data.LocZ); transform.eulerAngles = new Vector3(data.RotX, data.RotY, data.RotZ); break; case GlobalLocal.Local: transform.localPosition = new Vector3(data.LocX, data.LocY, data.LocZ); transform.localEulerAngles = new Vector3(data.RotX, data.RotY, data.RotZ); break; } transform.localScale = new Vector3(data.ScaleX, data.ScaleY, data.ScaleZ); }
/** * Ends all skippable ActionLists. * This is triggered when the user presses the "EndCutscene" Input button. */ public void EndCutscene() { if (!IsInSkippableCutscene()) { return; } if (AdvGame.GetReferences().settingsManager.blackOutWhenSkipping) { KickStarter.mainCamera.ForceOverlayForFrames(4); } KickStarter.eventManager.Call_OnSkipCutscene(); // Stop all non-looping sound Sound[] sounds = FindObjectsOfType(typeof(Sound)) as Sound[]; foreach (Sound sound in sounds) { if (sound.GetComponent <AudioSource>()) { if (sound.soundType != SoundType.Music && !sound.GetComponent <AudioSource>().loop) { sound.Stop(); } } } // Set correct Player prefab before skipping if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { if (!noPlayerOnStartQueue && playerIDOnStartQueue >= 0) { if (KickStarter.player == null || KickStarter.player.ID != playerIDOnStartQueue) { // PlayerPrefab oldPlayerPrefab = KickStarter.settingsManager.GetPlayerPrefab(playerIDOnStartQueue); if (oldPlayerPrefab != null) { if (KickStarter.player != null) { KickStarter.player.Halt(); } Player oldPlayer = oldPlayerPrefab.GetSceneInstance(); KickStarter.player = oldPlayer; } } } } List <ActiveList> listsToSkip = new List <ActiveList>(); List <ActiveList> listsToReset = new List <ActiveList>(); foreach (ActiveList activeList in activeLists) { if (!activeList.inSkipQueue && activeList.actionList.IsSkippable()) { listsToReset.Add(activeList); } else { listsToSkip.Add(activeList); } } foreach (ActiveList activeList in KickStarter.actionListAssetManager.ActiveLists) { if (!activeList.inSkipQueue && activeList.actionList.IsSkippable()) { listsToReset.Add(activeList); } else { listsToSkip.Add(activeList); } } foreach (ActiveList listToReset in listsToReset) { // Kill, but do isolated, to bypass setting GameState etc listToReset.Reset(true); } foreach (ActiveList listToSkip in listsToSkip) { listToSkip.Skip(); } }
public override void ShowGUI(List <ActionParameter> parameters) { isPlayer = EditorGUILayout.Toggle("Is Player?", isPlayer); if (isPlayer) { if (KickStarter.settingsManager != null && KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { playerParameterID = ChooseParameterGUI("Player ID:", parameters, playerParameterID, ParameterType.Integer); if (playerParameterID < 0) { playerID = ChoosePlayerGUI(playerID, true); } } if (playerParameterID < 0) { if (playerID >= 0) { PlayerPrefab playerPrefab = KickStarter.settingsManager.GetPlayerPrefab(playerID); if (playerPrefab != null) { _char = (Application.isPlaying) ? playerPrefab.GetSceneInstance() : playerPrefab.playerOb; } } else { _char = (Application.isPlaying) ? KickStarter.player : AdvGame.GetReferences().settingsManager.GetDefaultPlayer(); } } } else { _char = (Char)EditorGUILayout.ObjectField("Character:", _char, typeof(Char), true); _charID = FieldToID <Char> (_char, _charID); _char = IDToField <Char> (_char, _charID, true); } if (_char != null) { if (_char.GetAnimEngine() && _char.GetAnimEngine().ActionCharHoldPossible()) { if (_char.GetAnimEngine().IKEnabled) { charHoldMethod = (CharHoldMethod)EditorGUILayout.EnumPopup("Hold method:", charHoldMethod); if (charHoldMethod == CharHoldMethod.MoveHandWithIK) { ikHoldMethod = (IKHoldMethod)EditorGUILayout.EnumPopup("IK command:", ikHoldMethod); } } else { charHoldMethod = CharHoldMethod.ParentObjectToHand; } if (charHoldMethod == CharHoldMethod.ParentObjectToHand || ikHoldMethod == IKHoldMethod.SetTarget) { objectToHoldParameterID = Action.ChooseParameterGUI("Object to hold:", parameters, objectToHoldParameterID, ParameterType.GameObject); if (objectToHoldParameterID >= 0) { objectToHoldID = 0; objectToHold = null; } else { objectToHold = (GameObject)EditorGUILayout.ObjectField("Object to hold:", objectToHold, typeof(GameObject), true); objectToHoldID = FieldToID(objectToHold, objectToHoldID); objectToHold = IDToField(objectToHold, objectToHoldID, false); } } hand = (Hand)EditorGUILayout.EnumPopup("Hand:", hand); if (charHoldMethod == CharHoldMethod.ParentObjectToHand) { localEulerAnglesParameterID = Action.ChooseParameterGUI("Object local angles:", parameters, localEulerAnglesParameterID, ParameterType.Vector3); if (localEulerAnglesParameterID < 0) { localEulerAngles = EditorGUILayout.Vector3Field("Object local angles:", localEulerAngles); } } else if (charHoldMethod == CharHoldMethod.MoveHandWithIK && ikHoldMethod == IKHoldMethod.SetTarget) { ikTransitionCurve = EditorGUILayout.CurveField("Transition curve:", ikTransitionCurve); } } else { EditorGUILayout.HelpBox("This Action is not compatible with this Character's Animation Engine.", MessageType.Info); } } else { EditorGUILayout.HelpBox("This Action requires a Character before more options will show.", MessageType.Info); } AfterRunningOption(); }