public int AddCrate(StockCrate crate)
    {
        int remainingStock = crate.SetQuantity(AddStock(crate.GetQuantity(), crate.GetStockType()));

        if (remainingStock < 0)
        {
            remainingStock = 0;
        }

        crate.UnclaimItem(gameObject);

        return(remainingStock);
    }
    private void AddStockToShelf(ShelfContainer shelf)
    {
        // Check if there is something equipped
        if (!_equippedItem)
        {
            return;
        }

        int result = 0;

        switch (_equippedItem.tag)
        {
        case "Product":
        {
            // Get stock type that is equipped
            StockTypes equippedType = _equippedItem.GetComponent <StockItem>().GetStockType();

            result = shelf.AddStock(equippedType);
            break;
        }

        case "StockCrate":
        {
            StockCrate crateComponent = _equippedItem.GetComponent <StockCrate>();
            if (crateComponent)
            {
                result = shelf.AddCrate(crateComponent);
            }
            break;
        }
        }

        if (result == 0)
        {
            Destroy(_equippedItem);
        }
    }
Пример #3
0
    protected virtual void OnCollisionEnter_UE(Collision collision)
    {
        ContactPoint contact = collision.GetContact(0);

        GameObject other = contact.otherCollider.transform.root.gameObject;

        //Debug.Log(collision.relativeVelocity.magnitude);

        // Add products to the shelf if it hits it hard enough
        if (collision.relativeVelocity.magnitude < stateMachine.collisionSensitivity)
        {
            return;
        }

        StockItem stock = other.GetComponent <StockItem>();

        switch (other.tag)
        {
        case "Product":
        {
            // Double check if StockItem exists
            stock = other.GetComponent <StockItem>();
            if (stock)
            {
                // Check if stock matches the current wanted product
                if (stock.GetStockType() == stateMachine.currentWantedProduct)
                {
                    // Equip cought product
                    stateMachine.EquipItem(other.transform);
                }
            }
            break;
        }

        case "StockCrate":
        {
            // Double check if StockCrate exists
            StockCrate crate = stock as StockCrate;
            if (crate)
            {
                // Claim crate
                crate.ClaimItem(stateMachine.gameObject);

                /* Check if stock in crate matches the current wanted
                 * product and if there is enough in the crate to take one
                 */
                if (crate.GetStockType() == stateMachine.currentWantedProduct && crate.GetQuantity() >= 1)
                {
                    // Deduct one stock from the crate
                    crate.SetQuantity(crate.GetQuantity() - 1);

                    // Make new stock and add to customer
                    GameObject newStock = Object.Instantiate(stateMachine.mapManager.GetStockTypePrefab(stateMachine.currentWantedProduct)) as GameObject;

                    // Equip the new stock
                    stateMachine.EquipItem(newStock.transform);
                }

                // Unclaim crate
                crate.UnclaimItem(stateMachine.gameObject);
            }
            break;
        }
        }
    }
    private IEnumerator ISpawnCrates()
    {
        isSpawning = true;

        //GameObject[] tempCrates = crates.ToArray();

        //for (int c = 0; c < tempCrates.Length; c++)
        //{
        //    GameObject newCrate = Instantiate(tempCrates[c]) as GameObject;

        //    newCrate.transform.position = spawner.position;

        //    Rigidbody rb = newCrate.GetComponent<Rigidbody>();
        //    rb.AddForce(-spawner.forward * pushForce);

        //    crates.Remove(tempCrates[c]);

        //    yield return new WaitForSeconds(spawnFrequency);
        //}

        // Unload products
        Debug.Log("Unloading products...", gameObject);
        foreach (TruckProduct product in products)
        {
            int amount = product.stockAmount;

            for (int pCount = 0; pCount < amount; pCount++)
            {
                GameObject newProduct = Instantiate(mapManager.GetStockTypePrefab(product.stockType)) as GameObject;

                newProduct.transform.position = spawner.position;

                Rigidbody rb = newProduct.GetComponent <Rigidbody>();
                rb.AddForce(CalculatePushDirection() * CalculatePushForce());

                yield return(new WaitForSeconds(spawnFrequency));
            }
        }

        // Unload crates
        Debug.Log("Unloading crate...", gameObject);
        foreach (TruckCrate crate in crates)
        {
            GameObject newCrate = Instantiate(cratePrefab) as GameObject;

            newCrate.transform.position = spawner.position;

            StockCrate stockCrate = newCrate.GetComponent <StockCrate>();

            stockCrate.SetStockType(crate.stockType);
            int remaining = stockCrate.AddQuantity(crate.stockAmount);

            //if (remaining > 0)
            //{
            //    crates.Add(new TruckCrate(crate.stockType, crate.stockAmount));
            //}

            Rigidbody rb = newCrate.GetComponent <Rigidbody>();
            rb.AddForce(CalculatePushDirection() * CalculatePushForce());

            yield return(new WaitForSeconds(spawnFrequency));
        }

        isSpawning = false;

        ClearTruck();

        animator.SetTrigger("Exit");

        activeSpawning = null;

        yield return(null);
    }