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); } } }
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; } } }
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(); }
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; } }
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; } } }
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); }
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); } }
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); } }
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); }
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); } } }
protected virtual void OnSelectedIngredient(object ingredientData) { IngredientMinion ingredient = (IngredientMinion)ingredientData; _HeroCharacter.Cook(ingredient, CookingPot); }
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); } }
public void Initialize() { Ingredient = null; }