using Assets.Scripts.Classes; using Assets.Scripts.Races; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace Assets.Scripts { public class UIHandler : MonoBehaviour { public GameObject compass; public GameObject information; public GameObject fight; public GameObject message; public GameObject charactersheet; public GameObject deathscreen; public GameObject options; public GameObject pauseMenu; public GameObject playerHUD; public GameObject questlog; public GameObject introduction; public GameObject tooltip; public GameObject tutorial; public GameObject buttonsHUD; public GameObject inventory; public GameObject waterLayer; public UIState state; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (state == UIState.GAME) { updatePlayerHUD(); switchWaterLayer(); updateCoordinates(); } } private void updateCoordinates() { GameObject coordinates = GameObject.Find("txtCoordinates"); Vector3 position = GameObject.Find("Player").transform.position; string tiletype = GameObject.Find("WorldGenerator").GetComponent().getCurrentTile().GetComponent().getTileType(); if (tiletype != null) { tiletype = tiletype.Replace("Tile", ""); } else { tiletype = "Spawn"; } coordinates.GetComponent().text = tiletype + "(" + (int)position.x + "/" + (int)position.y + "/" + (int)position.z + ")"; } private void switchWaterLayer() { if (GameObject.Find("Player").transform.position.y < -1) { waterLayer.transform.localScale = new Vector3(1, 1, 1); } else { waterLayer.transform.localScale = new Vector3(0, 0, 0); } } private void updatePlayerHUD() { updateHUD(GameObject.Find("Player").GetComponent()); } public bool canPlayerMove() { if (state == UIState.GAME || state == UIState.CHARACTER || state == UIState.QUEST || state == UIState.INVENTORY) { return true; } return false; } public bool isPlayerInFight() { return state == UIState.FIGHT; } public void startGame() { introduction.transform.localScale = new Vector3(0, 0, 0); tutorial.transform.localScale = new Vector3(1, 1, 1); showHUD(); state = UIState.GAME; } public void switchCharactersheet() { if (state == UIState.CHARACTER) { closeCharactersheet(); } else { openCharactersheet(); } } public void openOptions() { options.SetActive(true); GameObject.Find("AudioHandler").GetComponent().setSlider(); hideOtherElements(options); state = UIState.PAUSEOPTIONS; GameObject.Find("ScrollbarOptions").GetComponent().value = 1f; } public void closeOptions() { options.SetActive(false); state = UIState.PAUSE; openPauseMenu(); } public void openCharactersheet() { hideOtherElements(charactersheet); state = UIState.CHARACTER; } public void closeCharactersheet() { charactersheet.transform.localScale = new Vector3(0, 0, 0); showHUD(); state = UIState.GAME; } public void switchInventory() { if (state == UIState.INVENTORY) { closeInventory(); } else { openInventory(); } } public void openInventory() { hideOtherElements(inventory); state = UIState.INVENTORY; } public void closeInventory() { inventory.transform.localScale = new Vector3(0, 0, 0); showHUD(); state = UIState.GAME; } public void openFight() { GameObject.Find("txtRounds").GetComponent().text = "-1"; hideOtherElements(fight); state = UIState.FIGHT; } public void closeFight() { fight.transform.localScale = new Vector3(0, 0, 0); showHUD(); state = UIState.GAME; } public void showHUD() { playerHUD.transform.localScale = new Vector3(1,1,1); compass.transform.localScale = new Vector3(1, 1, 1); buttonsHUD.transform.localScale = new Vector3(1, 1, 1); } public void openMainMenu() { GameObject.Find("SceneHandlerLoaded").GetComponent().openMenuScene(); } public void switchPauseMenu() { if (state == UIState.GAME || state == UIState.CHARACTER || state == UIState.PAUSE || state == UIState.QUEST) { if (state == UIState.PAUSE) { closePauseMenu(); } else { if (state == UIState.GAME) { openPauseMenu(); } else { hideOtherElements(null); showHUD(); state = UIState.GAME; } } } } public void switchQuestLog() { if (state == UIState.QUEST) { closeQuestLog(); } else { openQuestLog(); } } public void openQuestLog() { questlog.GetComponent().showQuests(); state = UIState.QUEST; hideOtherElements(questlog); } public void closeQuestLog() { questlog.transform.localScale = new Vector3(0,0,0); state = UIState.GAME; showHUD(); } public void adaptScreen() { GameObject resolution = GameObject.Find("dropResolution"); GameObject mode = GameObject.Find("dropMode"); switch (resolution.GetComponent().value) { case 0: Screen.SetResolution(800,600, Screen.fullScreenMode); break; case 1: Screen.SetResolution(1280, 800, Screen.fullScreenMode); break; case 2: Screen.SetResolution(1920,1080, Screen.fullScreenMode); break; } switch (mode.GetComponent().value) { case 0: if (Screen.fullScreenMode != FullScreenMode.Windowed) { Screen.fullScreenMode = FullScreenMode.Windowed; } break; case 1: if (Screen.fullScreenMode != FullScreenMode.ExclusiveFullScreen) { Screen.fullScreenMode = FullScreenMode.ExclusiveFullScreen; } break; case 2: if (Screen.fullScreenMode != FullScreenMode.FullScreenWindow) { Screen.fullScreenMode = FullScreenMode.FullScreenWindow; } break; } } public void openPauseMenu() { hideOtherElements(pauseMenu); state = UIState.PAUSE; } public void closePauseMenu() { pauseMenu.transform.localScale = new Vector3(0, 0, 0); showHUD(); state = UIState.GAME; } public void showDeathScreen() { state = UIState.DEATH; hideOtherElements(deathscreen); } public void hideOtherElements(GameObject obj) { for (int i = 0; i < GameObject.Find("Canvas").transform.childCount; i++) { if (!GameObject.Find("Canvas").transform.GetChild(i).gameObject.Equals(obj)) { GameObject.Find("Canvas").transform.GetChild(i).localScale = new Vector3(0, 0, 0); } } if (obj != null) { obj.transform.localScale = new Vector3(1, 1, 1); } if (obj != fight) { showHUD(); } } public void displayInformation(string information) { GameObject.Find("txtObjectName").GetComponent().text = information; this.information.transform.localScale = new Vector3(1, 1, 1); } public void hideInformation() { information.transform.localScale = new Vector3(0, 0, 0); } public void showMessage(string message) { this.message.GetComponent().addMessage(message); } public void updateFightInterface(GameObject enemy, GameObject player) { updateFightInterfacePlayer(player); updateFightInterfaceEnemy(enemy); updateFightInterfaceActions(player); GameObject.Find("txtRounds").GetComponent().text = (int.Parse(GameObject.Find("txtRounds").GetComponent().text) + 1).ToString(); } private void updateFightInterfaceActions(GameObject player) { GameObject actionFour = GameObject.Find("action4"); GameObject actionFive = GameObject.Find("action5"); GameObject actionSix = GameObject.Find("action6"); player.GetComponent().displayAction(0, actionFour.transform.Find("imgAction").gameObject, actionFour.transform.Find("descAction").gameObject); player.GetComponent().displayAction(1, actionFive.transform.Find("imgAction").gameObject, actionFive.transform.Find("descAction").gameObject); player.GetComponent().displayAction(2, actionSix.transform.Find("imgAction").gameObject, actionSix.transform.Find("descAction").gameObject); } private void updateFightInterfacePlayer(GameObject player) { // { health, maxHealth, secondary, maxSecondary, strength, dexterity, intelligence }; int[] playerStats = player.GetComponent().getStats(); Dictionary equipment = inventory.GetComponent().getEquipmentBonus(); GameObject foreground = GameObject.Find("healthForegroundPlayer"); GameObject background = GameObject.Find("healthBackgroundPlayer"); GameObject text = GameObject.Find("healthTextPlayer"); updateBar(foreground, background, text, playerStats[1] + equipment["HP"], playerStats[0]); foreground = GameObject.Find("secondaryForegroundPlayer"); background = GameObject.Find("secondaryBackgroundPlayer"); text = GameObject.Find("secondaryTextPlayer"); updateBar(foreground, background, text, playerStats[3] + equipment["MP"], playerStats[2]); } private void updateFightInterfaceEnemy(GameObject enemy) { // { health, maxHealth, secondary, maxSecondary, strength, dexterity, intelligence }; int[] enemyStats = enemy.GetComponent().getStats(); GameObject foreground = GameObject.Find("healthForegroundEnemy"); GameObject background = GameObject.Find("healthBackgroundEnemy"); GameObject text = GameObject.Find("healthTextEnemy"); updateBar(foreground, background, text, enemyStats[1], enemyStats[0]); foreground = GameObject.Find("secondaryForegroundEnemy"); background = GameObject.Find("secondaryBackgroundEnemy"); text = GameObject.Find("secondaryTextEnemy"); updateBar(foreground, background, text, enemyStats[3], enemyStats[2]); } public void adjustInformation(Player player) { // { health, maxHealth, secondary, maxSecondary, strength, dexterity, intelligence, level, experience, maxExperience, points}; int[] playerStats = player.GetComponent().getStats(); Dictionary equipment = inventory.GetComponent().getEquipmentBonus(); GameObject.Find("txtStrength").GetComponent().text = "STR: " + playerStats[4] + " (+" + equipment["STR"] + ")"; GameObject.Find("txtDexterity").GetComponent().text = "DEX: " + playerStats[5] + " (+" + equipment["DEX"] + ")"; GameObject.Find("txtIntelligence").GetComponent().text = "INT: " + playerStats[6] + " (+" + equipment["INT"] + ")"; GameObject.Find("txtHealth").GetComponent().text = "Health: " + playerStats[1] + " (+" + equipment["HP"] + ")"; GameObject.Find("txtSecondary").GetComponent().text = "Mana: " + playerStats[3] + " (+" + equipment["MP"] + ")"; updateHealthUI(playerStats[0], playerStats[1] + equipment["HP"]); updateSecondaryUI(playerStats[2], playerStats[3] + equipment["MP"]); updateExperienceUI(playerStats[8], playerStats[9]); player.updateName(GameObject.Find("txtName").GetComponent()); updatePoints(playerStats[10]); player.displaySkills(GameObject.Find("pnlSkills")); } private void updatePoints(int points) { GameObject strength = GameObject.Find("btnStrengthIncrease"); GameObject dexterity = GameObject.Find("btnDexterityIncrease"); GameObject intelligence = GameObject.Find("btnIntelligenceIncrease"); GameObject health = GameObject.Find("btnHealthIncrease"); GameObject secondary = GameObject.Find("btnSecondaryIncrease"); GameObject txtPoints = GameObject.Find("txtPoints"); txtPoints.GetComponent().text = "Your available points: " + points; if (points > 0) { strength.transform.localScale = new Vector3(1, 1, 1); dexterity.transform.localScale = new Vector3(1, 1, 1); intelligence.transform.localScale = new Vector3(1, 1, 1); health.transform.localScale = new Vector3(1, 1, 1); secondary.transform.localScale = new Vector3(1, 1, 1); } else { strength.transform.localScale = new Vector3(0, 0, 0); dexterity.transform.localScale = new Vector3(0, 0, 0); intelligence.transform.localScale = new Vector3(0, 0, 0); health.transform.localScale = new Vector3(0, 0, 0); secondary.transform.localScale = new Vector3(0, 0, 0); } } private void updateHealthUI(int health, int maxHealth) { GameObject foreground = GameObject.Find("healthForegroundInformation"); GameObject background = GameObject.Find("healthBackgroundInformation"); GameObject text = GameObject.Find("healthTextInformation"); updateBar(foreground, background, text, maxHealth, health); } private void updateSecondaryUI(int secondary, int maxSecondary) { GameObject foreground = GameObject.Find("secondaryForegroundInformation"); GameObject background = GameObject.Find("secondaryBackgroundInformation"); GameObject text = GameObject.Find("secondaryTextInformation"); updateBar(foreground, background, text, maxSecondary, secondary); } private void updateExperienceUI(int experience, int maxExperience) { GameObject foreground = GameObject.Find("experienceForeground"); GameObject background = GameObject.Find("experienceBackground"); GameObject text = GameObject.Find("experienceText"); updateBar(foreground, background, text, maxExperience, experience); } public void updateHUD(Player player) { // { health, maxHealth, secondary, maxSecondary, strength, dexterity, intelligence, level, experience, maxExperience}; int[] playerStats = player.GetComponent().getStats(); Dictionary equipment = inventory.GetComponent().getEquipmentBonus(); GameObject information = GameObject.Find("txtInformationHUD"); player.updateNameHUD(information.GetComponent()); GameObject foreground = GameObject.Find("healthForegroundHUD"); GameObject background = GameObject.Find("healthBackgroundHUD"); updateBar(foreground, background, null, playerStats[1] + equipment["HP"], playerStats[0]); foreground = GameObject.Find("secondaryForegroundHUD"); background = GameObject.Find("secondaryBackgroundHUD"); updateBar(foreground, background, null, playerStats[3] + equipment["MP"], playerStats[2]); } public void updateBar(GameObject bar, GameObject barBackground, GameObject textField, int maxValue, int minValue) { string text = minValue + "/" + maxValue; double percentage = 0; if (maxValue > 0) { percentage = (1 / (double)maxValue) * minValue; } float change = (float)(barBackground.GetComponent().rect.width - (barBackground.GetComponent().rect.width * percentage)); if (textField != null) { textField.GetComponent().text = text; } bar.GetComponent().offsetMax = new Vector2(-change, bar.GetComponent().offsetMax.y); } public void openIntroduction() { GameObject.Find("AudioHandler").GetComponent().Start(); if (PlayerPrefs.GetInt("isLoad") == 0) { GameObject.Find("WorldGenerator").GetComponent().resetGame(PlayerPrefs.GetInt("cityAmount")); GameObject.Find("Player").GetComponent().generatePlayer(); GameObject.Find("Player").GetComponent().finishPlayerCreation(); hideOtherElements(introduction); state = UIState.TUTORIAL; } else { FileHandler.loadGame(GameObject.Find("Player").GetComponent(), GameObject.Find("WorldGenerator").GetComponent(), GameObject.Find("Inventory").GetComponent(), GameObject.Find("QuestLog").GetComponent()); hideOtherElements(introduction); introduction.transform.localScale = new Vector3(0, 0, 0); tutorial.transform.localScale = new Vector3(0,0,0); showHUD(); state = UIState.GAME; } updatePlayerHUD(); } public void closeTutorial() { tutorial.transform.localScale = new Vector3(0,0,0); } } }