Esempio n. 1
0
        public AmmunitionData ConsumeAmmunition(AmmunitionType ammunitionType)
        {
            AmmunitionData ammunitionData = new AmmunitionData();

            foreach (ItemSlot itemSlot in ItemSlots)
            {
                AmmunitionItem ammunitionItem = itemSlot.item as AmmunitionItem;

                if (ammunitionItem == null)
                {
                    continue;
                }

                if (ammunitionItem.AmmunitionType != ammunitionType)
                {
                    continue;
                }

                ammunitionData.ammunitionPrefab = ammunitionItem.AmmunitionPrefab;

                RemoveItem(itemSlot.item);

                break;
            }

            return(ammunitionData);
        }
Esempio n. 2
0
        public void FireArrow()
        {
            //Make sure the player has the required ammunition.
            if (!playerInventory.ItemHolder.HasAmmunition(ammunitionType))
            {
                return;
            }

            //Use this default target position in case we don't hit the raycast.
            Vector3 targetPos = mainCameraTransform.position + mainCameraTransform.forward * 1000f;

            //Check if we are aiming at something.
            if (Physics.Raycast(mainCameraTransform.position, mainCameraTransform.forward, out RaycastHit hit, 1000f, layerMask))
            {
                //If we are aiming at something then set that point to be our target position.
                targetPos = hit.point;
            }

            //Get back data about the ammunition we are using.
            AmmunitionData ammunitionData = playerInventory.ItemHolder.ConsumeAmmunition(ammunitionType);

            //Spawn the projectile at the correct position relative to the bow.
            GameObject arrowInstance = Instantiate(ammunitionData.ammunitionPrefab, arrowSpawnTransform.position, Quaternion.Euler(arrowSpawnTransform.forward));

            //Initialise the projectile's rigidbody with velocity in the target's direction.
            arrowInstance.GetComponent <Rigidbody>().velocity = (targetPos - arrowInstance.transform.position).normalized * arrowLaunchForce;
        }
Esempio n. 3
0
 public AmmunitionData GetAmmunition(int id)
 {
     if (!_ammunitionMap.TryGetValue(id, out var item))
     {
         _ammunitionMap.Add(id, null);
         _ammunitionMap[id] = item = AmmunitionData.Deserialize(_jsonDatabase.GetAmmunition(id), this);
     }
     if (item == null)
     {
         throw new DatabaseException(CircularDependencyText + "Ammunition_" + id);
     }
     return(item);
 }