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); } }
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); }