using Raumgleiter.BaseRGDK; using Raumgleiter.BaseRGDK.JSON; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace Raumgleiter.RGDKDevLab { /// /// > Basic UI script interface to use with MtexDownloadFunctions /// public class MtexUI_005 : MonoBehaviour { //------------------------------------------------------------------------------------------------------------------ //Connections //[Header("Connections")] //Resources //[Header("Resources")] //Attributes //[Header("Attributes")] MtexDownloadFunctions mtexDownloadFunctions = new MtexDownloadFunctions(); public GameObject Screen001, Screen002, Screen003, ColorPicker, MtexDownloader; public GameObject GridLayout, GridLayout1, myCanvas, ButtonPrefab01, TogglePrefab01, Cube; public Text NumberOfMaterials, MaterialInfo, CurrentScreenName; public Button ButtonBackToMaterials, ButtonBackToTypes, ButtonNextPage, ButtonPreviousPage, ButtonSaveMatrial, ButtonShowMtex, ButtonApplyMaerial; public RawImage TexturePreview; public Dropdown DropDownSize; private int TextSize = 9; private List Screens; private List TypeClassList; private List MatClassList; private Dictionary> urlVariables = new Dictionary>(); /// Matrial and Texture public int Mat_id; private Material NewMaterial; public Material TempMaterial; private Vector2 MaterialTiling = new Vector2(1f, 1f); private Texture NewTexture, NewBump, NewNormal; private string MaterialName, TotalEntries; //Stats //[Header("Stats")] //protected bool IsSetUp = false; //protected bool IsAwoken = false; //Getter //Delegates //------------------------------------------------------------------------------------------------------------------ //awake //protected void Awake() //{ // //Already Awoken? // if (!IsAwoken) // { // IsAwoken = true; // } //} //------------------------------------------------------------------------------------------------------------------ //start void Start() { // make a list of screens for easy switching Screens = new List() { Screen001, Screen002, Screen003 }; // add listeners to buttons ButtonShowMtex.onClick.AddListener(delegate { ShowMtex(); }); ButtonApplyMaerial.onClick.AddListener(delegate { ApplyMaterial(); }); ButtonBackToMaterials.onClick.AddListener(delegate { ToggleScreens(Screen002); }); ButtonBackToTypes.onClick.AddListener(delegate { BackToScreen001(); }); ButtonNextPage.onClick.AddListener(delegate { GetNext(); }); ButtonPreviousPage.onClick.AddListener(delegate { GetPrevious(); }); ButtonSaveMatrial.onClick.AddListener(delegate { SaveMaterial(); }); DropDownSize.onValueChanged.AddListener(delegate { SizeDdValueChanged(DropDownSize); }); FillUrlDictionary(); } public void StartMtexDownloader() { Debug.Log("MtexUI_005::StartMtexDownloader: Well, it got to here.."); // get the types of materials for the start screen StartCoroutine(StartScreen()); StartCoroutine(GetColors()); } private void ApplyMaterial() { // TempMaterial = NewMaterial; // MtexDownloadFunctions.SaveMaterial(NewMaterial, "TestRed", (Texture2D)NewTexture, (Texture2D)NewNormal); //Cube.GetComponent().UpdateMaterial(NewMaterial); var Building = GameObject.Find("Painter").GetComponent().GetThisGameObject(); GameObject.Find("Painter").GetComponent().UpdateMaterial2(NewMaterial, Building); } private void ShowMtex() { if (MtexDownloader.active) { MtexDownloader.SetActive(false); } else { MtexDownloader.SetActive(true); } } //------------------------------------------------------------------------------------------------------------------ //setup //public void SetUp() //{ // Awake(); // IsSetUp = true; //} //------------------------------------------------------------------------------------------------------------------ //destroy //*********************************************************************************************************************** //update //*********************************************************************************************************************** //refresh //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //events //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------ //*********************************************************************************************************************** //private private IEnumerator GetColors() { // get all colors var ColorClassList = new List(); yield return mtexDownloadFunctions.GetColors(value => ColorClassList = value); //make toggle instance for every color for (int i = 0; i < ColorClassList.Count; i++) { Toggle thisToggle = AddButtonLike(ColorPicker, TogglePrefab01, ColorClassList[i].name, ColorClassList[i].id) .GetComponent(); // add listener thisToggle.onValueChanged.AddListener(delegate { ColorToggleValueChanged(thisToggle); }); // add toggle to group to work as radio button thisToggle.group = ColorPicker.GetComponent(); } } //------------------------------------------------------------------------------------------------------------------ private bool IsMouseOverUI() { return EventSystem.current.IsPointerOverGameObject(); } //------------------------------------------------------------------------------------------------------------------ private void ColorToggleValueChanged(Toggle thisToggle) { // add or remove color id from url if (thisToggle.isOn) { urlVariables["color_id"].Add(int.Parse(thisToggle.name)); } else { urlVariables["color_id"].Remove(int.Parse(thisToggle.name)); } // after color change always reset page to 1 urlVariables["page"][0] = 1; //update materials StartCoroutine(UpdateMaterialsAllScreen()); } //------------------------------------------------------------------------------------------------------------------ private void FillUrlDictionary() { var manufacturer_id_list = new List(); manufacturer_id_list.Add(999999); urlVariables.Add("manufacturer_id", manufacturer_id_list); var type_id_list = new List(); type_id_list.Add(999999); urlVariables.Add("type_id", type_id_list); var color_id_list = new List(); urlVariables.Add("color_id", color_id_list); var per_page_list = new List(); per_page_list.Add(36); urlVariables.Add("per_page", per_page_list); var page_list = new List(); page_list.Add(1); urlVariables.Add("page", page_list); } //------------------------------------------------------------------------------------------------------------------ private void SaveMaterial() { MtexDownloadFunctions.SaveMaterial(NewMaterial, MaterialName, (Texture2D)NewTexture, (Texture2D)NewNormal); } //------------------------------------------------------------------------------------------------------------------ private IEnumerator StartScreen() { // activate Screen 001 ToggleScreens(Screen001); CurrentScreenName.text = "Material Types"; // Destroy old grid with types ClearGrid(Screen001); // add new grid var thisGrid = AddGridToScreen(Screen001); // check for number of material types yield return mtexDownloadFunctions.GetTypes(value => TypeClassList = value); var totalEntries = TypeClassList.Count; PopulateTypesGrid(thisGrid, totalEntries); } //------------------------------------------------------------------------------------------------------------------ private void PopulateTypesGrid(GameObject thisGrid, int totalEntries) { for (int i = 0; i < totalEntries; i++) { try { // try catch block if buttons destroyed before being assigned var thisButtonName = TypeClassList[i].name; Button thisButton = AddButtonLike(thisGrid, ButtonPrefab01, thisButtonName, TypeClassList[i].id) .GetComponent