using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; using static Demo_Project.SceneManager; namespace Demo_Project { public class SideMenu : MonoBehaviour { // Menu state related items public bool isMenuOpen = false; const float openPositon = -263; const float closePosition = -726; public float menuMoveSpeed = 5; string menuState = ""; //Upper menu related items int currentSelectedItem = 0; int totalNumberOfItems = 0; // Lower menu related items public string selectedItem = ""; public GameObject selectedItemObject = null; // Camera related items float cameraOriginalSize = 2.78f; float cameraOriginalPosition = 0; float cameraShrinkSize = 5.0f; float cameraShrinkPosition = -2.5f; GameObject itemNameObject = null; bool moveText = false; public float textPopupMoveSpeed = .3f; public bool burstDelay = false; float timeSinceLastFrame = 0; // Start is called before the first frame update void Start() { SceneManager.listOfMenuObjects.Add(this.gameObject); itemNameObject = transform.parent.Find("Item_Name").gameObject; SelectBurst(); AdjustSelectionArrow(); UpdateItemRatio(); UpdateItemName(); InitialOpenMenu(); } void InitialOpenMenu() { //Open Menu transform.Find("Main Menu Image").GetComponent().localPosition = new Vector3(openPositon, 241, 0); transform.Find("Main Menu Image").transform.Find("Arrow").GetComponent().localScale = new Vector3(1, 1, 1); // Adjust the camera GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize = cameraShrinkSize; GameObject.FindWithTag("MainCamera").GetComponent().transform.position = new Vector3(cameraShrinkPosition, 0, -10); isMenuOpen = true; } // Controls the click action of the open and close button. public void MenuClickCheck() { if (!isMenuOpen && menuState == "") { menuState = "opening"; } else { menuState = "closing"; } } // Click of the next button public void NextClick() { currentSelectedItem++; if (currentSelectedItem >= totalNumberOfItems) { currentSelectedItem = 0; } UpdateItemName(); UpdateItemRatio(); SendBulletInformationToPlayer(); burstDelay = true; for (int i = 0; i < SceneManager.listOfArms.Count; i++) { SceneManager.listOfArms[i].GetComponent().RemoveChargeObject(); } NewCheck(); } // Click of the previous button public void PrevClick() { currentSelectedItem--; if (currentSelectedItem < 0) { currentSelectedItem = totalNumberOfItems - 1; } UpdateItemName(); UpdateItemRatio(); SendBulletInformationToPlayer(); burstDelay = true; for (int i = 0; i < SceneManager.listOfArms.Count; i++) { SceneManager.listOfArms[i].GetComponent().RemoveChargeObject(); } NewCheck(); } // Select Burst from the menu public void SelectBurst() { if (selectedItem != "burst") { selectedItem = "burst"; currentSelectedItem = 0; totalNumberOfItems = transform.Find("LowerSection").transform.Find("Burst").transform.childCount; if (totalNumberOfItems > 0) { UpdateItemName(); } UpdateItemRatio(); AdjustSelectionArrow(); HidePlayerAndTarget(); SendBulletInformationToPlayer(); burstDelay = true; NewCheck(); CheckLeftClickText(); } } // Select Loop from the menu public void SelectLoop() { if (selectedItem != "loop") { selectedItem = "loop"; currentSelectedItem = 0; totalNumberOfItems = transform.Find("LowerSection").transform.Find("Loops").transform.childCount; if (totalNumberOfItems > 0) { UpdateItemName(); } UpdateItemRatio(); AdjustSelectionArrow(); HidePlayerAndTarget(); SendBulletInformationToPlayer(); NewCheck(); CheckLeftClickText(); for (int i = 0; i < SceneManager.listOfArms.Count; i++) { SceneManager.listOfArms[i].GetComponent().BurstManualRemoval(); } } } // Select Projectile from the menu public void SelectProjectile() { if (selectedItem != "projectile") { selectedItem = "projectile"; currentSelectedItem = 0; totalNumberOfItems = transform.Find("LowerSection").transform.Find("Projectiles").transform.childCount; if (totalNumberOfItems > 0) { UpdateItemName(); } UpdateItemRatio(); AdjustSelectionArrow(); SendBulletInformationToPlayer(); ShowPlayerAndTarget(); NewCheck(); CheckLeftClickText(); for (int i = 0; i < SceneManager.listOfArms.Count; i++) { SceneManager.listOfArms[i].GetComponent().BurstManualRemoval(); } } } // Sends information about the selected object to the player public void SendBulletInformationToPlayer() { for (int i = 0; i < SceneManager.listOfArms.Count; i++) { if (selectedItem == "loop") { SceneManager.listOfArms[i].GetComponent().ReceiveLoopInformation(selectedItemObject); } if (selectedItem == "burst") { SceneManager.listOfArms[i].GetComponent().PlayBurst(); } } } //Moves the selection arrow to the selected item public void AdjustSelectionArrow() { GameObject arrowSelection = transform.Find("Main Menu Image").transform.Find("LowerSection").transform.Find("Selection_Arrow").gameObject; Vector3 arrowPosition = arrowSelection.GetComponent().localPosition; if (selectedItem == "burst") { arrowPosition.y = 33; arrowSelection.GetComponent().localPosition = arrowPosition; } else if (selectedItem == "loop") { arrowPosition.y = -60; arrowSelection.GetComponent().localPosition = arrowPosition; } else if (selectedItem == "projectile") { arrowPosition.y = -150; arrowSelection.GetComponent().localPosition = arrowPosition; } } // Update the items name in the menu void UpdateItemName() { Transform parentItem = null; if (selectedItem == "projectile") { parentItem = transform.Find("LowerSection").transform.Find("Projectiles"); } else if (selectedItem == "burst") { parentItem = transform.Find("LowerSection").transform.Find("Burst"); } else if (selectedItem == "loop") { parentItem = transform.Find("LowerSection").transform.Find("Loops"); } transform.Find("Main Menu Image").transform.Find("UpperSection").transform.Find("Selection_text").GetComponent().text = parentItem.transform.GetChild(currentSelectedItem).name; itemNameObject.GetComponent().text = parentItem.transform.GetChild(currentSelectedItem).name; SetSelectedItem(parentItem.transform.GetChild(currentSelectedItem).gameObject); ResetItemNameText(); } void ResetItemNameText() { itemNameObject.GetComponent().localPosition = new Vector3(620, -585, 0); moveText = true; } // Sets the selected item void SetSelectedItem(GameObject tempGameObject) { selectedItemObject = tempGameObject; } // Updates the item ratio void UpdateItemRatio() { int tempCurrentSelected = currentSelectedItem + 1; transform.Find("Main Menu Image").transform.Find("UpperSection").transform.Find("Ratio").GetComponent().text = tempCurrentSelected.ToString() + " / " + totalNumberOfItems.ToString(); } // Controls the menu's movements. void UpdateMenuState() { if (menuState == "opening") { Vector3 tempPosition = transform.Find("Main Menu Image").GetComponent().localPosition; tempPosition.x += menuMoveSpeed * timeSinceLastFrame; transform.Find("Main Menu Image").GetComponent().localPosition = tempPosition; MoveCamera(); if (tempPosition.x >= openPositon) { isMenuOpen = true; menuState = ""; transform.Find("Main Menu Image").GetComponent().localPosition = new Vector3(openPositon, 241, 0); transform.Find("Main Menu Image").transform.Find("Arrow").GetComponent().localScale = new Vector3(1, 1, 1); } } if (menuState == "closing") { Vector3 tempPosition = transform.Find("Main Menu Image").GetComponent().localPosition; tempPosition.x -= menuMoveSpeed * timeSinceLastFrame; transform.Find("Main Menu Image").GetComponent().localPosition = tempPosition; MoveCamera(); if (tempPosition.x <= closePosition) { isMenuOpen = false; menuState = ""; transform.Find("Main Menu Image").GetComponent().localPosition = new Vector3(closePosition, 241, 0); transform.Find("Main Menu Image").transform.Find("Arrow").GetComponent().localScale = new Vector3(-1, 1, 1); } } } void ScrollWheelAndButtonCheck() { if (Input.mouseScrollDelta.y < 0 || Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.W)) { NextClick(); } if (Input.mouseScrollDelta.y > 0 || Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.S)) { PrevClick(); } } // Hides the player and target from the screen void HidePlayerAndTarget() { for (int i = 0; i < SceneManager.listOfArms.Count; i++) { SceneManager.listOfArms[i].GetComponent().enabled = false; SceneManager.listOfArms[i].GetComponent().RemoveChargeObject(); } for (int i = 0; i < SceneManager.listOfHeads.Count; i++) { SceneManager.listOfHeads[i].GetComponent().enabled = false; } for (int i = 0; i < SceneManager.listOfBodies.Count; i++) { SceneManager.listOfBodies[i].GetComponent().enabled = false; } for (int i = 0; i < SceneManager.listOfTargets.Count; i++) { SceneManager.listOfTargets[i].GetComponent().enabled = false; } } // Displays the player and target on the screen void ShowPlayerAndTarget() { for (int i = 0; i < SceneManager.listOfArms.Count; i++) { SceneManager.listOfArms[i].GetComponent().enabled = true; } for (int i = 0; i < SceneManager.listOfHeads.Count; i++) { SceneManager.listOfHeads[i].GetComponent().enabled = true; } for (int i = 0; i < SceneManager.listOfBodies.Count; i++) { SceneManager.listOfBodies[i].GetComponent().enabled = true; } for (int i = 0; i < SceneManager.listOfTargets.Count; i++) { SceneManager.listOfTargets[i].GetComponent().enabled = true; } } void MoveCamera() { if (menuState == "opening") { GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize += .05f * timeSinceLastFrame; GameObject.FindWithTag("MainCamera").GetComponent().transform.Translate(-.05f * timeSinceLastFrame, 0, 0); if (GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize > cameraShrinkSize) { GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize = cameraShrinkSize; } if (GameObject.FindWithTag("MainCamera").GetComponent().transform.position.x < cameraShrinkPosition) { GameObject.FindWithTag("MainCamera").GetComponent().transform.position = new Vector3(cameraShrinkPosition, 0, -10); } } if (menuState == "closing") { GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize -= .05f * timeSinceLastFrame; GameObject.FindWithTag("MainCamera").GetComponent().transform.Translate(.05f * timeSinceLastFrame, 0, 0); if (GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize < cameraOriginalSize) { GameObject.FindWithTag("MainCamera").GetComponent().orthographicSize = cameraOriginalSize; } if (GameObject.FindWithTag("MainCamera").GetComponent().transform.position.x > cameraOriginalPosition) { GameObject.FindWithTag("MainCamera").GetComponent().transform.position = new Vector3(cameraOriginalPosition, 0, -10); } } } void UpdateItemNameTextPosition() { if (moveText) { itemNameObject.GetComponent().Translate(0, textPopupMoveSpeed * timeSinceLastFrame, 0); if (itemNameObject.GetComponent().localPosition.y >= -495) { moveText = false; itemNameObject.GetComponent().localPosition = new Vector3(itemNameObject.GetComponent().localPosition.x, -495, itemNameObject.GetComponent().localPosition.z); } } } void NewCheck() { if (selectedItemObject.GetComponent() != null && selectedItemObject.GetComponent().isNew) { transform.Find("Main Menu Image").transform.Find("NewImage").GetComponent().enabled = true; } else { transform.Find("Main Menu Image").transform.Find("NewImage").GetComponent().enabled = false; } } public void CheckLeftClickText() { if (selectedItem == "loop") { transform.Find("Main Menu Image").transform.Find("LeftClickText").GetComponent().enabled = false; } else { transform.Find("Main Menu Image").transform.Find("LeftClickText").GetComponent().enabled = true; } } public void OpenCartoonCoffeeWebsite() { Application.OpenURL("http://cartooncoffeegames.com/"); } // Update is called once per frame void Update() { timeSinceLastFrame = Time.deltaTime / .001666f; burstDelay = false; UpdateMenuState(); UpdateItemNameTextPosition(); ScrollWheelAndButtonCheck(); } } }