using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; using UnityEngine.U2D; using System; using System.Collections; public class DECO_PNL : MonoBehaviour { public GameObject PNL; //public GameObject _ColorPicker1; //public GameObject _ColorPicker2; public GameObject _MODEL; public GameObject _MODELContainer; public GameObject _CABTEXTURES; public TMP_Dropdown _Finish1; public TMP_Dropdown _Finish2; public TMP_Text _C1; public TMP_Text _C2; [SerializeField] GameObject[] _buttons; public GameObject CategorySelector; public GameObject _ColorPnl_1; public GameObject _ColorPnl_2; public Image Show1; public Image Show2; public TMP_Text _Title1; public TMP_Text _Title2; public GameObject _Bulkheadcut; //public Image _Preview1; //public Image _Preview2; public static DECO_PNL Instance { get; private set; } void Awake() { Instance = this; } public void StartPNL(string name) { print("name start====================="+name); _G.PON = "DECOpnl"; DOIT.CloseALLPNL(); PNL.SetActive(true); PNL.transform.localPosition = new Vector3(0, 0, 0); string Path = "Canvas/Panel_SCENE/PNL/DECOpnl"; //Collection Selector CategorySelector.SetActive(false); _Bulkheadcut.SetActive(false); int NumberOfCategory=0; switch (name) { case "PICTURE":NumberOfCategory=2;break;//SetNumberOfActive(2);break; case "LAMP":NumberOfCategory=2;break;//SetNumberOfActive(2);break; case "WADRYER":NumberOfCategory=2;break;//SetNumberOfActive(2);break; case "SLIDER":NumberOfCategory=4;break;//SetNumberOfActive(2);break; } if(Get.PreferenceBool("VERSION_DESIGNER") && NumberOfCategory>0){ SetNumberOfActive(NumberOfCategory); } else if (name == "LAMP") { SetNumberOfActive(NumberOfCategory); } AddModelsOnPanel(name,"Standard"); Get.o2(Path + "/TEXT", "Title").GetComponent().text = TRANS.This("T_" + name); // Get.o1("COLOR_CHART")?.SetActive(false); Get.o2(Path + "/SIZE", "MoE").SetActive(false); Get.o2(Path , "Setting").SetActive(false); if (name == "MIRROR") { //name=====================MIRROR Get.o2("DECOpnl/SIZE", "MoE").SetActive(true); Get.o2(Path , "Setting").SetActive(true); } //From Floor Input bool isFF = false; if (new List { "WINDOW", "PICTURE" }.Contains(name)) { isFF = true; } Get.o2(Path + "/SIZE", "MoFF").SetActive(isFF); //Add start size Get.o1(Path + "/MODEL/Viewport/Content").transform.GetChild(0).gameObject.GetComponent().isOn = true; //CabTextures if (name == "BLOC") { if (name == "BLOC") { AddCabtextureToPnl(); } } else _CABTEXTURES.SetActive(false); //Finish FillFinishDropdown(); //Center Model Panel SetModelPnlPosition(name); //Set.ToggleGroupToAllChild(Path + "/MODEL/Viewport/Content"); if (!_P.ListSwitch["ALLOW_PROJECTION_SINK"] && name == "SINK") { _MODELContainer.transform.Find("SINK101").gameObject.SetActive(false); _MODELContainer.transform.Find("SINK102").gameObject.SetActive(false); } //Mollding bool isMolding = false; if (new List { "WINDOW","DOOR","PATIO" }.Contains(name)) { isMolding = true; } Get.o2(Path, "MOLDING").SetActive(isMolding); //PICTURE // if (name == "PICTURE") // { // Get.o2(Path + "/COLORS/ColorPickerDeco1", "Slider").GetComponent().value = 0; // Get.o2(Path + "/COLORS/ColorPickerDeco2", "Slider").GetComponent().value = 1; // } StartCoroutine(SelectAfterFrame()); SetColorPNL(name); } IEnumerator SelectAfterFrame() { yield return null; // attend 1 frame SelectDecoObject.Instance.Select(); } public void SetColorPNL(string name) { print("From SetCol name==="+name); _ColorPnl_1.SetActive(true); _ColorPnl_2.SetActive(true); bool isColor1=true; bool isColor2=true; _Finish1.value=1; if (name is "SLIDER"){isColor1 = true; isColor2 =true;} if (name is "HOOW" or "HOOC" or "TABLE" or "WINDOW" or "ORNAMENT" or "BLOC")isColor2 = false; if (name is "FRIDGE" or "STOVE" or "BUILDIN" or "TOPSTOVE" or "DISHWASHER" or "MICROWAVE" or "CELLAR" or "WADRYER" or "OPEN" or "MIRROR") { isColor1 = false; isColor2 = false;} _G.PNL = name switch{ "FAUCET" => "FAUCETpnl", "SINK" => "SINKpnl",_ => _G.PNL }; if (name is "FAUCET" or "SINK"){isColor2 = false;} if (name == "MIRROR") { //name=====================MIRROR //Get.o2("DECOpnl/SIZE", "MoE").SetActive(true); isColor2=false; //Get.o2(Path , "Setting").SetActive(true); } _ColorPnl_1.SetActive(isColor1); _ColorPnl_2.SetActive(isColor2); if(name is "SMALL") { Show1.color=Color.black; Show2.color=Color.grey; _Title1.text=TRANS.This("T_Color")+" 1"; _Title2.text=TRANS.This("T_Color")+" 2"; _Finish1.value=2; _Finish2.value=2; } if(name is "PICTURE") { Show1.color=DOIT.CSc("CCCACA",255); Show2.color=Color.black; _Title1.text=TRANS.This("T_Color")+" "+TRANS.This("T_Light"); _Title2.text=TRANS.This("T_Color")+" "+TRANS.This("T_Dark"); } if(name is "CHAIR" or "STOOL") { Show1.color=DOIT.CSc("D1C3B4",255); Show2.color=DOIT.CSc("705B56",255); _Title1.text=TRANS.This("T_Seat"); _Title2.text=TRANS.This("T_Frame"); _Finish1.value=1; _Finish2.value=1; } if(name is "LAMP") { Show1.color=DOIT.CSc("F8F7F5",255); Show2.color=DOIT.CSc("2C2C2C",255); _Title1.text=TRANS.This("T_Lampshade"); _Title2.text=TRANS.This("T_Frame"); _Finish1.value=2; _Finish2.value=2; } if(name is "MIROR") { Show1.color=DOIT.CSc("F8F7F5",255); _Title1.text="";//TRANS.This("T_Lampshade"); } if(name is "TABLE") { Show1.color=DOIT.CSc("55403C",255); _Title1.text="";//TRANS.This("T_Lampshade"); _Finish1.value=2; } if(name is "ORNAMENT") { Show1.color=DOIT.CSc("ffffff",255); _Title1.text="";//TRANS.This("T_Lampshade"); _Finish1.value=1; } if (name is "HOOW" or "HOOC") { Show1.color=DOIT.CSc("C5C3C3",255); _Title1.text="";//TRANS.This("T_Lampshade"); _Finish1.value=2; } if (name is "FAUCET" or "SINK" ) { Show1.color=DOIT.CSc("C5C3C3",255); _Finish1.value=2; _Title1.text=""; } if (name is "BATH" or "TOILET" or "BASINK" ) { Show1.color=DOIT.CSc("ffffff",255); _Finish1.value=2; Show2.color=DOIT.CSc("C5C3C3",255); _Finish2.value=2; _Title1.text=TRANS.This("T_Frame"); _Title2.text=TRANS.This("T_Faucet"); } if (name is "SLIDER" ) { Show1.color=DOIT.CSc("ffffff",255); _Finish1.value=0; Show2.color=DOIT.CSc("272626",255); _Finish2.value=1; _Title1.text=TRANS.This("T_Door"); _Title2.text=TRANS.This("T_Frame"); } if (name is "DOOR" ) { Show1.color=DOIT.CSc("ffffff",255); _Finish1.value=0; Show2.color=DOIT.CSc("ffffff",255); _Finish2.value=0; _Title1.text=TRANS.This("T_Door"); _Title2.text=TRANS.This("T_Molding"); } if (name is "PATIO" or "WINDOW") { Show1.color=DOIT.CSc("ffffff",255); _Finish1.value=0; Show2.color=DOIT.CSc("ffffff",255); _Finish2.value=0; _Title1.text=TRANS.This("T_Frame"); _Title2.text=TRANS.This("T_Molding"); } if (name is "SHOWER") { Show1.color=DOIT.CSc("ffffff",255); _Finish1.value=2; Show2.color=DOIT.CSc("ffffff",255); _Finish2.value=2; _Title1.text=TRANS.This("T_Frame"); _Title2.text=TRANS.This("T_Floor"); } } public void SetNumberOfActive(int Qty) { CategorySelector.SetActive(true); for (int i = 0; i < CategorySelector.transform.childCount; i++) { CategorySelector.transform.GetChild(i).gameObject.SetActive(true); if(i>=Qty)CategorySelector.transform.GetChild(i).gameObject.SetActive(false); } CategorySelector.transform.GetChild(0).GetComponent().isOn=true; } // Modeles POSES par l'application mais volontairement ABSENTS du panneau : leur icone est // retiree de la liste, le modele lui-meme reste entier (dimensions dans _OL, construction dans // ConstructBloc, placement par l'IA). Retirer une entree d'ici suffit a le reafficher. // BLOC118 = repere de gaz, BLOC119 = repere de plomberie : c'est le design IA qui les place, // l'utilisateur n'a pas a les choisir a la main. static readonly HashSet HiddenPanelModels = new() { "BLOC118", "BLOC119" }; static Sprite[] HideModels(Sprite[] sprites) { var kept = new List(sprites.Length); foreach (Sprite sp in sprites) { if (sp == null) continue; if (HiddenPanelModels.Contains(sp.name.Replace("(Clone)", ""))) continue; kept.Add(sp); } return kept.ToArray(); } public void AddModelsOnPanel(string Name,string category) { Name=Name.Replace("SILS","SLID"); DOIT.AllChildOff(_MODELContainer); string atlasPath = "ATLAS/"+Name[..4]+"_" + category; print("atlasPath======"+atlasPath); for (int i = 0; i < _buttons.Length; i++) { _buttons[i].transform.Find("Background").GetComponent().sprite = null; } AtlasCache.ClearCache(); SpriteAtlas atlas = AtlasCache.GetAtlas(atlasPath); Sprite[] sprites = HideModels(GetSortedSprites(atlas)); for (int i = 0; i < _buttons.Length; i++) { bool active = i < sprites.Length; _buttons[i].SetActive(active); if (!active) continue; _buttons[i].transform.Find("Background").GetComponent().sprite = sprites[i]; _buttons[i].transform.Find("Image/Text") .GetComponent().text = sprites[i].name[4..].Replace("(Clone)",""); _buttons[i].transform.Find("Image/Text") .GetComponent().color = Color.white; _buttons[i].name = sprites[i].name.Replace("(Clone)",""); } } public int GetStartNumber(string category) { int StartNumber=101; switch (category) { case "1": StartNumber = 125; break; case "2": StartNumber = 149; break; case "3": StartNumber = 173; break; case "4": StartNumber = 197; break; case "5": StartNumber = 221; break; case "6": StartNumber = 245; break; } return StartNumber; } public void CollectionSelect(string Collection) { print("Collection===="+Collection); //int qty=24; string Category = _MODELContainer.transform.GetChild(0).name[..4]; AddModelsOnPanel(Category,Collection); } public static Sprite[] GetSortedSprites(SpriteAtlas atlas) { Sprite[] sprites = new Sprite[atlas.spriteCount]; int count = atlas.GetSprites(sprites); Array.Sort(sprites, (a, b) => { //print("a.name==="+a.name);//a.name===STOO102(Clone) int numA = int.Parse(a.name.Substring(4).Replace("(Clone)","")); int numB = int.Parse(b.name.Substring(4).Replace("(Clone)","")); return numA.CompareTo(numB); }); return sprites; } public void SetModelPnlPosition(string name){ float ModelPosition=-72; if(new List {"FRIDGE","STOVE","BUILDIN","TOPSTOVE","DISHWASHER","MICROWAVE","CELLAR","WADRYER","OPEN"}.Contains(name)){ ModelPosition=-0; //_ColorPicker1.SetActive(false); //_ColorPicker2.SetActive(false); } if(new List {"SINK","FAUCET"}.Contains(name)){ //_ColorPicker2.SetActive(false); } _MODEL.transform.localPosition=new Vector3(ModelPosition,47,0); } public void AddCabtextureToPnl(){ _CABTEXTURES.SetActive(true); List CabTextureList= new(){TRANS.This("T_Custom") }; List L=UIT.GetLibrary("CabTexture"); for(int i=1; i(); Drop.ClearOptions(); Drop.AddOptions(CabTextureList); } //Finish public void FillFinishDropdown(){ if(_Finish1.options.Count==1){ _Finish1.ClearOptions(); _Finish2.ClearOptions(); List list = new(){TRANS.This("T_Matt"),TRANS.This("T_Semi"),TRANS.This("T_Gloss") }; _Finish1.AddOptions(list); _Finish2.AddOptions(list); } } // public void FillTexturesDropdown(){ // if(_Textures1.options.Count==1){ // _Textures1.ClearOptions(); // _Textures2.ClearOptions(); // List list = new(){ // TRANS.This("T_Plastic"),TRANS.This("T_Metal"),TRANS.This("T_Paint"), // TRANS.This("T_Woodlight"),TRANS.This("T_Woodmedium"),TRANS.This("T_Woodold"), // TRANS.This("T_Fabric")+" 1",TRANS.This("T_Fabric")+" 2", // }; // _Textures1.AddOptions(list); // _Textures2.AddOptions(list); // } // } }