コード例 #1
0
        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
                    }
                });
            }
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        //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);
        }
コード例 #4
0
        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
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        //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);
        }