void Update() { if (!isLocalPlayer) { return; } if (Input.GetKeyDown(reloadKey) && Cursor.lockState == CursorLockMode.Locked && health.current > 0 && movement.state != MoveState.CLIMBING && ReloadTimeRemaining() == 0 && !UIUtils.AnyInputActive()) { ItemSlot slot = hotbar.slots[hotbar.selection]; if (slot.amount > 0 && slot.item.data is RangedWeaponItem) { RangedWeaponItem itemData = (RangedWeaponItem)slot.item.data; if (itemData.requiredAmmo != null && slot.item.ammo < itemData.magazineSize) { int inventoryIndex = inventory.GetItemIndexByName(itemData.requiredAmmo.name); if (inventoryIndex != -1) { CmdReloadWeaponOnHotbar(inventoryIndex, hotbar.selection); if (itemData.reloadSound) { audioSource.PlayOneShot(itemData.reloadSound); } } } } } }
private void Reload(InputAction.CallbackContext obj) { Item item = Inventory.Controller.instance.GetSelectedItem()?.Item; // We get the selected item and nullcheck it to avoid errors RangedWeaponItem weapon = item as RangedWeaponItem; // We cast the item to a rangedweapon as we know only rangedweapons are capable of shooting if (weapon != null) { weapon.Reload(); // If the weapon is not null (aka we are trying to reload an empty slot or a non ranged weapon) we can safely perform a reload } }
public bool CanLoadAmmoIntoWeapon(ItemSlot ammoSlot, Item weapon) { if (ammoSlot.amount > 0 && ammoSlot.item.data is AmmoItem && weapon.data is RangedWeaponItem) { AmmoItem ammoData = (AmmoItem)ammoSlot.item.data; RangedWeaponItem weaponData = (RangedWeaponItem)weapon.data; if (weaponData.requiredAmmo == ammoData) { return(weapon.ammo < weaponData.magazineSize); } } return(false); }
protected override void FixedUpdate() { base.FixedUpdate(); // If either weapon item changes if (meleeItem != MeleeWeapon || rangedItem != RangedWeapon) { meleeItem = MeleeWeapon; rangedItem = RangedWeapon; // update attackData array AssignWeaponAttackData(); } }
public void CmdReloadWeaponInInventory(int ammoIndex, int weaponIndex) { if (health.current > 0 && 0 <= ammoIndex && ammoIndex < inventory.slots.Count && 0 <= weaponIndex && weaponIndex < inventory.slots.Count && inventory.slots[ammoIndex].amount > 0 && inventory.slots[weaponIndex].amount > 0) { ItemSlot ammoSlot = inventory.slots[ammoIndex]; ItemSlot weaponSlot = inventory.slots[weaponIndex]; if (CanLoadAmmoIntoWeapon(ammoSlot, weaponSlot.item)) { RangedWeaponItem weaponData = (RangedWeaponItem)weaponSlot.item.data; int limit = Mathf.Clamp(ammoSlot.amount, 0, weaponData.magazineSize - weaponSlot.item.ammo); ammoSlot.amount -= limit; weaponSlot.item.ammo += limit; inventory.slots[ammoIndex] = ammoSlot; inventory.slots[weaponIndex] = weaponSlot; reloadTimeEnd = NetworkTime.time + weaponData.reloadTime; } } }
private void ShowEditItem() { mSelectedItemIndex = EditorGUILayout.Popup("Item: ", mSelectedItemIndex, mItemOptions); InventoryItem nextItem = ItemList[mSelectedItemIndex]; if (nextItem != mSelectedItem) { // clear the sprite so it will be reloaded mSelectedItemSprite = null; mSelectedItem = ItemList[mSelectedItemIndex]; } System.Type currentType = mSelectedItem.GetType(); #region Consumables if (currentType == typeof(HPRecover)) { HPRecover item = (HPRecover)mSelectedItem; ShowEditItemBase(item); // recovery item.Amount = EditorGUILayout.IntField("Amount: ", Mathf.Clamp(item.Amount, 0, 999)); } //if (currentType == typeof(RecoveryItem)) //{ // RecoveryItem item = (RecoveryItem)mSelectedItem; // ShowEditItemBase(item); // // recovery // item.ConsumableStatType = (Enums.eConsumableStatType)EditorGUILayout.EnumPopup("Stat Type: ", item.ConsumableStatType); // item.Amount = EditorGUILayout.IntField("Amount: ", Mathf.Clamp(item.Amount, 0, 999)); //} //else if (currentType == typeof(StatUpgradeItem)) //{ // StatUpgradeItem item = (StatUpgradeItem)mSelectedItem; // ShowEditItemBase(item); // // stat upgrade // item.StatType = (Enums.eStatType)EditorGUILayout.EnumPopup("Boost Stat: ", item.StatType); // item.Amount = EditorGUILayout.IntField("Amount: ", Mathf.Clamp(item.Amount, 0, 999)); //} //else if (currentType == typeof(StatusEffectItem)) //{ // StatusEffectItem item = (StatusEffectItem)mSelectedItem; // ShowEditItemBase(item); // // status effect // item.Effect = (Enums.eStatusEffect)EditorGUILayout.EnumPopup("Effect: ", item.Effect); //} //else if (currentType == typeof(WeaponUpgradeItem)) //{ // WeaponUpgradeItem item = (WeaponUpgradeItem)mSelectedItem; // ShowEditItemBase(item); // // weapon upgrade // item.Amount = EditorGUILayout.IntField("Amount: ", Mathf.Clamp(item.Amount, 0, 999)); //} //else if (currentType == typeof(CharacterSupportItem)) //{ // // TODO //} #endregion #region Companions else if (currentType == typeof(CompanionItem)) { CompanionItem item = (CompanionItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // companion } #endregion #region Stat Boosts else if (currentType == typeof(StatBoostItem)) { StatBoostItem item = (StatBoostItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // stat boost item.StatType = (Enums.eStatType)EditorGUILayout.EnumPopup("Stat: ", item.StatType); item.Amount = EditorGUILayout.IntField("Amount: ", Mathf.Clamp(item.Amount, 0, 999)); } else if (currentType == typeof(LongTermEffectItem)) { LongTermEffectItem item = (LongTermEffectItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // long term effect item.EffectType = (Enums.eLongTermEffectType)EditorGUILayout.EnumPopup("Effect: ", item.EffectType); item.Delay = EditorGUILayout.FloatField("Interval: ", Mathf.Clamp(item.Delay, 0, 10)); item.Amount = EditorGUILayout.IntField("Amount: ", Mathf.Clamp(item.Amount, 0, 999)); } else if (currentType == typeof(ResistItem)) { ResistItem item = (ResistItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // resist item.Effect = (Enums.eStatusEffect)EditorGUILayout.EnumPopup("Effect: ", item.Effect); item.Percent = EditorGUILayout.FloatField("Percent: ", Mathf.Clamp(item.Percent, 0, 100)); } #endregion #region Armours else if (currentType == typeof(HeadArmourItem)) { HeadArmourItem item = (HeadArmourItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // head armour } else if (currentType == typeof(BodyArmourItem)) { BodyArmourItem item = (BodyArmourItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // body armour item.Slots = EditorGUILayout.IntField("# Slots: ", Mathf.Clamp(item.Slots, 0, 5)); } else if (currentType == typeof(ArmArmourItem)) { ArmArmourItem item = (ArmArmourItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // arm armour } #endregion #region Weapons else if (currentType == typeof(MeleeWeaponItem)) { MeleeWeaponItem item = (MeleeWeaponItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // melee weapon item.TwoHanded = EditorGUILayout.Toggle("Two Handed?: ", item.TwoHanded); } else if (currentType == typeof(RangedWeaponItem)) { RangedWeaponItem item = (RangedWeaponItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // ranged weapon item.Range = EditorGUILayout.FloatField("Range: ", Mathf.Clamp(item.Range, 0, 99)); } else if (currentType == typeof(MagicWeaponItem)) { MagicWeaponItem item = (MagicWeaponItem)mSelectedItem; ShowEditItemBase(item); ShowEditEquippableBase(item); // magic weapon item.FocusType = (Enums.eMagicFocusType)EditorGUILayout.EnumPopup("Focus: ", item.FocusType); item.MagicType = (Enums.eMagicType)EditorGUILayout.EnumPopup("Type: ", item.MagicType); item.Radius = EditorGUILayout.FloatField("Radius: ", Mathf.Clamp(item.Radius, 0, 99)); item.MagicEffect = (Enums.eStatusEffect)EditorGUILayout.EnumPopup("Effect: ", item.MagicEffect); item.MPCost = EditorGUILayout.IntField("Cost: ", Mathf.Clamp(item.MPCost, 0, 999)); } #endregion if (GUILayout.Button("Delete Item")) { mConfirmPopup = ConfirmPopup.Create(); mConfirmPopup.OnResultClicked += OnPopupClosed; mConfirmPopup.SetMessage("Are you sure you'd like to delete this item?"); } if (GUILayout.Button("Update")) { Save(); } }
private void CreateItem() { //System.Type currentType = mCurrentItem.GetType(); System.Type currentType = mCurrentCreateType.GetType(); // fill in required fields #region Consumables if (currentType == typeof(HPRecover)) { HPRecover item = new HPRecover(itemID); item.Amount = recoveryAmount; SetItemBase(item); ItemList.Add(item); } //if (currentType == typeof(RecoveryItem)) //{ // RecoveryItem item = new RecoveryItem(itemID); // item.ConsumableStatType = newRecoveryStatType; // item.Amount = recoveryAmount; // SetItemBase(item); // ItemList.Add(item); //} //else if (currentType == typeof(StatUpgradeItem)) //{ // StatUpgradeItem item = new StatUpgradeItem(itemID); // item.StatType = newStatType; // item.Amount = statBoostAmount; // SetItemBase(item); // ItemList.Add(item); //} //else if (currentType == typeof(StatusEffectItem)) //{ // StatusEffectItem item = new StatusEffectItem(itemID); // item.Effect = newEffectType; // SetItemBase(item); // ItemList.Add(item); //} //else if (currentType == typeof(WeaponUpgradeItem)) //{ // WeaponUpgradeItem item = new WeaponUpgradeItem(itemID); // item.Amount = weaponUpgradeAmount; // SetItemBase(item); // ItemList.Add(item); //} //else if (currentType == typeof(CharacterSupportItem)) //{ // // TODO //} #endregion #region Companions else if (currentType == typeof(CompanionItem)) { CompanionItem item = new CompanionItem(itemID); SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } #endregion #region Stat Boosts else if (currentType == typeof(StatBoostItem)) { StatBoostItem item = new StatBoostItem(itemID); item.Stat = StatToBoost; item.Amount = BoostAmount; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } else if (currentType == typeof(LongTermEffectItem)) { LongTermEffectItem item = new LongTermEffectItem(itemID); item.EffectType = LongTermEffect; item.Delay = LongTermDelay; item.Amount = LongTermAmount; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } else if (currentType == typeof(ResistItem)) { ResistItem item = new ResistItem(itemID); item.Effect = ResistEffect; item.Percent = ResistPercent; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } #endregion #region Armours else if (currentType == typeof(HeadArmourItem)) { HeadArmourItem item = new HeadArmourItem(itemID); SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } else if (currentType == typeof(BodyArmourItem)) { BodyArmourItem item = new BodyArmourItem(itemID); item.Slots = BodySlots; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } else if (currentType == typeof(ArmArmourItem)) { ArmArmourItem item = new ArmArmourItem(itemID); SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } #endregion #region Weapons else if (currentType == typeof(MeleeWeaponItem)) { MeleeWeaponItem item = new MeleeWeaponItem(itemID); item.TwoHanded = MeleeTwoHanded; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } else if (currentType == typeof(RangedWeaponItem)) { RangedWeaponItem item = new RangedWeaponItem(itemID); item.Range = Range; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } else if (currentType == typeof(MagicWeaponItem)) { MagicWeaponItem item = new MagicWeaponItem(itemID); item.FocusType = MagicFocusType; item.MagicType = MagicType; item.Radius = MagicRadius; item.MagicEffect = MagicEffect; item.MPCost = MagicCost; SetItemBase(item); SetEquippableBase(item); ItemList.Add(item); } #endregion itemID += 1; Reset(); }