public void TakeItem(InventoryData inventory, Item item) { if (item != null && !character.IsDoingAction() && inventory.CanTakeItem(item.data.id, item.quantity)) { character.FaceTorward(item.transform.position); if (onTakeItem != null) { onTakeItem.Invoke(item); } character.TriggerAction(0.4f, () => { //Make sure wasnt destroyed during the 0.4 sec if (item != null && inventory.CanTakeItem(item.data.id, item.quantity)) { PlayerData pdata = PlayerData.Get(); DroppedItemData dropped_item = pdata.GetDroppedItem(item.GetUID()); float durability = dropped_item != null ? dropped_item.durability : item.data.durability; int slot = inventory.AddItem(item.data.id, item.quantity, durability, item.GetUID()); //Add to inventory ItemTakeFX.DoTakeFX(item.transform.position, item.data, inventory.type, slot); item.TakeItem(); //Destroy item } }); } }
void Update() { if (TheGame.Get().IsPaused()) { return; } if (was_spawned && selectable.IsActive()) { PlayerData pdata = PlayerData.Get(); DroppedItemData dropped_item = pdata.GetDroppedItem(GetUID()); if (dropped_item != null) { if (data.HasDurability() && dropped_item.durability <= 0f) { DestroyItem(); //Destroy item from durability } } } if (auto_collect_range > 0.1f) { PlayerCharacter player = PlayerCharacter.GetNearest(transform.position, auto_collect_range); if (player != null) { player.Inventory.AutoTakeItem(this); } } }
//Create a new item that existed in inventory (such as when dropping it) public static Item Create(ItemData data, Vector3 pos, int quantity, float durability, string uid) { DroppedItemData ditem = PlayerData.Get().AddDroppedItem(data.id, SceneNav.GetCurrentScene(), pos, quantity, durability, uid); GameObject obj = Instantiate(data.item_prefab, pos, data.item_prefab.transform.rotation); Item item = obj.GetComponent <Item>(); item.data = data; item.was_spawned = true; item.unique_id.unique_id = ditem.uid; item.quantity = quantity; return(item); }
public void AutoTakeItem(InventoryData inventory, Item item) { if (item != null && !character.IsDoingAction() && inventory.CanTakeItem(item.data.id, item.quantity)) { PlayerData pdata = PlayerData.Get(); DroppedItemData dropped_item = pdata.GetDroppedItem(item.GetUID()); float durability = dropped_item != null ? dropped_item.durability : item.data.durability; int slot = inventory.AddItem(item.data.id, item.quantity, durability, item.GetUID()); //Add to inventory ItemTakeFX.DoTakeFX(item.transform.position, item.data, inventory.type, slot); item.TakeItem(); //Destroy item } }
public DroppedItemData AddDroppedItem(string item_id, string scene, Vector3 pos, int quantity, float durability, string uid) { RemoveDroppedItem(uid); DroppedItemData ditem = new DroppedItemData(); ditem.uid = uid; ditem.item_id = item_id; ditem.scene = scene; ditem.pos = pos; ditem.quantity = quantity; ditem.durability = durability; dropped_items[ditem.uid] = ditem; return(ditem); }
//Spawn an existing one in the save file (such as after loading) public static Item Spawn(string uid, Transform parent = null) { DroppedItemData ddata = PlayerData.Get().GetDroppedItem(uid); if (ddata != null && ddata.scene == SceneNav.GetCurrentScene()) { ItemData idata = ItemData.Get(ddata.item_id); if (idata != null) { GameObject build = Instantiate(idata.item_prefab, ddata.pos, idata.item_prefab.transform.rotation); build.transform.parent = parent; Item item = build.GetComponent <Item>(); item.data = idata; item.was_spawned = true; item.unique_id.unique_id = uid; item.quantity = ddata.quantity; return(item); } } return(null); }