private void EquipConsommableRPC(int consommableIndex) { consommableHolder.EquipConsommable(consommableIndex); }
/// <summary> /// Collect an item. Shoot a raycast to see if the player is targeting an item, then check distance. /// If the player can collect the item, try to find a slot on the inventory and add it if the inventory is not full /// </summary> public void Collect() { RaycastHit hit; Transform objectHit = null; if (Physics.Raycast(camera.position, camera.forward, out hit, 5f)) { objectHit = hit.transform; } if (!objectHit) { return; } var playerGameObject = objectHit.gameObject; // - hit object is not from loot layer, exit if (playerGameObject.layer != 11) { return; } // - check distance if (hit.distance > 5f) { return; } var playerObject = playerGameObject.GetComponent <PlayerObjectScript>(); var slotIndex = FindSlot(playerObject.GetId()); // - inventory is not full if (slotIndex != -1 && playerObject.IsAvailable() && !playerObject.IsLooting()) { // - the object is is looting state until the TakeObject RPC disable it playerObject.SetLooting(true); playerView.RPC("TakeObject", PhotonTargets.AllViaServer, playerObject.GetLootTrackerIndex(), slotIndex, playerView.ownerId); AddObject(playerObject, slotIndex); playerUI.SetItemUISlot(playerObject, slotIndex); // equip weapon if the index is already selected if (slotIndex == currentSlotIndex) { if (playerObject.IsWeapon()) { var weapon = playerObject.GetWeapon(); weaponHolder.SetWeapon(weapon, weapon.currentAmmo); playerUI.SetAmmoCounter(weapon.currentAmmo); } else if (playerObject.isConsommable()) { var consommableId = playerObject.GetConsommable().GetId(); weaponHolder.SetWeapon(null, 0f); consommableHolder.EquipConsommable(consommableId); playerUI.SetAmmoCounter(inventory[slotIndex].GetStackSize()); } } } }