/** * <summary>Locates an object with a supplied ConstantID number (Unity Editor only). * If the object is not found in the current scene, all scenes in the Build Settings will be searched. * Once an object is found, it will be pinged in the Hierarchy window.</summary> * <param name = "_constantID">The ConstantID number of the object to find</param> */ public static void FindObjectWithConstantID(int _constantID) { string originalScene = UnityVersionHandler.GetCurrentSceneName(); if (UnityVersionHandler.SaveSceneIfUserWants()) { // Search scene files for ID string[] sceneFiles = GetSceneFiles(); foreach (string sceneFile in sceneFiles) { UnityVersionHandler.OpenScene(sceneFile); ConstantID[] idObjects = FindObjectsOfType(typeof(ConstantID)) as ConstantID[]; if (idObjects != null && idObjects.Length > 0) { foreach (ConstantID idObject in idObjects) { if (idObject.constantID == _constantID) { ACDebug.Log("Found Constant ID: " + _constantID + " on '" + idObject.gameObject.name + "' in scene: " + sceneFile); EditorGUIUtility.PingObject(idObject.gameObject); EditorGUIUtility.ExitGUI(); return; } } } } ACDebug.LogWarning("Cannot find object with Constant ID: " + _constantID); UnityVersionHandler.OpenScene(originalScene); } }
static void Demo3D() { ManagerPackage package = AssetDatabase.LoadAssetAtPath("Assets/AdventureCreator/Demo/ManagerPackage.asset", typeof(ManagerPackage)) as ManagerPackage; if (package != null) { package.AssignManagers(); AdventureCreator.RefreshActions(); if (!ACInstaller.IsInstalled()) { ACInstaller.DoInstall(); } if (UnityVersionHandler.GetCurrentSceneName() != "Basement") { #if UNITY_5_3 || UNITY_5_4 || UNITY_5_3_OR_NEWER bool canProceed = EditorUtility.DisplayDialog("Open demo scene", "Would you like to open the 3D Demo scene, Basement, now?", "Yes", "No"); if (canProceed) { if (UnityVersionHandler.SaveSceneIfUserWants()) { UnityEditor.SceneManagement.EditorSceneManager.OpenScene("Assets/AdventureCreator/Demo/Scenes/Basement.unity"); } } #else ACDebug.Log("3D Demo managers loaded - you can now run the 3D Demo scene in 'Assets/AdventureCreator/Demo/Scenes/Basement.unity'"); #endif } AdventureCreator.Init(); } }
/** * <summary>Allows the Scene and Variables Managers to show UI controls for the currently-active scene, if multiple scenes are being edited.</summary> * <returns>The name of the currently-open scene.</summary> */ public static string EditActiveScene() { string openScene = UnityVersionHandler.GetCurrentSceneName(); if (!string.IsNullOrEmpty(openScene) && !Application.isPlaying) { if (FindObjectOfType <KickStarter>()) { FindObjectOfType <KickStarter>().ClearVariables(); } } return(openScene); }
override public bool CheckCondition() { int actualSceneNumber = 0; string actualSceneName = ""; if (sceneToCheck == SceneToCheck.Previous) { actualSceneNumber = KickStarter.sceneChanger.previousSceneInfo.number; actualSceneName = KickStarter.sceneChanger.previousSceneInfo.name; } else { actualSceneNumber = UnityVersionHandler.GetCurrentSceneNumber(); actualSceneName = UnityVersionHandler.GetCurrentSceneName(); } if (intCondition == IntCondition.EqualTo) { if (chooseSceneBy == ChooseSceneBy.Name && actualSceneName == AdvGame.ConvertTokens(sceneName)) { return(true); } if (chooseSceneBy == ChooseSceneBy.Number && actualSceneNumber == sceneNumber) { return(true); } } else if (intCondition == IntCondition.NotEqualTo) { if (chooseSceneBy == ChooseSceneBy.Name && actualSceneName != AdvGame.ConvertTokens(sceneName)) { return(true); } if (chooseSceneBy == ChooseSceneBy.Number && actualSceneNumber != sceneNumber) { return(true); } } return(false); }
/** Displays scene-related information for the AC Status window */ public void DrawStatus() { if (SubScenesAreOpen()) { string openScenes = string.Empty; for (int i = 0; i < subScenes.Count; i++) { if (subScenes[i] == null || subScenes[i].gameObject == null) { continue; } openScenes += subScenes[i].gameObject.scene.name; if (i < (subScenes.Count - 1)) { openScenes += ", "; } } GUILayout.Label("Active scene: " + UnityVersionHandler.GetCurrentSceneName()); GUILayout.Label("Sub-scenes: " + openScenes); } }
override public 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 prefab."); return(0f); } if (newPlayerPrefab.playerOb != null) { KickStarter.saveSystem.SaveCurrentPlayerData(); Vector3 oldPlayerPosition = Vector3.zero; Quaternion oldPlayerRotation = new Quaternion(); Vector3 oldPlayerScale = Vector3.one; PlayerData oldPlayerData = new PlayerData(); NPCData oldNPCData = new NPCData(); bool recordedOldPlayerData = false; bool recordedOldNPCData = false; if (KickStarter.player != null) { oldPlayerPosition = KickStarter.player.transform.position; oldPlayerRotation = KickStarter.player.TransformRotation; oldPlayerScale = KickStarter.player.transform.localScale; oldPlayerData = KickStarter.player.SavePlayerData(oldPlayerData); recordedOldPlayerData = true; } if (newPlayerPosition != NewPlayerPosition.ReplaceCurrentPlayer) { if (oldPlayer == OldPlayer.ReplaceWithAssociatedNPC && (runtimeOldPlayerNPC == null || !runtimeOldPlayerNPC.gameObject.activeInHierarchy) && KickStarter.player.associatedNPCPrefab != null) { GameObject newObject = (GameObject)Instantiate(KickStarter.player.associatedNPCPrefab.gameObject); newObject.name = KickStarter.player.associatedNPCPrefab.gameObject.name; runtimeOldPlayerNPC = newObject.GetComponent <NPC>(); } if ((oldPlayer == OldPlayer.ReplaceWithNPC || oldPlayer == OldPlayer.ReplaceWithAssociatedNPC) && runtimeOldPlayerNPC != null && runtimeOldPlayerNPC.gameObject.activeInHierarchy) { runtimeOldPlayerNPC.Teleport(oldPlayerPosition); runtimeOldPlayerNPC.TransformRotation = oldPlayerRotation; runtimeOldPlayerNPC.transform.localScale = oldPlayerScale; if (recordedOldPlayerData) { ApplyRenderData(runtimeOldPlayerNPC, oldPlayerData); } // Force the rotation / sprite child to update runtimeOldPlayerNPC._Update(); } } if (runtimeNewPlayerNPC == null || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { // Try to find from associated NPC prefab if (newPlayerPrefab.playerOb.associatedNPCPrefab != null) { ConstantID prefabID = newPlayerPrefab.playerOb.associatedNPCPrefab.GetComponent <ConstantID>(); if (prefabID != null && prefabID.constantID != 0) { newPlayerNPC_ID = prefabID.constantID; runtimeNewPlayerNPC = AssignFile <NPC> (prefabID.constantID, null); } } } Quaternion newRotation = Quaternion.identity; if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newRotation = oldPlayerRotation; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && runtimeNewPlayerNPC != null) { newRotation = runtimeNewPlayerNPC.TransformRotation; } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && runtimeNewPlayerMarker != null) { newRotation = runtimeNewPlayerMarker.transform.rotation; } if (runtimeNewPlayerNPC != null) { oldNPCData = runtimeNewPlayerNPC.SaveData(oldNPCData); } bool replacesOldPlayer = newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer && (!restorePreviousData || !KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)); KickStarter.ResetPlayer(newPlayerPrefab.playerOb, playerID, true, newRotation, keepInventory, false, replacesOldPlayer, alwaysSnapCamera); Player newPlayer = KickStarter.player; PlayerMenus.ResetInventoryBoxes(); if (replacesOldPlayer && recordedOldPlayerData) { ApplyRenderData(newPlayer, oldPlayerData); } if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)) { int sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID); string sceneToLoadName = KickStarter.saveSystem.GetPlayerSceneName(playerID); if (sceneToLoad >= 0 && sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(string.Empty, sceneToLoad), true, false); } else if (!string.IsNullOrEmpty(sceneToLoadName) && sceneToLoadName != UnityVersionHandler.GetCurrentSceneName()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(sceneToLoadName, -1), true, false); } else { // Same scene if (runtimeNewPlayerNPC != null) { newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform); runtimeNewPlayerNPC.HideFromView(newPlayer); } } } else { // No data to restore if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newPlayer.Teleport(oldPlayerPosition); newPlayer.SetRotation(oldPlayerRotation); newPlayer.transform.localScale = oldPlayerScale; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { if (runtimeNewPlayerNPC != null) { newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform); runtimeNewPlayerNPC.HideFromView(newPlayer); if (recordedOldNPCData) { ApplyRenderData(newPlayer, oldNPCData); } } } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker) { if (runtimeNewPlayerMarker) { newPlayer.RepositionToTransform(runtimeNewPlayerMarker.transform); } } else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene) { if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName() || (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber())) { // Already in correct scene if (runtimeNewPlayerNPC && runtimeNewPlayerNPC.gameObject.activeInHierarchy) { newPlayer.RepositionToTransform(runtimeNewPlayerNPC.transform); runtimeNewPlayerNPC.HideFromView(newPlayer); } } else { KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true, false, true); } } } if (KickStarter.mainCamera.attachedCamera && alwaysSnapCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } AssetLoader.UnloadAssets(); } else { LogWarning("Cannot switch player - no player prefabs is defined."); } } } return(0f); }
override public float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { if (KickStarter.sceneChanger.GetSubScenes().Length > 0) { // ACDebug.LogWarning ("Cannot switch players while multiple scenes are open!"); // return 0f; } if (KickStarter.settingsManager.players.Count > 0 && KickStarter.settingsManager.players.Count > playerNumber && playerNumber > -1) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { ACDebug.Log("Cannot switch player - already controlling the desired prefab."); return(0f); } if (KickStarter.settingsManager.players[playerNumber].playerOb != null) { KickStarter.saveSystem.SaveCurrentPlayerData(); Vector3 oldPlayerPosition = Vector3.zero; Quaternion oldPlayerRotation = new Quaternion(); Vector3 oldPlayerScale = Vector3.one; if (KickStarter.player != null) { oldPlayerPosition = KickStarter.player.transform.position; oldPlayerRotation = KickStarter.player.transform.rotation; oldPlayerScale = KickStarter.player.transform.localScale; } if (oldPlayer == OldPlayer.ReplaceWithNPC && oldPlayerNPC != null && (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.AppearAtMarker)) { oldPlayerNPC.transform.position = oldPlayerPosition; oldPlayerNPC.transform.rotation = oldPlayerRotation; oldPlayerNPC.transform.localScale = oldPlayerScale; } Quaternion newRotation = Quaternion.identity; if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newRotation = oldPlayerRotation; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && newPlayerNPC) { newRotation = newPlayerNPC.transform.rotation; } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && newPlayerMarker) { newRotation = newPlayerMarker.transform.rotation; } KickStarter.ResetPlayer(KickStarter.settingsManager.players[playerNumber].playerOb, playerID, true, newRotation, keepInventory); Player newPlayer = KickStarter.player; PlayerMenus.ResetInventoryBoxes(); int sceneToLoad = UnityVersionHandler.GetCurrentSceneNumber(); if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)) { sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID); if (sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneToLoad), true); } } else { if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newPlayer.Teleport(oldPlayerPosition); newPlayer.SetRotation(oldPlayerRotation); newPlayer.transform.localScale = oldPlayerScale; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC) { if (newPlayerNPC) { newPlayer.Teleport(newPlayerNPC.transform.position); newPlayer.SetRotation(newPlayerNPC.transform.rotation); newPlayer.transform.localScale = newPlayerNPC.transform.localScale; newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker) { if (newPlayerMarker) { newPlayer.Teleport(newPlayerMarker.transform.position); newPlayer.SetRotation(newPlayerMarker.transform.rotation); newPlayer.transform.localScale = newPlayerMarker.transform.localScale; } } else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene) { if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName()) { } else if (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber()) { } else { KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true); } } } if (KickStarter.mainCamera.attachedCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } AssetLoader.UnloadAssets(); } else { ACDebug.LogWarning("Cannot switch player - no player prefabs is defined."); } } } return(0f); }
/** * A Constructor for the current active scene. */ public SceneInfo() { number = UnityVersionHandler.GetCurrentSceneNumber(); name = UnityVersionHandler.GetCurrentSceneName(); }
private void AssignThisSceneInfo() { thisSceneInfo = new SceneInfo(UnityVersionHandler.GetCurrentSceneName(), UnityVersionHandler.GetCurrentSceneNumber()); }
private void Export() { #if UNITY_WEBPLAYER ACDebug.LogWarning("Game text cannot be exported in WebPlayer mode - please switch platform and try again."); #else if (variablesManager == null || exportColumns == null || exportColumns.Count == 0) { return; } if (variableLocation == VariableLocation.Local && allScenes) { bool canProceed = EditorUtility.DisplayDialog("Export variables", "AC will now go through your game, and collect all variables to be exported.\n\nIt is recommended to back up your project beforehand.", "OK", "Cancel"); if (!canProceed) { return; } if (!UnityEditor.SceneManagement.EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) { return; } } string suggestedFilename = ""; if (AdvGame.GetReferences().settingsManager) { suggestedFilename = AdvGame.GetReferences().settingsManager.saveFileName + " - "; } if (variableLocation == VariableLocation.Local && allScenes) { suggestedFilename += " All "; } suggestedFilename += variableLocation.ToString() + " Variables.csv"; string fileName = EditorUtility.SaveFilePanel("Export variables", "Assets", suggestedFilename, "csv"); if (fileName.Length == 0) { return; } List <string[]> output = new List <string[]>(); List <string> headerList = new List <string>(); headerList.Add("ID"); foreach (ExportColumn exportColumn in exportColumns) { headerList.Add(exportColumn.GetHeader()); } output.Add(headerList.ToArray()); // Global if (variableLocation == VariableLocation.Global) { List <GVar> exportVars = new List <GVar>(); foreach (GVar globalVariable in variablesManager.vars) { exportVars.Add(new GVar(globalVariable)); } foreach (GVar exportVar in exportVars) { List <string> rowList = new List <string>(); rowList.Add(exportVar.id.ToString()); foreach (ExportColumn exportColumn in exportColumns) { string cellText = exportColumn.GetCellText(exportVar, VariableLocation.Global, replaceForwardSlashes); rowList.Add(cellText); } output.Add(rowList.ToArray()); } } // Local else if (variableLocation == VariableLocation.Local) { if (allScenes) { string originalScene = UnityVersionHandler.GetCurrentSceneFilepath(); string[] sceneFiles = AdvGame.GetSceneFiles(); foreach (string sceneFile in sceneFiles) { UnityVersionHandler.OpenScene(sceneFile); if (FindObjectOfType <LocalVariables>()) { LocalVariables localVariables = FindObjectOfType <LocalVariables>(); if (localVariables != null) { string sceneName = UnityVersionHandler.GetCurrentSceneName(); output = GatherOutput(output, localVariables.localVars, sceneName); } } } if (string.IsNullOrEmpty(originalScene)) { UnityVersionHandler.NewScene(); } else { UnityVersionHandler.OpenScene(originalScene); } } else { string sceneName = UnityVersionHandler.GetCurrentSceneName(); output = GatherOutput(output, KickStarter.localVariables.localVars, sceneName); } } // Component else if (variableLocation == VariableLocation.Component) { string sceneName = UnityVersionHandler.GetCurrentSceneName(); if (variables != null) { output = GatherOutput(output, variables.vars, sceneName); } } string fileContents = CSVReader.CreateCSVGrid(output); if (!string.IsNullOrEmpty(fileContents) && Serializer.SaveFile(fileName, fileContents)) { int numExported = output.Count - 1; if (numExported == 1) { ACDebug.Log("1 " + variableLocation + " variable exported."); } else { ACDebug.Log(numExported.ToString() + " " + variableLocation + " variables exported."); } } #endif }
private void CheckRequiredManagerPackage() { if (requiredManagerPackage == null) { return; } if ((requiredManagerPackage.sceneManager != null && requiredManagerPackage.sceneManager != KickStarter.sceneManager) || (requiredManagerPackage.settingsManager != null && requiredManagerPackage.settingsManager != KickStarter.settingsManager) || (requiredManagerPackage.actionsManager != null && requiredManagerPackage.actionsManager != KickStarter.actionsManager) || (requiredManagerPackage.variablesManager != null && requiredManagerPackage.variablesManager != KickStarter.variablesManager) || (requiredManagerPackage.inventoryManager != null && requiredManagerPackage.inventoryManager != KickStarter.inventoryManager) || (requiredManagerPackage.speechManager != null && requiredManagerPackage.speechManager != KickStarter.speechManager) || (requiredManagerPackage.cursorManager != null && requiredManagerPackage.cursorManager != KickStarter.cursorManager) || (requiredManagerPackage.menuManager != null && requiredManagerPackage.menuManager != KickStarter.menuManager)) { if (requiredManagerPackage.settingsManager != null) { if (requiredManagerPackage.settingsManager.name == "Demo_SettingsManager" && UnityVersionHandler.GetCurrentSceneName() == "Basement") { ACDebug.LogWarning("The demo scene's required Manager asset files are not all loaded - please stop the game, and choose 'Adventure Creator -> Getting started -> Load 3D Demo managers from the top toolbar, and re-load the scene."); return; } else if (requiredManagerPackage.settingsManager.name == "Demo2D_SettingsManager" && UnityVersionHandler.GetCurrentSceneName() == "Park") { ACDebug.LogWarning("The 2D demo scene's required Manager asset files are not all loaded - please stop the game, and choose 'Adventure Creator -> Getting started -> Load 2D Demo managers from the top toolbar, and re-load the scene."); return; } } ACDebug.LogWarning("This scene's required Manager asset files are not all loaded - please find the asset file '" + requiredManagerPackage.name + "' and click 'Assign managers' in its Inspector."); } }
private void ConvertGlobalToLocal(GVar globalVariable) { if (globalVariable == null) { return; } if (KickStarter.localVariables == null) { ACDebug.LogWarning("Cannot convert variable to local since the scene has not been prepared for AC."); return; } if (EditorUtility.DisplayDialog("Convert " + globalVariable.label + " to Local Variable?", "This will update all Actions and Managers that refer to this Variable. This is a non-reversible process, and you should back up your project first. Continue?", "OK", "Cancel")) { if (UnityVersionHandler.SaveSceneIfUserWants()) { // Create new Local DeactivateAllVars(); GVar newLocalVariable = new GVar(globalVariable); int newLocalID = newLocalVariable.AssignUniqueID(GetIDArray(KickStarter.localVariables.localVars)); KickStarter.localVariables.localVars.Add(newLocalVariable); UnityVersionHandler.CustomSetDirty(KickStarter.localVariables, true); UnityVersionHandler.SaveScene(); // Update current scene bool updatedScene = false; string originalScene = UnityVersionHandler.GetCurrentSceneFilepath(); ActionList[] actionLists = FindObjectsOfType <ActionList>(); foreach (ActionList actionList in actionLists) { foreach (Action action in actionList.actions) { bool updatedActionList = action.ConvertGlobalVariableToLocal(globalVariable.id, newLocalID, true); if (updatedActionList) { updatedScene = true; UnityVersionHandler.CustomSetDirty(actionList, true); ACDebug.Log("Updated Action " + actionList.actions.IndexOf(action) + " of ActionList '" + actionList.name + "' in scene '" + originalScene + "'", actionList); } } } Conversation[] conversations = FindObjectsOfType <Conversation>(); foreach (Conversation conversation in conversations) { bool updatedConversation = conversation.ConvertGlobalVariableToLocal(globalVariable.id, newLocalID, true); if (updatedConversation) { updatedScene = true; UnityVersionHandler.CustomSetDirty(conversation, true); ACDebug.Log("Updated Conversation " + conversation + ") in scene '" + originalScene + "'"); } } if (updatedScene) { UnityVersionHandler.SaveScene(); } // Update other scenes string[] sceneFiles = AdvGame.GetSceneFiles(); foreach (string sceneFile in sceneFiles) { if (sceneFile == originalScene) { continue; } UnityVersionHandler.OpenScene(sceneFile); actionLists = FindObjectsOfType <ActionList>(); foreach (ActionList actionList in actionLists) { foreach (Action action in actionList.actions) { bool isAffected = action.ConvertGlobalVariableToLocal(globalVariable.id, newLocalID, false); if (isAffected) { ACDebug.LogWarning("Cannot update Action " + actionList.actions.IndexOf(action) + " in ActionList '" + actionList.name + "' in scene '" + sceneFile + "' because it cannot access the Local Variable in scene '" + originalScene + "'."); } } } conversations = FindObjectsOfType <Conversation>(); foreach (Conversation conversation in conversations) { bool isAffected = conversation.ConvertGlobalVariableToLocal(globalVariable.id, newLocalID, false); if (isAffected) { ACDebug.LogWarning("Cannot update Conversation " + conversation + ") in scene '" + sceneFile + "' because it cannot access the Local Variable in scene '" + originalScene + "'."); } } } UnityVersionHandler.OpenScene(originalScene); // Update Menu Manager if (KickStarter.menuManager) { KickStarter.menuManager.CheckConvertGlobalVariableToLocal(globalVariable.id, newLocalID); } // Update Speech Manager if (KickStarter.speechManager) { // Search asset files ActionListAsset[] allActionListAssets = KickStarter.speechManager.GetAllActionListAssets(); UnityVersionHandler.OpenScene(originalScene); if (allActionListAssets != null) { foreach (ActionListAsset actionListAsset in allActionListAssets) { foreach (Action action in actionListAsset.actions) { bool isAffected = action.ConvertGlobalVariableToLocal(globalVariable.id, newLocalID, false); if (isAffected) { ACDebug.LogWarning("Cannot update Action " + actionListAsset.actions.IndexOf(action) + " in ActionList asset '" + actionListAsset.name + "' because asset files cannot refer to Local Variables."); } } } } KickStarter.speechManager.ConvertGlobalVariableToLocal(globalVariable, UnityVersionHandler.GetCurrentSceneName()); } // Remove old Global vars.Remove(globalVariable); // Mark for saving EditorUtility.SetDirty(this); if (KickStarter.localVariables != null) { UnityVersionHandler.CustomSetDirty(KickStarter.localVariables); } AssetDatabase.SaveAssets(); } } }
/** * <summary>Checks if this class instance represetnts the currently-active main scene</summary> * <returns>True if this class instance represetnts the currently-active main scene</returns> */ public bool IsCurrentActive() { SceneInfo activeSceneInfo = new SceneInfo(UnityVersionHandler.GetCurrentSceneName(), UnityVersionHandler.GetCurrentSceneNumber()); return(Matches(activeSceneInfo)); }
override public float Run() { if (KickStarter.settingsManager.playerSwitching == PlayerSwitching.Allow) { if (KickStarter.sceneChanger.GetSubScenes().Length > 0) { // ACDebug.LogWarning ("Cannot switch players while multiple scenes are open!"); // return 0f; } if (KickStarter.settingsManager.players.Count > 0 && KickStarter.settingsManager.players.Count > playerNumber && playerNumber > -1) { if (KickStarter.player != null && KickStarter.player.ID == playerID) { ACDebug.Log("Cannot switch player - already controlling the desired prefab."); return(0f); } if (KickStarter.settingsManager.players[playerNumber].playerOb != null) { KickStarter.saveSystem.SaveCurrentPlayerData(); Vector3 oldPlayerPosition = Vector3.zero; Quaternion oldPlayerRotation = new Quaternion(); Vector3 oldPlayerScale = Vector3.one; if (KickStarter.player != null) { oldPlayerPosition = KickStarter.player.transform.position; oldPlayerRotation = KickStarter.player.TransformRotation; oldPlayerScale = KickStarter.player.transform.localScale; } if (newPlayerPosition != NewPlayerPosition.ReplaceCurrentPlayer) { if (oldPlayer == OldPlayer.ReplaceWithAssociatedNPC && (oldPlayerNPC == null || !oldPlayerNPC.gameObject.activeInHierarchy) && KickStarter.player.associatedNPCPrefab != null) { GameObject newObject = (GameObject)Instantiate(KickStarter.player.associatedNPCPrefab.gameObject); newObject.name = KickStarter.player.associatedNPCPrefab.gameObject.name; oldPlayerNPC = newObject.GetComponent <NPC>(); } if ((oldPlayer == OldPlayer.ReplaceWithNPC || oldPlayer == OldPlayer.ReplaceWithAssociatedNPC) && oldPlayerNPC != null && oldPlayerNPC.gameObject.activeInHierarchy) { oldPlayerNPC.transform.position = oldPlayerPosition; oldPlayerNPC.TransformRotation = oldPlayerRotation; oldPlayerNPC.transform.localScale = oldPlayerScale; // Force the rotation / sprite child to update oldPlayerNPC._Update(); } } if (newPlayerNPC == null || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { // Try to find from associated NPC prefab if (KickStarter.settingsManager.players[playerNumber].playerOb.associatedNPCPrefab != null) { ConstantID prefabID = KickStarter.settingsManager.players[playerNumber].playerOb.associatedNPCPrefab.GetComponent <ConstantID>(); if (prefabID != null && prefabID.constantID != 0) { newPlayerNPC_ID = prefabID.constantID; newPlayerNPC = AssignFile <NPC> (prefabID.constantID, null); } } } Quaternion newRotation = Quaternion.identity; if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newRotation = oldPlayerRotation; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC && newPlayerNPC) { newRotation = newPlayerNPC.TransformRotation; } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker && newPlayerMarker) { newRotation = newPlayerMarker.transform.rotation; } bool replacesOldPlayer = newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer && (!restorePreviousData || !KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)); KickStarter.ResetPlayer(KickStarter.settingsManager.players[playerNumber].playerOb, playerID, true, newRotation, keepInventory, false, replacesOldPlayer); Player newPlayer = KickStarter.player; PlayerMenus.ResetInventoryBoxes(); if (restorePreviousData && KickStarter.saveSystem.DoesPlayerDataExist(playerID, true)) { if (newPlayerNPC) { newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } int sceneToLoad = KickStarter.saveSystem.GetPlayerScene(playerID); if (sceneToLoad >= 0 && sceneToLoad != UnityVersionHandler.GetCurrentSceneNumber()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo("", sceneToLoad), true, false, newPlayerNPC_ID); } else { string sceneToLoadName = KickStarter.saveSystem.GetPlayerSceneName(playerID); if (sceneToLoadName != "" && sceneToLoadName != UnityVersionHandler.GetCurrentSceneName()) { KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(sceneToLoadName, -1), true, false, newPlayerNPC_ID); } } } else { // No data to restore if (newPlayerPosition == NewPlayerPosition.ReplaceCurrentPlayer) { newPlayer.Teleport(oldPlayerPosition); newPlayer.SetRotation(oldPlayerRotation); newPlayer.transform.localScale = oldPlayerScale; } else if (newPlayerPosition == NewPlayerPosition.ReplaceNPC || newPlayerPosition == NewPlayerPosition.ReplaceAssociatedNPC) { if (newPlayerNPC) { newPlayer.Teleport(newPlayerNPC.transform.position); newPlayer.SetRotation(newPlayerNPC.TransformRotation); newPlayer.transform.localScale = newPlayerNPC.transform.localScale; newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } } else if (newPlayerPosition == NewPlayerPosition.AppearAtMarker) { if (newPlayerMarker) { newPlayer.Teleport(newPlayerMarker.transform.position); newPlayer.SetRotation(newPlayerMarker.transform.rotation); newPlayer.transform.localScale = newPlayerMarker.transform.localScale; } } else if (newPlayerPosition == NewPlayerPosition.AppearInOtherScene) { if (chooseNewSceneBy == ChooseSceneBy.Name && newPlayerSceneName == UnityVersionHandler.GetCurrentSceneName() || (chooseNewSceneBy == ChooseSceneBy.Number && newPlayerScene == UnityVersionHandler.GetCurrentSceneNumber())) { // Already in correct scene if (newPlayerNPC && newPlayerNPC.gameObject.activeInHierarchy) { newPlayer.Teleport(newPlayerNPC.transform.position); newPlayer.SetRotation(newPlayerNPC.TransformRotation); newPlayer.transform.localScale = newPlayerNPC.transform.localScale; newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } } else { if (newPlayerNPC && newPlayerNPC.gameObject.activeInHierarchy) { newPlayerNPC.transform.position += new Vector3(100f, -100f, 100f); } //KickStarter.saveSystem.loadingGame = LoadingGame.JustSwitchingPlayer; KickStarter.sceneChanger.ChangeScene(new SceneInfo(chooseNewSceneBy, newPlayerSceneName, newPlayerScene), true, false, newPlayerNPC_ID, true); } } } if (KickStarter.mainCamera.attachedCamera) { KickStarter.mainCamera.attachedCamera.MoveCameraInstant(); } AssetLoader.UnloadAssets(); } else { ACDebug.LogWarning("Cannot switch player - no player prefabs is defined."); } } } return(0f); }
private void Export() { #if UNITY_WEBPLAYER ACDebug.LogWarning("Game text cannot be exported in WebPlayer mode - please switch platform and try again."); #else if (variablesManager == null || exportColumns == null || exportColumns.Count == 0) { return; } if (variableLocation == VariableLocation.Local && allScenes) { bool canProceed = EditorUtility.DisplayDialog("Export variables", "AC will now go through your game, and collect all variables to be exported.\n\nIt is recommended to back up your project beforehand.", "OK", "Cancel"); if (!canProceed) { return; } if (!UnityVersionHandler.SaveSceneIfUserWants()) { return; } } string suggestedFilename = ""; if (AdvGame.GetReferences().settingsManager) { suggestedFilename = AdvGame.GetReferences().settingsManager.saveFileName + " - "; } if (variableLocation == VariableLocation.Local && allScenes) { suggestedFilename += " All "; } suggestedFilename += variableLocation.ToString() + " Variables.csv"; string fileName = EditorUtility.SaveFilePanel("Export variables", "Assets", suggestedFilename, "csv"); if (fileName.Length == 0) { return; } bool fail = false; List <string[]> output = new List <string[]>(); List <string> headerList = new List <string>(); headerList.Add("ID"); foreach (ExportColumn exportColumn in exportColumns) { headerList.Add(exportColumn.GetHeader()); } output.Add(headerList.ToArray()); // Global if (variableLocation == VariableLocation.Global) { List <GVar> exportVars = new List <GVar>(); foreach (GVar globalVariable in variablesManager.vars) { exportVars.Add(new GVar(globalVariable)); } foreach (GVar exportVar in exportVars) { List <string> rowList = new List <string>(); rowList.Add(exportVar.id.ToString()); foreach (ExportColumn exportColumn in exportColumns) { string cellText = exportColumn.GetCellText(exportVar, VariableLocation.Global, replaceForwardSlashes); rowList.Add(cellText); if (cellText.Contains(CSVReader.csvDelimiter)) { fail = true; ACDebug.LogError("Cannot export variables since global variable " + exportVar.id.ToString() + " (" + exportVar.label + ") contains the character '" + CSVReader.csvDelimiter + "'."); } } output.Add(rowList.ToArray()); } } // Local else if (variableLocation == VariableLocation.Local) { if (allScenes) { string originalScene = UnityVersionHandler.GetCurrentSceneFilepath(); string[] sceneFiles = AdvGame.GetSceneFiles(); foreach (string sceneFile in sceneFiles) { UnityVersionHandler.OpenScene(sceneFile); if (FindObjectOfType <LocalVariables>()) { LocalVariables localVariables = FindObjectOfType <LocalVariables>(); if (localVariables != null) { string sceneName = UnityVersionHandler.GetCurrentSceneName(); output = GatherOutput(output, localVariables.localVars, sceneName); } } } if (originalScene == "") { UnityVersionHandler.NewScene(); } else { UnityVersionHandler.OpenScene(originalScene); } } else { string sceneName = UnityVersionHandler.GetCurrentSceneName(); output = GatherOutput(output, KickStarter.localVariables.localVars, sceneName); } } // Component else if (variableLocation == VariableLocation.Component) { string sceneName = UnityVersionHandler.GetCurrentSceneName(); if (variables != null) { output = GatherOutput(output, variables.vars, sceneName); } } if (!fail) { int length = output.Count; System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int j = 0; j < length; j++) { sb.AppendLine(string.Join(CSVReader.csvDelimiter, output[j])); } if (Serializer.SaveFile(fileName, sb.ToString())) { int numExported = output.Count - 1; if (numExported == 1) { ACDebug.Log("1 " + variableLocation + " variable exported."); } else { ACDebug.Log(numExported.ToString() + " " + variableLocation + " variables exported."); } } } #endif }