void Update()
    {
        //If sats som startar om man klickar på musknappen 1, vilket är högerklick.
        if (Input.GetMouseButton(1))
        {
            //Referens till scriptet HotBarKeys.cs för att kunna använda variabeln HotbarSlot.
            hotbarKeys = GetComponent <HotbarKeys>();
            Debug.Log(hotbarKeys.HotbarSlot);

            //Den tar sedan in muspekarens position och kollar vilka koordinater den har i Huvudkameran, "Main Camera" och gör om den till en vectorn
            Vector3 MusPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

            //Därefter tar den vectorn och kollar vilken Tilemap plats, vilken ruta i rutnätet som den koordinaten ligger i.
            Vector3Int TilePos = Block.WorldToCell(MusPos);

            /*Den här if-satsen gör att om man är på hotbarSlot1, kan den inte sätta ut ett block då hotbarslot 1 är endast till att förstöra block.
             * Om det inte är på plats 1 går den vidare till nästa if-sats som kollar om inventory.ItemList[hotbarKeys.HotbarSlot - 1 inte är null.
             * Den använder ItemList från scriptet Inventory och kollar om platsen i sin hotbar man är. Om man är på hotbarSlot 2, tar den det -1 för att
             * det ska stämma med hur arrayer och listor fungerar. Om man vill bygga med sitt tredje slot i sin hotbar, kollar den trejde platsen i listan
             * efter ett item och så länge .tileName inte är null kommer det hända något.
             *
             * Det som händer är att den använder Block, vilket är vår Tilemap, använder unitys metod för SetTile, Tar in TilePos, vilket är vektorn
             * som vi fick från musens position som blev omvanlad till vilken ruta den var i. Det blocket som den ska lägga ut använder den då
             * scriptet Inventorys Lista, Itemlist och tar in vilken slot man är i från hotbarKeys scriptet -1, för att matcha i listan och sist men inte minst
             * .tileName. tileName bestämmer vilket block som läggs ut.
             */
            if (hotbarKeys.HotbarSlot == 1)
            {
            }
            else
            {
                if (inventory.ItemList[hotbarKeys.HotbarSlot - 1] != null)
                {
                    if (inventory.ItemList[hotbarKeys.HotbarSlot - 1].tileName != null)
                    {
                        Block.SetTile(TilePos, inventory.ItemList[hotbarKeys.HotbarSlot - 1].tileName);
                    }
                }
            }
        }
    }
Beispiel #2
0
    void Update()
    {
        /*Här har jag yttligare en time.deltatime då jag vill att det ska fungera på alla framerates, den tar 1/FPS, vilket gör att
         * En sekund på 30 fps är lika lång tid som en sekund på 60fps.
         *
         *
         * Jag har även refererat scriptet HotBarKeys.cs för att kunna använda variabeln HotbarSlot.
         */
        BlockDelay += Time.deltaTime;
        hotbarKeys  = GetComponent <HotbarKeys>();

        /*Den här if-satsen kollar om man klickar på Musknappen 0, vilket är leftclick, den tar in BlockDelay, vilket är Time.deltaTime
         * och den kollar även om HotbarSlot från HotbarKeys scriptet är på plats 1.
         *
         * Den tar sedan in muspekarens position och kollar vilka koordinater den har i Huvudkameran, "Main Camera" och gör om den till en vectorn
         * Därefter tar den vectorn och kollar vilken Tilemap plats, vilken ruta i rutnätet som den koordinaten ligger i.
         * Det gör att man har rätt ruta i rutnätet och eftersom vi vill ta sönder en tile sätter vi den sedan till null.
         *
         *
         * Den sätter även BlockDelay till 0 då vi vill att man inte bara ska kunna spamklicka på alla tiles utan att det ska finnas en delay att man ska förstöra block på.
         * Det är därför man har BlockDelay > 0.5, vilket gör att den inte förstörs om 0.5s inte har passerat
         */
        if (Input.GetMouseButton(0) && BlockDelay > 0.5 && hotbarKeys.HotbarSlot == 1)
        {
            Vector3 SnällaFungera = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Debug.Log(SnällaFungera);

            Vector3Int TilePos = Block.WorldToCell(SnällaFungera);
            Debug.Log(SnällaFungera);

            Debug.Log(Block.GetTile(TilePos));

            //bool som stoppar om man har hittat ett item
            bool Founditem = false;
            //For-loop som kollar varje plats.
            for (int i = 0; i < items.Length; i++)
            {
                if (Founditem) //Om ett item har lagts till hoppar den ur loopen.
                {
                    break;
                }

                /*Den här delen kollar om TilePos är lika med ett item i "ItemS", om det finn en tile med ett identiskt tileName.
                 * Den kommer då gå vidare om den hittar något, vilket gör att om man slår luften kommer inget hända.
                 * Det som händer efter det är att den kollar efter en plats som håller null, finns det en plats med null kommer for-loopen aktiveras.
                 * For-loopen kollar då vilken plats som är null, vilket därefter kollar vilken plats som är null och lägga till den tile som var identisk till den plats i arrayen.
                 * Därefter körs metoden SpriteChange från scriptet ShowItem.cs, vilket tar in vilket item det är samt vilken plats i listan det var.
                 * Den lägger byter även boolen till True, vilket gör att for-loopen inte körs igenom för alla tiles och lägger till en tile på alla platser när man förstör en.
                 */
                if (Block.GetTile(TilePos) == items[i].tileName)
                {
                    if (inventory.ItemList.Contains(null))
                    {
                        for (int j = 0; j < inventory.ItemList.Length; j++)
                        {
                            if (inventory.ItemList[j] == null)
                            {
                                inventory.ItemList[j] = items[i];
                                inventory.showitem.SpriteChange(items[i], j);
                                Founditem = true;
                                break;
                            }
                        }
                    }
                }
            }

            /*Block.SetTile(TilePos, null);
             * Den tar in vilken Tilemap man pratar om, använder unitys metod SetTile där man tar in en VectorPosition och en tile.
             */
            Block.SetTile(TilePos, null);
            BlockDelay = 0;
        }
    }