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