コード例 #1
0
ファイル: HeroController.cs プロジェクト: luckkiss/FoodIsLove
    private void OnNetworkEvent(EventData eventData)
    {
        byte eventCode = eventData.Code;

        if (eventCode == (byte)NetworkedGameEvents.PICKED_UP_INGREDIENT)
        {
            Byterizer byterizer = new Byterizer();
            byterizer.LoadDeep((byte[])eventData.CustomData);

            int ingredientViewID = byterizer.PopInt32();
            int heroViewID       = byterizer.PopInt32();

            if (heroViewID != GetComponent <PhotonView>().ViewID)
            {
                return;
            }

            PhotonView       ingredientView   = PhotonView.Find(ingredientViewID);
            IngredientMinion ingredientMinion = ingredientView.GetComponent <IngredientMinion>();
            if (ingredientMinion != null)
            {
                PickUpIngredient(ingredientMinion);
            }
        }
    }
コード例 #2
0
ファイル: HeroController.cs プロジェクト: luckkiss/FoodIsLove
    public void PickUpIngredient(IngredientMinion ingredient)
    {
        for (int i = 0; i < _IngredientInventorySlots.Count; ++i)
        {
            if (_IngredientInventorySlots[i].Ingredient == null)
            {
                if (IsLocal)
                {
                    _IngredientInventorySlots[i].Ingredient = ingredient;

                    // Telling the UI that something has happened to some ingredient, so that they update themselves and play animations
                    _IngredientModifiedEvent.Invoke(null);
                    _PickedupIngredientEvent.Invoke(_IngredientInventorySlots[i]);
                }

                ingredient.OnPickedUp();
                _CollectedIngredientEvent.Invoke();
                // Putting the ingredient in the backpack
                ingredient.transform.parent   = transform;
                ingredient.transform.position = Vector3.zero;
                ingredient.GetComponentInChildren <SpriteRenderer>().enabled = false;

                return;
            }
        }
    }
コード例 #3
0
ファイル: CookingStation.cs プロジェクト: luckkiss/FoodIsLove
    protected IEnumerator CookingDelay(float cookingTime, IngredientMinion minion)
    {
        yield return(new WaitForSeconds(cookingTime));

        HideClock();
        minion.GetCooked();
        _CookedIngredient = minion.Tag;
        _IngredientCookedEvent.Invoke(null);
        _IngredientFinishedCookingEvent.Invoke();
        State = CookingStationState.COOKED_FOOD_AVAILABLE;
        _CookingStationUI.UpdateUI();
    }
コード例 #4
0
ファイル: MinionSpawner.cs プロジェクト: luckkiss/FoodIsLove
    private void OnTriggerExit(Collider other)
    {
        IngredientMinion ingredient = other.GetComponent <IngredientMinion>();

        // Player has picked up the ingredient
        if (ingredient != null && ingredient.Tag == _SpawnedIngredient)
        {
            // Starting spawn timer

            _SpawnedIngredient = null;
            return;
        }
    }
コード例 #5
0
ファイル: HeroController.cs プロジェクト: luckkiss/FoodIsLove
 private void RemoveIngredientFromInventory(IngredientMinion ingredient)
 {
     // Removing the ingredient from the slot
     foreach (var inventorySlot in _IngredientInventorySlots)
     {
         if (inventorySlot.Ingredient == ingredient)
         {
             PhotonNetwork.Destroy(inventorySlot.Ingredient.GetComponent <PhotonView>());
             inventorySlot.Ingredient = null;
             break;
         }
     }
 }
コード例 #6
0
ファイル: CookingStation.cs プロジェクト: luckkiss/FoodIsLove
    public bool Use(IngredientMinion minion)
    {
        if (State != CookingStationState.AVAILABLE && State != CookingStationState.NOT_VISIBLE_TO_LOCAL_PLAYER)
        {
            return(false);
        }

        State = CookingStationState.COOKING;
        _CookingStationUI.UpdateUI();
        _StationInUseEvent.Invoke();
        _IngredientStartedToCook.Invoke(null);
        ShowClock();
        StartCoroutine(CookingDelay(_CookingTime, minion));
        return(true);
    }
コード例 #7
0
ファイル: MinionSpawner.cs プロジェクト: luckkiss/FoodIsLove
    private IEnumerator SpawnIngredients()
    {
        while (true)
        {
            if (_CanSpawn)
            {
                SO_Tag           ingredientToSpawn = _IngredientSpawnData.ChooseIngredientToSpawn();
                GameObject       spawnedObject     = PhotonNetwork.Instantiate("Minion_" + ingredientToSpawn.name.Replace("Tag_", ""), transform.position + Vector3.up, Quaternion.identity);
                IngredientMinion ingredient        = spawnedObject.GetComponent <IngredientMinion>();
                ingredient.PickedUpEvent.AddListener(OnIngredientPickedUp);
                ingredient.IngredientExpiredEvent.AddListener(OnIngredientExpired);
                _CanSpawn = false;
            }

            yield return(null);
        }
    }
コード例 #8
0
ファイル: HeroController.cs プロジェクト: luckkiss/FoodIsLove
    public void Cook(IngredientMinion ingredient, CookingPot cookingPot)
    {
        // Cooking the ingredient
        bool ingredientCooked = _TargetCookingStation.Use(ingredient);

        // Setting target cooking station to null
        _TargetCookingStation = null;

        // Updating ui and inventory only on the local machine
        if (IsLocal && ingredientCooked)
        {
            RemoveIngredientFromInventory(ingredient);

            // Telling the UI that something has happened to some ingredient, so that they update themselves
            _IngredientModifiedEvent.Invoke(null);
        }
    }
コード例 #9
0
    protected override void OnSelectedIngredient(object selectedIngredient)
    {
        base.OnSelectedIngredient(selectedIngredient);

        IngredientMinion ingredient = (IngredientMinion)selectedIngredient;
        var ingredientView          = ingredient.GetComponent <PhotonView>();

        // Preparing payload
        Byterizer byterizer = new Byterizer();

        byterizer.Push(_PhotonView.ViewID);
        byterizer.Push(ingredientView.ViewID);
        byte[] data = byterizer.GetBuffer();

        // Raising Net Event
        PhotonNetwork.RaiseEvent((byte)NetworkedGameEvents.ON_SELECTED_INGREDIENT, data, _RaiseEventOptions, _SendOptions);
    }
コード例 #10
0
ファイル: HeroController.cs プロジェクト: luckkiss/FoodIsLove
    private void OnTriggerEnter(Collider other)
    {
        // Checking for hero collisions only in the master client
        if (PhotonNetwork.IsMasterClient && !IsInCombat)
        {
            // Checking if the heroes collided
            HeroController hero = other.GetComponent <HeroController>();

            if (hero != null)
            {
                IsInCombat = true;
                _CombatData.HeroesCollidedEvent.Invoke(null);
                return;
            }

            // Ignoring picking up of ingredients if they have entered a combat scenario
            IngredientMinion ingredient = other.GetComponent <IngredientMinion>();
            if (ingredient != null)
            {
                PickUpIngredient(ingredient);

                PhotonView ingredientView = ingredient.GetComponent <PhotonView>();
                Byterizer  byterizer      = new Byterizer();
                byterizer.Push(ingredientView.ViewID);
                byterizer.Push(GetComponent <PhotonView>().ViewID);
                byte[] data = byterizer.GetBuffer();

                // Initializing Network variables
                RaiseEventOptions raiseEventOptions = new RaiseEventOptions {
                    Receivers = ReceiverGroup.Others
                };
                SendOptions sendOptions = new SendOptions {
                    Reliability = true
                };
                PhotonNetwork.RaiseEvent((byte)NetworkedGameEvents.PICKED_UP_INGREDIENT, data, raiseEventOptions, sendOptions);
            }
        }
    }
コード例 #11
0
    protected virtual void OnSelectedIngredient(object ingredientData)
    {
        IngredientMinion ingredient = (IngredientMinion)ingredientData;

        _HeroCharacter.Cook(ingredient, CookingPot);
    }
コード例 #12
0
    private void OnNetworkEvent(EventData eventData)
    {
        byte eventCode = eventData.Code;

        // On Node Selected
        if (eventCode == (byte)NetworkedGameEvents.ON_SELECTED_NODE)
        {
            // Extracting data
            byte[]    data      = (byte[])eventData.CustomData;
            Byterizer byterizer = new Byterizer();
            byterizer.LoadDeep(data);

            int playerControllerViewID = byterizer.PopInt32();

            // Checking if the event is for this player controller
            if (_PhotonView.ViewID != playerControllerViewID)
            {
                // Event not meant for this player controller
                return;
            }

            // Loading the left over data
            int   nodeViewID = byterizer.PopInt32();
            ANode node       = PhotonView.Find(nodeViewID).GetComponent <ANode>();

            OnSelectedNode(node);
        }

        // On Ingredient selected
        else if (eventCode == (byte)NetworkedGameEvents.ON_SELECTED_INGREDIENT)
        {
            // Extracting data
            byte[]    data      = (byte[])eventData.CustomData;
            Byterizer byterizer = new Byterizer();
            byterizer.LoadDeep(data);

            int playerControllerViewID = byterizer.PopInt32();

            // Checking if the event is for this player controller
            if (_PhotonView.ViewID != playerControllerViewID)
            {
                // Event not meant for this player controller
                return;
            }

            // Loading the left over data
            int ingredientViewID        = byterizer.PopInt32();
            IngredientMinion ingredient = PhotonView.Find(ingredientViewID).GetComponent <IngredientMinion>();
            OnSelectedIngredient(ingredient);
        }

        // On heroes collided
        else if (eventCode == (byte)NetworkedGameEvents.ON_HEROES_COLLIDED_EVENT)
        {
            if (PhotonNetwork.IsMasterClient)
            {
                return;
            }
            _CombatData.HeroesCollidedEvent.Invoke(null);
        }

        else if (eventCode == (byte)NetworkedGameEvents.ON_COMBAT_SEQUENCE_RESTARTED)
        {
            if (PhotonNetwork.IsMasterClient)
            {
                return;
            }
            _CombatData.CombatSequenceRestartedEvent.Invoke(null);
        }

        else if (eventCode == (byte)NetworkedGameEvents.ON_START_COMBAT_TIMER)
        {
            if (PhotonNetwork.IsMasterClient)
            {
                return;
            }

            // Extracting data
            byte[]    data      = (byte[])eventData.CustomData;
            Byterizer byterizer = new Byterizer();
            byterizer.LoadDeep(data);

            float time = byterizer.PopFloat();

            _CombatData.CombatTimerStartedEvent.Invoke(time);
        }

        // On combat option chosen
        else if (eventCode == (byte)NetworkedGameEvents.ON_SELECTED_COMBAT_OPTION)
        {
            /*  Combat validation only takes place in master client so the others need not be
             *  updated when someone choses. Its enough if they see the results */
            if (!PhotonNetwork.IsMasterClient)
            {
                return;
            }

            byte[]    data      = (byte[])eventData.CustomData;
            Byterizer byterizer = new Byterizer();
            byterizer.LoadDeep(data);

            int   playerViewID = byterizer.PopInt32();
            byte  chosenOption = (byte)byterizer.PopByte();
            int[] combatData   = { playerViewID, chosenOption };

            _CombatData.CombatOptionChosenEvent.Invoke(combatData);
        }

        // On show combat results event
        else if (eventCode == (byte)NetworkedGameEvents.ON_COMBAT_SEQUENCE_RESULT)
        {
            // This event is already triggered in the master client so it needs to be triggered only on other clients
            if (PhotonNetwork.IsMasterClient)
            {
                return;
            }

            byte[]    data      = (byte[])eventData.CustomData;
            Byterizer byterizer = new Byterizer();
            byterizer.LoadDeep(data);

            int playerViewID = byterizer.PopInt32();

            byte  chosenOption = (byte)byterizer.PopByte();
            int   winnerID     = byterizer.PopInt32();
            int[] combatData   = { playerViewID, chosenOption, winnerID };
            _CombatData.ShowCombatResultsEvent.Invoke(combatData);
        }

        // On combat sequence ended event
        else if (eventCode == (byte)NetworkedGameEvents.ON_COMBAT_SEQUENCE_ENDED)
        {
            if (PhotonNetwork.IsMasterClient)
            {
                return;
            }

            _CombatData.CombatSequenceCompletedEvent.Invoke((int)eventData.CustomData);
        }
    }
コード例 #13
0
 public void Initialize()
 {
     Ingredient = null;
 }