using Assets.Scripts; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; using UnityEngine.UI; using Assets.Scripts.Player; public class Controls : MonoBehaviour { GameObject player; GameObject fight; GameObject worldGen; GameObject playerCam; UIHandler uihandler; Vector3 input; Vector2 view; PlayerInput playerInput; MoveDirection direction; void Start() { player = GameObject.Find("Player"); fight = GameObject.Find("Fight"); worldGen = GameObject.Find("WorldGenerator"); playerCam = GameObject.Find("Main Camera"); uihandler = GameObject.Find("UIHandler").GetComponent(); input = new Vector3(); view = new Vector2(); playerInput = GetComponent(); direction = MoveDirection.None; } // Update is called once per frame void Update() { if (uihandler.state == UIState.GAME && playerInput.currentActionMap.name != "MainGame") { playerInput.SwitchCurrentActionMap("MainGame"); } if (uihandler.state != UIState.GAME && playerInput.currentActionMap.name != "Menu") { playerInput.SwitchCurrentActionMap("Menu"); } if (!player.GetComponent().takeDamage(0)) { if (!uihandler.isPlayerInFight()) { if (uihandler.canPlayerRotate()) { player.GetComponent().lookAround(view, playerInput.currentControlScheme == "Controller"); } if (uihandler.canPlayerMove()) { player.GetComponent().move(input); } } } } public void FixedUpdate() { if (direction != MoveDirection.None) { AxisEventData data = new AxisEventData(EventSystem.current); data.moveDir = direction; data.selectedObject = EventSystem.current.currentSelectedGameObject; ExecuteEvents.Execute(data.selectedObject, data, ExecuteEvents.moveHandler); } if (playerInput.currentControlScheme == "Controller") { if (Cursor.lockState != CursorLockMode.Locked) { Cursor.lockState = CursorLockMode.Locked; } GameObject.Find("txtInteract").GetComponent().text = GameObject.Find("txtInteract").GetComponent().text.Replace("[E]", "[ButtonEast]"); GameObject.Find("txtInteraction_Tutorial").GetComponent().text = GameObject.Find("txtInteraction_Tutorial").GetComponent().text.Replace("[E]", "[ButtonEast]"); GameObject.Find("txtTutorialGoal").GetComponent().text = GameObject.Find("txtTutorialGoal").GetComponent().text.Replace("[ESC]", "[Start]"); } else { if (uihandler.canPlayerRotate()) { Cursor.lockState = CursorLockMode.Locked; } else { Cursor.lockState = CursorLockMode.Confined; } GameObject.Find("txtInteract").GetComponent().text = GameObject.Find("txtInteract").GetComponent().text.Replace("[ButtonEast]", "[E]"); GameObject.Find("txtInteraction_Tutorial").GetComponent().text = GameObject.Find("txtInteraction_Tutorial").GetComponent().text.Replace("[E]", "[ButtonEast]"); GameObject.Find("txtTutorialGoal").GetComponent().text = GameObject.Find("txtTutorialGoal").GetComponent().text.Replace("[Start]", "[ESC]"); } } public void OnLooking(InputValue value) { view = value.Get(); } public void OnMovement(InputValue value) { try { input = value.Get(); } catch { if (value.Get().x < 0) { direction = MoveDirection.Left; } else if (value.Get().x > 0) { direction = MoveDirection.Right; } else if (value.Get().y < 0) { direction = MoveDirection.Down; } else if (value.Get().y > 0) { direction = MoveDirection.Up; } } } public void OnInteraction() { if (uihandler.canPlayerMove()) { GameObject target = playerCam.GetComponent().interactWithObject(); if (target != null) { switch (target.tag.Split(':')[1]) { case "Enemy": fight.GetComponent().startFight(worldGen.GetComponent().getCurrentTile(), target, player); break; case "Tree": StartCoroutine(playParticle(target)); GameObject.Find("Inventory").GetComponent().addItem(new Item("Wood")); break; case "Stone": StartCoroutine(playAnimation(target, "Mining")); GameObject.Find("Inventory").GetComponent().addItem(new Item("Rock")); break; case "NPC": target.GetComponent().interact(); break; case "Door": target.GetComponent().interact(); break; case "Chest": target.GetComponent().interact(); break; case "Ore": if (target.name.ToLower().Contains("iron")) { GameObject.Find("Inventory").GetComponent().addItem(new Item("Iron ore")); } else if (target.name.ToLower().Contains("gold")) { GameObject.Find("Inventory").GetComponent().addItem(new Item("Gold ore")); } else if (target.name.ToLower().Contains("copper")) { GameObject.Find("Inventory").GetComponent().addItem(new Item("Copper ore")); } else if (target.name.ToLower().Contains("tin")) { GameObject.Find("Inventory").GetComponent().addItem(new Item("Tin ore")); } Destroy(target); break; } } } } IEnumerator playParticle(GameObject target) { Vector3 playerPos = player.transform.position; playerPos.y = target.transform.position.y; Quaternion newRotation = Quaternion.LookRotation(playerPos - target.transform.position, target.transform.TransformDirection(Vector3.up)); ParticleSystem particleSystem = target.GetComponent(); ParticleSystem.ShapeModule shape = particleSystem.shape; shape.rotation = newRotation.eulerAngles; particleSystem.Play(); yield return new WaitUntil(() => !particleSystem.isPlaying); Destroy(target); } IEnumerator playAnimation(GameObject target, string key) { player.GetComponent().Play(key); Animator animator = player.GetComponent(); AnimationClip[] clips = animator.runtimeAnimatorController.animationClips; float length = 0; foreach (AnimationClip clip in clips) { if (clip.name.ToLower() == key.ToLower()) { length = clip.length; break; } } yield return new WaitForSeconds(length); Destroy(target); } public void OnInventory() { uihandler.switchInventory(); } public void OnQuestlog() { uihandler.switchQuestLog(); } public void OnPause() { uihandler.switchPauseMenu(); } public void OnSkillOne() { if (uihandler.isPlayerInFight()) { fight.GetComponent().playerAction(1); } } public void OnSkillTwo() { if (uihandler.isPlayerInFight()) { fight.GetComponent().playerAction(2); } } public void OnSkillThree() { if (uihandler.isPlayerInFight()) { fight.GetComponent().playerAction(3); } } public void OnSkillFour() { if (uihandler.isPlayerInFight()) { fight.GetComponent().playerAction(4); } } public void OnSkillFive() { if (uihandler.isPlayerInFight()) { fight.GetComponent().playerAction(5); } } public void OnSkillSix() { if (uihandler.isPlayerInFight()) { fight.GetComponent().playerAction(6); } } }