using System; using System.IO; using System.Threading.Tasks; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.SceneManagement; using UnityEngine.UI; namespace JTN { public class Utils : MonoBehaviour { /* public bool scrolling; public GameObject objectRot; public GameObject sn; public float movespeed = 3; public float srate = 2; private float tm = 0; private bool once = false; private GameObject currentObjectRot; */ public string GameObjectList; public bool DestroyParentIfNotDevelopment = false; public GameObject Parent; public TMP_InputField timeScaler; public bool UnlockCursorInThisScene = false; public static bool PublicUnlockCursorInThisScene = false; public FirstPersonController playerController; public GameObject Player; public Animation animationToPlay; public GameObject DeactivateObjectOnGameObjectActivate; public GameObject PlayAnimOnActive; public string animName; public bool PlayOnceOnly = true; int timesAnimPlayed = 0; public GameObject LoadSceneOnObjectActivateOrDeactivate; public bool RunOnDeactivate; public string SceneToLoad; public AudioSource audioSource; public AdvLevelMan AdvancedLevelManager; private int LoadedTimes = 0; public static void SwitchScene(String SceneName) { Debug.LogError("Attempting to load scene " + SceneName); try { SceneManager.LoadScene(SceneName); } catch (Exception e) { Debug.LogError(e.ToString()); Debug.LogError("Try using the developer menu to open " + SceneName); } } public static async Task LoadClip(string path) { AudioClip clip = null; using (UnityWebRequest uwr = UnityWebRequestMultimedia.GetAudioClip(path, AudioType.WAV)) { uwr.SendWebRequest(); // wrap tasks in try/catch, otherwise it'll fail silently try { while (!uwr.isDone) await Task.Delay(5); if (uwr.result == UnityWebRequest.Result.ConnectionError) Debug.Log($"{uwr.error}"); else { clip = DownloadHandlerAudioClip.GetContent(uwr); Debug.Log("Loaded AudioClip from " + path); } } catch (Exception err) { Debug.Log($"{err.Message}, {err.StackTrace}"); } } return clip; } public void TimeScale() { if (timeScaler) { var numTime = float.Parse(timeScaler.text); Time.timeScale = numTime; } } public void CustomTimeScale(float timeScale) { Time.timeScale = timeScale; } public void DisableTextMeshProButton(Button Button) { Button.interactable = false; } public void EnableTextMeshProButton(Button Button) { Button.interactable = true; } private void Start() { GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType(); foreach (GameObject go in allObjects) GameObjectList = GameObjectList + ", " + go.name; if (!Debug.isDebugBuild || Application.platform != RuntimePlatform.WindowsEditor) Destroy(Parent); if (PlayerPrefs.HasKey("QualityLevel")) QualitySettings.SetQualityLevel(PlayerPrefs.GetInt("QualityLevel")); if (PlayerPrefs.HasKey("FullscreenState")) SetFullscreen(bool.Parse(PlayerPrefs.GetString("FullscreenState"))); } private void FixedUpdate() { if (LoadSceneOnObjectActivateOrDeactivate && AdvancedLevelManager) if (RunOnDeactivate) { if (!LoadSceneOnObjectActivateOrDeactivate.activeInHierarchy && LoadedTimes == 0) { Debug.Log("Loading scene " + SceneToLoad); AdvancedLevelManager.SwitchSceneAdv(SceneToLoad); LoadedTimes++; } } else if (!RunOnDeactivate && LoadSceneOnObjectActivateOrDeactivate.activeInHierarchy && LoadedTimes == 0) { Debug.Log("Loading scene " + SceneToLoad); AdvancedLevelManager.SwitchSceneAdv(SceneToLoad); LoadedTimes++; } } public static void ToggleActive(GameObject obj) { obj.SetActive(!obj.activeInHierarchy); } public static void ToggleAnimState(Animation anim) { anim.enabled = !anim.enabled; } public static void SetGameObjectToActive(GameObject obj) { obj.SetActive(true); } public void PlayAudioClipOnce(AudioClip clip) { if (!audioSource) Debug.LogError("No audio source was linked when running the script attached to " + gameObject.name); else audioSource.PlayOneShot(clip); } public static void SetGameObjectToInactive(GameObject obj) { obj.SetActive(false); } public void SetFullscreen(bool FullscreenState) { Debug.Log($"Set fullscreen pref to {FullscreenState}"); PlayerPrefs.SetString("FullscreenState", $"{FullscreenState}"); if (FullscreenState) { //Screen.fullScreenMode = FullScreenMode.FullScreenWindow; Screen.SetResolution(1533, 720, true); } else { Screen.fullScreenMode = FullScreenMode.Windowed; Screen.SetResolution(1533, 720, false); } } public void DisableAnim(Animation anim) { anim.enabled = false; } public static void PlayAnimByName(Animation anim, string animName) { anim.PlayQueued(animName); } public void PlayAnimation(string animName) { if (animationToPlay) animationToPlay.PlayQueued(animName); } public void playOutAnim(Animation anim) { PlayAnimByName(anim, "SetPanOUT"); } public void playInAnim(Animation anim) { PlayAnimByName(anim, "SetPanOUT"); } private void Update() { PublicUnlockCursorInThisScene = UnlockCursorInThisScene; if (!UnlockCursorInThisScene) { if (Input.GetKeyDown(KeyCode.LeftAlt)) { Cursor.lockState = CursorLockMode.None; if (playerController) playerController.cameraCanMove = false; } else if (Input.GetKeyUp(KeyCode.LeftAlt)) { Cursor.lockState = CursorLockMode.Locked; if (playerController) playerController.cameraCanMove = true; } } else Cursor.lockState = CursorLockMode.None; if (DeactivateObjectOnGameObjectActivate) if (gameObject.activeInHierarchy) { DeactivateObjectOnGameObjectActivate.SetActive(false); gameObject.SetActive(false); } if (PlayAnimOnActive) if (PlayAnimOnActive.activeInHierarchy) { if (timesAnimPlayed < 1) { if (PlayOnceOnly) timesAnimPlayed++; PlayAnimOnActive.SetActive(false); PlayAnimation(animName); Debug.Log("Looping state: " + animationToPlay.clip.isLooping); } } } } }