Exemplo n.º 1
0
        // 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));
        }
Exemplo n.º 2
0
    // 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);
    }
Exemplo n.º 3
0
    /// <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());
        }
    }
Exemplo n.º 4
0
    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();
             * }*/
        }
    }