// TODO: asi poslat celý objekt bloku public SymBlockGrid(SymBlock parentBlock, Transform gridParentGameObject, Vector3 parentBlockTransform, Vector3 gridPosition, Vector3 parentBlockRotation, Settings.Checkers_types parentBlockType) { this._gridPosition = gridPosition; this._parentBlockPosition = parentBlockTransform; this._parentBlockRotation = parentBlockRotation; this._gridParentTransform = gridParentGameObject; this._parentBlockType = parentBlockType; this._gridGameObject = TryToGetObjectFromPool(); this.parentBlock = parentBlock; // Barva Gridy this._gridColor = Helpers.GetCheckerColorByType(this._parentBlockType); this.SetGridColor(new Color(this._gridColor.r, this._gridColor.g, this._gridColor.b, 0.2f)); }
// Vygenerujeme Knihovnu dostupných staveb public static List <BlockSO> LoadSuitableBlocks(Settings.Checkers_types c_type) { var suitable_blocks = new List <BlockSO>(); // Filtrujeme ze všech dostupných objektů pouze ty, které vyhovují podmínkám checkeru foreach (var b in UI.suitableBlocksOrganised) { if (b.blockType != Settings.Blocks_types.CITY_HALL) { if (b.blockFunctionality == c_type || b.blockFunctionality == Settings.Checkers_types.BLANK) { suitable_blocks.Add(b); } } } return(suitable_blocks); }
/// <summary> Vrací příslušnou barvu kontroléru, podle typu.</summary> /// <param name="c_type"></param> /// <returns></returns> public static Color GetCheckerColorByType(Settings.Checkers_types c_type) { // Podle typu checkeru rozřadíme barvičky switch (c_type) { case Settings.Checkers_types.LIFE_SUPPORT: return(ColorDecryptor.GetColorFromString(Settings.COLOR_C_TYPE_GREAN)); case Settings.Checkers_types.POWER: return(ColorDecryptor.GetColorFromString(Settings.COLOR_C_TYPE_ORANGE)); case Settings.Checkers_types.BLANK: case Settings.Checkers_types.STANDART: return(ColorDecryptor.GetColorFromString(Settings.COLOR_C_TYPE_BLUE)); //Manager.Instance.themeModulColors[0]; default: return(new Color()); } }
internal static void BlockLibraryWindowState(bool state = false, Settings.Checkers_types c_type = Settings.Checkers_types.BLANK) { if (state) // Otevření okna TODO: { //if (LastUsedType != c_type) suitableBlocks = Helpers.LoadSuitableBlocks(c_type); // TODO: Pooling systém better // Pokud je vyplý, jinak je něco špatně, nechceme ukazovat "buggy" reloadu knihovny if (ScreenUIManager.Instance.buildLibraryWindow.container.gameObject.activeSelf == false) { // -- OBECNÉ PRO OKNO -- // Nastavíme název okna ScreenUIManager.Instance.buildLibraryWindow.title.text = TextHolder.BUILD_LIBRARY_NAME.ToUpper(); // Nastavíme tlačítko okna PrepareButton(ScreenUIManager.Instance.buildLibraryWindow.closeBtn); ScreenUIManager.Instance.buildLibraryWindow.closeBtn.onClick.AddListener(() => GameModesManager.Instance.subModesHandler.StopCurrentSubMode(typeof(BuildSubModePlace))); // -- UI KARTY -- // Pokud existuje instance if (ScreenUIManager.Instance.buildLibraryWindow.buildLibraryBlockContainer != null) { /*if (LastUsedType != c_type) // TZN. Okno se pouze aktivuje/deaktivuje, ale nereloaduje. * {// Proč?? Protože chceme řadit pouze až při změně. * * Debug.Log("Bylo změněno z : " + LastUsedType + " na " + c_type); * LastUsedType = c_type; // Tak zapiš jaká byla.*/ foreach (BlockBuildCart b_cart in ScreenUIManager.Instance.allBuildCarts) { b_cart.CartGraphics.gameObject.SetActive(true); // Vymažeme všechny listenery tlačítka Button cart_btn = b_cart.CartGraphics.GetComponent <Button>(); PrepareButton(cart_btn); } // Nejdřív zjistíme jestli počet již načtených shoduje/je větší s počtem kolik potřebujeme načíst bool isLenghtSame = ScreenUIManager.Instance.allBuildCarts.Count >= suitableBlocks.Count ? true : false; // Pokud jsou délky stejné (poptávka == nabídka) if (isLenghtSame) { short ctr = 0; foreach (BlockBuildCart b_cart in ScreenUIManager.Instance.allBuildCarts) { // Kolik Karet skutečně potřebujeme?? if (ctr < (short)suitableBlocks.Count) { /*BlockBuildCart standart_cart = null; * if (suitableBlocks[ctr] != LastUsedtype) * { * standart_cart = b_cart; * }*/ // PŘEPÍŠEME KARTY // Získáme text karty TextMeshProUGUI cart_name = b_cart.CartGraphics.GetComponentInChildren <TextMeshProUGUI>(); // Přepíšeme cart_name.text = suitableBlocks[ctr].block_name; // Získáme obrázek karty Image cart_img = Settings.FindComponentInChildrenWithTag <Image>(b_cart.CartGraphics.transform, "IMAGE"); // Změníme obrázek cart_img.sprite = suitableBlocks[ctr].UIprew; // Změníme typ bloku b_cart.BlockType = suitableBlocks[ctr].blockType; // POŠLEME DATA PRO BUILD LIBRARY b_cart.BlockData = suitableBlocks[ctr]; b_cart.CheckerType = c_type; // Přidáme click funkci tlačítku Button cart_btn = b_cart.CartGraphics.GetComponent <Button>(); cart_btn.onClick.AddListener(() => b_cart.LoadBlockBuild()); } else { b_cart.CartGraphics.gameObject.SetActive(false); } ctr++; } } else // Jinak ještě musíme přidat potřebný počet cartů... - možná v budoucnu uděláme to // že se vygeneruje nejvyšší možný počet hned na začátku a tohle už nebudemem muset řešit, ale pořád je tohle nejvíce optimalizovaná možnost { // Kolik Karet je tedy potřeba dodat abs((co potřebujeme) - (to co máme)) short cartsToAdd = (short)(suitableBlocks.Count - ScreenUIManager.Instance.allBuildCarts.Count); for (short i = 0; i < cartsToAdd; i++) { if (block_ui_prew != null) { GameObject new_ui_element = GameObject.Instantiate(block_ui_prew); new_ui_element.transform.SetParent(ScreenUIManager.Instance.buildLibraryWindow.buildLibraryBlockContainer.transform); new_ui_element.GetComponent <Transform>().localScale = new Vector3(1, 1, 1); ScreenUIManager.Instance.allBuildCarts.Add(new BlockBuildCart(new_ui_element.transform as RectTransform)); } else { Debug.LogError("V UI.cs, nebyl načten block_ui_prew. X-("); } } // ScreenUIHolder.Instance.allBuildCarts = Settings.FindComponentsInChildrenWithTag<RectTransform>(ScreenUIHolder.Instance.buildLibraryBlockContainer.transform, Settings.UI_TAG_BLOCK_CART); // Pro ověření si znovu načteme všechny karty a znovu checkneme délky //all_block_carts = Settings.FindComponentsInChildrenWithTag<RectTransform>(ScreenUIHolder.Instance.buildLibraryBlockContainer, Settings.UI_TAG_BLOCK_CART); isLenghtSame = ScreenUIManager.Instance.allBuildCarts.Count >= suitableBlocks.Count ? true : false; // Pokud je vše ok, tak přepisujeme: if (isLenghtSame) { // Prostě projíždíme všechny karty, které vůbec existují(buď byly dodtaečně vytvořeny, nebo...) short ctr = 0; // => žádné omezení ctr foreach (BlockBuildCart b_cart in ScreenUIManager.Instance.allBuildCarts) { // PŘEPÍŠEME KARTY // Získáme text karty TextMeshProUGUI cart_name = b_cart.CartGraphics.GetComponentInChildren <TextMeshProUGUI>(); // Přepíšeme cart_name.text = suitableBlocks[ctr].block_name; // Získáme obrázek karty Image cart_img = Settings.FindComponentInChildrenWithTag <Image>(b_cart.CartGraphics.transform, "IMAGE"); if (cart_img == null) { Debug.LogError("Nebyl nalezen komponent v childs!"); } // Změníme obrázek if (cart_img != null) { cart_img.sprite = suitableBlocks[ctr].UIprew; } b_cart.BlockType = suitableBlocks[ctr].blockType; Button cart_btn = b_cart.CartGraphics.GetComponent <Button>(); // POŠLEME DATA PRO BUILD LIBRARY b_cart.BlockData = suitableBlocks[ctr]; b_cart.CheckerType = c_type; // Přidáme click funkci cart_btn.onClick.AddListener(() => b_cart.LoadBlockBuild()); //Přidáme zvuk AddButtonSound(cart_btn); ctr++; } } else { Debug.LogError("Nebylo možné načíst data do build knihovny(UI.cs) X-|"); } } // } // Možná hodíme ještě nějaké načítání(kolečko uprostřed monitoru na scéně, nebo tak něco) - TODO: ScreenUIManager.Instance.buildLibraryWindow.container.gameObject.SetActive(true); /* * Pozn. * Proč tohle řešení(proč lepší?)?? -> Podle mě nejúspornější, proč? * Nemusí se o nic starat GarbageCollector(nic se neničí jen vypíná), vytváříme toho jen tolik co bylo zatím potřeba. => šetří výkon + memory(s create by to bylo cca o půl víc, ale i tak...) * Navíc v buildu budeme potřebovat butny a ty nalezneme v již vytvořeném array, a nebudeme ty karty muset znovu hledat apod. => šetří výkon */ } else { Debug.LogError("Před otevřením knihovny nebyl načten (v ScreenUIHolder.cs), container s bloky! X-|"); return; } } else { Debug.LogError("Knihovna nebyla před otevřením zavřená X-|"); return; } } else { // Zavření okna if (ScreenUIManager.Instance?.buildLibraryWindow != null) { ScreenUIManager.Instance.buildLibraryWindow.container.gameObject.SetActive(false); } /*if (Settings.isBuildMode && !ScreenUIManager.Instance.AskDialogWindow.askDialogueContainer.gameObject.activeInHierarchy) * { * //WorldBuilder.Instance.TerminateBuildMode(); * }*/ } }