Exemplo n.º 1
0
    int GetCellScore(int gridX, int gridY)
    {
        HashSet <ThoughtItem> neighbourItems = new HashSet <ThoughtItem>();

        int            score = 0;
        IInventoryItem item  = inventory.GetAtPoint(new Vector2Int(gridX, gridY));

        if (item != null)
        {
            ThoughtItem selfThoughtItem = (ThoughtItem)item;
            score = score + selfThoughtItem.score;
        }

        for (int neighbourX = gridX - 1; neighbourX <= gridX + 1; neighbourX++)
        {
            for (int neighbourY = gridY - 1; neighbourY <= gridY + 1; neighbourY++)
            {
                if (neighbourX >= 0 && neighbourX < inventory.Width && neighbourY >= 0 && neighbourY < inventory.Height)
                {                // If we're inside the grid
                    if (neighbourX != gridX || neighbourY != gridY)
                    {            // If we're not the original cell
                        IInventoryItem neighbourItem = inventory.GetAtPoint(new Vector2Int(neighbourX, neighbourY));
                        if (neighbourItem != null)
                        {
                            ThoughtItem thoughtItem = (ThoughtItem)neighbourItem;
                            if (gameSettings.itemsOnlyAffectCellsOnce == false)
                            {
                                if (gameSettings.scoreOnlyFromOthers != true || (gameSettings.scoreOnlyFromOthers == true && item != neighbourItem))
                                {
                                    score = score + thoughtItem.score;
                                }
                            }
                            else
                            {
                                neighbourItems.Add(thoughtItem);
                            }
                        }
                    }
                }
                else
                {                // If we're outside the grid
                }
            }
        }

        if (gameSettings.itemsOnlyAffectCellsOnce == true)
        {
            Debug.Log(gridX + ", " + gridY + " affected by " + neighbourItems.Count);
            foreach (ThoughtItem thoughtItem in neighbourItems)
            {
                score = score + thoughtItem.score;
            }
        }
        return(score);
    }
Exemplo n.º 2
0
    // Use this for initialization
    void Start()
    {
        inventory = new InventoryManager(gameSettings.startWidth, gameSettings.startHeight);

        // initalise scores
        currentScores = new int[inventory.Width, inventory.Height];

        // Fill inventory with random items

        /*
         * var tries = (inventory.Width * inventory.Height) / 3;
         * for (var i = 0; i < tries; i++)
         * {
         *      inventory.Add(_definitions[Random.Range(0, _definitions.Length)].CreateInstance());
         * }
         */

        controller = GetComponent <InventoryController>();
        // Sets the renderers's inventory to trigger drawing
        InventoryRenderer inventoryRenderer = GetComponent <InventoryRenderer>();

        GetComponent <InventoryRenderer>().SetInventory(inventory);

        var textContainer = new GameObject("Text Pool").AddComponent <RectTransform>();

        textContainer.transform.SetParent(transform);
        textContainer.transform.localPosition = Vector3.zero;
        textContainer.transform.localScale    = Vector3.one;

        // Create pool of images
        _textPool = new Pool <Text>(
            delegate
        {
            var text = new GameObject("Text").AddComponent <Text>();
            text.transform.SetParent(textContainer);
            text.transform.localScale = Vector3.one;
            return(text);
        },
            0,
            true);

        Vector2 CellSize = inventoryRenderer.CellSize;

        // Render new grid
        var containerSize = new Vector2(CellSize.x * inventory.Width, CellSize.y * inventory.Height);
        var topLeft       = new Vector3(-containerSize.x / 2, -containerSize.y / 2, 0); // Calculate topleft corner
        var halfCellSize  = new Vector3(CellSize.x / 2, CellSize.y / 2, 0);             // Calulcate cells half-size

        // Spawn grid text - numbers for cell scores
        gridText = new Text[inventory.Width * inventory.Height];
        var c = 0;

        for (int y = 0; y < inventory.Height; y++)
        {
            for (int x = 0; x < inventory.Width; x++)
            {
                Text text = CreateText();
                text.text            = "0";
                text.color           = Color.white;
                text.fontSize        = 20;
                text.fontStyle       = FontStyle.Bold;
                text.font            = font;
                text.alignment       = TextAnchor.MiddleCenter;
                text.gameObject.name = "text " + c;
                text.rectTransform.SetAsFirstSibling();
                text.rectTransform.localPosition = topLeft + new Vector3(CellSize.x * ((inventory.Width - 1) - x), CellSize.y * y, 0) + halfCellSize;
                text.rectTransform.sizeDelta     = CellSize;
                gridText[c] = text;
                c++;
            }
        }

        Evaluate();
        inventory.OnItemAdded += (item) =>
        {
            ThoughtItem thoughtItem = (ThoughtItem)item;
            GetComponent <AudioSource>().PlayOneShot(thoughtItem.dropSound);
            Evaluate();
        };
        if (totalScoreText)
        {
            totalScoreText.gameObject.SetActive(false);
        }
        gameObject.SetActive(false);
    }