Exemplo n.º 1
0
    IEnumerator startCooking()
    {
        int veg = currentLockedPlayer.PlayerInventory.peekNextItem();

        if (!Vegetables.isRawVegetable(veg))// if only it is vegetable then allow cooking.
        {
            resetData();
            yield break;
        }

        // Enable salad canvas
        if (!saladCanvas.gameObject.activeSelf)
        {
            saladCanvas.gameObject.SetActive(true);
        }

        veg              = currentLockedPlayer.PlayerInventory.getNextItem();
        currentStack    |= (int)Vegies.oneItemSaladHandle;// Adding salad handler enum value
        preparingVegData = ChefSaladManager.getVegetableData(veg);
        prepareTimeLeft  = preparingVegData.preparationTime;

        // Wait and pass on this frame so calculation start from next frame.
        yield return(new WaitForEndOfFrame());

        while (true)
        {
            // Moving player to stove's preparation point
            if ((stoveStandingSpot.position - currentLockedPlayer.transform.position).magnitude > 0.02)
            {
                currentLockedPlayer.transform.position += 2 * (stoveStandingSpot.position - currentLockedPlayer.transform.position)
                                                          * Time.deltaTime;
                currentLockedPlayer.transform.rotation = stoveStandingSpot.rotation;
            }
            prepareTimeLeft -= Time.deltaTime;
            if (prepareTimeLeft <= 0)// if preparation time ends it means vegetable is prepared.
            {
                ingredientPrepared(veg);
                // Check for if player has more vegetable to add if yes then continue with next item he has.
                if (currentLockedPlayer.PlayerInventory.hasAnyItem())
                {
                    veg = currentLockedPlayer.PlayerInventory.peekNextItem();

                    // if next ingredient is already added then stop cooking or if salad still has space to add ingredient
                    if ((currentStack & veg) != 0 || currentIngredientCount >= ChefSaladManager.MAX_INGREDIENT_COUNT)
                    {
                        break;
                    }
                    veg = currentLockedPlayer.PlayerInventory.getNextItem();
                    preparingVegData = ChefSaladManager.getVegetableData(veg);
                    prepareTimeLeft  = preparingVegData.preparationTime;
                }
                else
                {
                    break;
                }
            }
            yield return(new WaitForEndOfFrame());
        }
        resetData();
    }
Exemplo n.º 2
0
    public override void interact(GameObject interactor)
    {
        Player player = interactor.GetComponent <Player>();
        int    item   = player.PlayerInventory.getNextItem();

        // if is vegetable then cost can be determined from vegetable data
        if (Vegetables.isRawVegetable(item))
        {
            VegetableData vegData = ChefSaladManager.getVegetableData(item);
            if (onItemTrashed != null)
            {
                onItemTrashed.Invoke(player.GetId, vegData.Penalty);
            }
        }
        else  // if it is salad we get each individual vegetable by bit shifting vegetable integer and finding its vegetable data
        {
            float cost     = 0;
            int   itemMask = item;
            for (int i = 0; i < (int)Vegies.count; i++)
            {
                if ((itemMask & 1) > 0)
                {
                    int           veg     = (int)Mathf.Pow(2, i);
                    VegetableData vegData = ChefSaladManager.getVegetableData(veg);
                    cost += vegData.Penalty;
                }
                itemMask >>= 1;
            }
            if (onItemTrashed != null)
            {
                onItemTrashed.Invoke(player.GetId, cost);
            }
        }
    }
Exemplo n.º 3
0
    public override void interact(GameObject interactor)
    {
        BasicPawn pawn = interactor.GetComponent <BasicPawn>();

        if (pawn.controller is NpcController) // If is NPC then set all data that customer is bringing in to counter.
        {
            resetData();
            waitingController = (NpcController)pawn.controller;

            progressionBar.gameObject.SetActive(true);

            // Make controller stop
            waitingController.IsMobile = false;
            // Hard coded value to make npc go off screen after waiting
            waitingController.MoveTo = new Vector3(transform.parent.position.x, transform.parent.position.y + 7,
                                                   waitingController.GetControlledPawn.transform.position.z);

            int itemMask = waitingController.attributes.salad;
            for (int i = 0; i < (int)Vegies.count; i++)// Using bit shifting to find ingredients.
            {
                if ((itemMask & 1) > 0)
                {
                    int           veg     = (int)Mathf.Pow(2, i);
                    VegetableData vegData = ChefSaladManager.getVegetableData(veg);
                    scoreOnSuccess   += vegData.Reward;
                    penaltyOnFailure += vegData.Penalty;
                    saladCanvas.addItem(vegData);
                }
                itemMask >>= 1;
            }
            scoreOnSuccess   += scoreOnSuccess * waitingController.attributes.scoreMultiplier;
            penaltyOnFailure += waitingController.attributes.scoreMultiplier;
        }
        else //If it is player then get salad and do the processing.
        {
            Player player = (Player)pawn;
            int    salad  = player.PlayerInventory.getFirstItem(false) & (~(int)Vegies.oneItemSaladHandle);
#if GAME_DEBUG
            Debug.Log("Player Serving salad " + salad + " Customer requested salad " + waitingController.attributes.salad);
#endif
            if ((salad ^ waitingController.attributes.salad) == 0) // If salad ingredient match required ingredient do below
            {
                playerIds.Clear();
                playerIds.Add(player.GetId);
                waitOver(scoreOnSuccess);
            }
            else // If not matching then add the player to player ids that needs to be affected by penalty.
            {
                playerIds.Add(player.GetId);
                if (timeMultiplier == 1)// Only increase time multiplier once rest of failure does not affect
                {
                    timeMultiplier *= waitingController.attributes.failureTimeMultiplier;
                }
            }
        }
    }
Exemplo n.º 4
0
    private void ingredientPrepared(int vegMask)
    {
        // Adding the vegetable to salad and triggering the event.
        currentStack |= vegMask;
        currentIngredientCount++;
#if GAME_DEBUG
        Debug.Log("Chopped Vegetable " + vegMask + " Salad " + currentStack);
#endif
        if (ingredientPreparedEvent != null)
        {
            ingredientPreparedEvent.Invoke(vegMask, currentStack);
        }

        saladCanvas.addItem(ChefSaladManager.getVegetableData(vegMask));
    }
Exemplo n.º 5
0
    /// <summary>
    /// Refreshes and recreates inventory data of player
    /// </summary>
    public void inventoryRefresh()
    {
        if (playerInventory == null)
        {
            return;
        }
        int[] items = playerInventory.getItemsInArray();
        while (inventoryPanel.transform.childCount != 0)
        {
            GameObject go = inventoryPanel.transform.GetChild(0).gameObject;
            go.transform.SetParent(null);
            Destroy(go);
        }

        if (reverseInventory)
        {
            Array.Reverse(items);
        }

        foreach (int item in items)
        {
            if (Vegetables.isRawVegetable(item))
            {
                GameObject go = Instantiate(vegItemIconPrefab);
                SaladIngredientCanvasScript saladIngredient = go.GetComponent <SaladIngredientCanvasScript>();
                saladIngredient.itemImageSprite.sprite = ChefSaladManager.getVegetableData(item).vegTexture;
                go.transform.SetParent(inventoryPanel.transform);
            }
            else
            {
                GameObject        go          = Instantiate(saladItemIconPrefab);
                SaladCanvasScript saladCanvas = go.GetComponent <SaladCanvasScript>();
                go.transform.SetParent(inventoryPanel.transform);
                int itemMask = item;
                for (int i = 0; i < (int)Vegies.count; i++)
                {
                    if ((itemMask & 1) > 0)
                    {
                        int veg = (int)Mathf.Pow(2, i);
                        saladCanvas.addItem(ChefSaladManager.getVegetableData(veg));
                    }
                    itemMask >>= 1;
                }
            }
        }
    }
Exemplo n.º 6
0
    public override void interact(GameObject interactor)
    {
        Player player = interactor.GetComponent <Player>();

        if (vegetable == 0)// If dish is empty try get first vegetable from player inventory and store it here.
        {
            int veg = player.PlayerInventory.getFirstItem(true);
            if (veg != 0)
            {
                vegetable = veg;
                vegetableSprite.sprite = ChefSaladManager.getVegetableData(veg).vegTexture;
            }
        }
        else// If dish has vegetable add it to player inventory.
        {
            player.PlayerInventory.addItem(vegetable);
            vegetable = 0;
            vegetableSprite.sprite = null;
        }
    }
Exemplo n.º 7
0
    private void Awake()
    {
        // Destroy in case more object exists as it is singleton.
        if (manager != null)
        {
            Destroy(gameObject);
            return;
        }

        HIGHSCORE_SAVE_PATH = Path.Combine(Application.persistentDataPath, "highscores.sav");

        manager = this;

        trashCan.onItemTrashed += itemTrashed;

        // Creating all Player ,Player controller,Player input manager combination and setting necessary data for them at start of game.
        foreach (PlayerSpawnData psd in playersToSpawn)
        {
            BasicPawn pawn = ((GameObject)Instantiate(playerPrefab, psd.spawnTransform.position, Quaternion.identity)).GetComponent <BasicPawn>();
            if (!pawn)
            {
                throw new Exception("Add proper Pawn Prefab in game manager");
            }
            pawn.name = psd.playerName;
            pawn.GetComponent <SpriteRenderer>().color = psd.spriteColor;

            PlayerController controller = ((GameObject)Instantiate(playerControllerPrefab)).GetComponent <PlayerController>();
            if (!controller)
            {
                throw new Exception("Add proper Pawn Controller Prefab in game manager");
            }
            controller.name = psd.playerName + "Controller";

            InputManager inputManager = new GameObject(controller.name + "InputManager").AddComponent <InputManager>();

            playersList.Add(controller.GetID, controller);

            controller.InputPrefix = psd.playerInputPrefix;
            controller.playerName  = psd.playerName;
            controller.controlPawn(pawn);
            controller.setupInputs(inputManager);
            controller.PlayerState.onScoreChanged += scoreChangedFor;

            psd.playerHud.PlayerInventory = controller.PlayerInventory;
            psd.playerHud.PlayerState     = controller.PlayerState;

            psd.stove.userId = psd.dish.userId = controller.GetID;
        }

        // Creating all NPC controller needed,One for each counter.
        foreach (GameObject counterObj in customerCounters)
        {
            CustomerCounter counter = counterObj.GetComponentInChildren <CustomerCounter>();
            GameObject      go      = Instantiate(npcControllerPrefab);
            go.name = counter.name + "NpcController";
            BasicController controller = go.GetComponent <BasicController>();
            npcControllers.Add(controller);
            counter.onCustomerLeaving += customerLeft;
        }

        resultScreen = gameEndCanvas.GetComponentInChildren <ResultDisplay>();
        resultScreen.restartButton.onClick.AddListener(restartLevel);
    }
Exemplo n.º 8
0
 private void restartLevel()
 {
     manager = null;
     SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex, LoadSceneMode.Single);
 }
Exemplo n.º 9
0
    /// <summary>
    /// Creates new NPC Attributes and sends the customer to chosen counter.
    /// </summary>
    private void createCustomer()
    {
        int        index   = -1;
        GameObject counter = ChefSaladManager.selectRandomUsableCounter(out index);// Select random available counter.

        if (counter == null)
        {
            return;
        }

        // Register to customer leaving that counter event of the counter.
        counter.GetComponentInChildren <CustomerCounter>().onCustomerLeaving += onNpcReturning;

        // Get NPC Controller of the counter.
        NpcController controller = (NpcController)ChefSaladManager.getNpcController(index);

        // Get Next NPC pawn from queue.
        NpcPawn pawn = npcsAvailable.Dequeue();

        // Set Pawn's start position.
        pawn.transform.position = new Vector3(counter.transform.position.x, counter.transform.position.y + 7, pawn.transform.position.z);

        // Set controller variables and attributes.
        controller.MoveTo           = new Vector3(counter.transform.position.x, counter.transform.position.y, pawn.transform.position.z);
        controller.IsMobile         = true;
        controller.counterTransform = counter.transform;
        controller.attributes.failureTimeMultiplier = UnityEngine.Random.Range(minFailureTimeMultiplier, maxFailureTimeMultiplier);
        controller.attributes.scoreMultiplier       = UnityEngine.Random.Range(minScoreMultiplier, maxScoreMultiplier);
        controller.attributes.maxWaitTime           = 0;

        // Chose random number of ingredients.
        int noOfIngredient = UnityEngine.Random.Range(1, ChefSaladManager.MAX_INGREDIENT_COUNT);
        int salad          = 0;

        // Selecting vegetable that the salad needs to be made of randomly and not repeating.
        for (int i = 0, trial = 0; i < noOfIngredient; i++, trial = 0)
        {
            int           choosen = 0;
            int           pow     = 0;
            VegetableData vegData = null;
            while (trial < 3 && choosen == 0)
            {
                pow     = UnityEngine.Random.Range(0, (int)Vegies.count);
                choosen = (int)Mathf.Pow(2, pow);
                if ((choosen & salad) == 0)
                {
                    salad  |= choosen;
                    vegData = ChefSaladManager.getVegetableData(choosen);
                    controller.attributes.maxWaitTime += (int)(vegData.preparationTime + (vegData.preparationTime * 4f));
                }
                else
                {
                    choosen = 0;
                    trial++;
                }
            }

            if (choosen != 0)
            {
                continue;
            }

            pow     = UnityEngine.Random.Range(0, (int)Vegies.count);
            choosen = (int)Mathf.Pow(2, pow);

            while ((choosen & salad) != 0)
            {
                pow++;
                choosen = (int)Mathf.Pow(2, pow % (int)Vegies.count);
            }
            vegData = ChefSaladManager.getVegetableData(choosen);
            controller.attributes.maxWaitTime += (int)(vegData.preparationTime + (vegData.preparationTime * 4f));
            salad |= choosen;
        }
        controller.attributes.salad = salad;

        // Starting to control the selected pawn from selected controller.
        controller.controlPawn(pawn);
    }