[{"data":1,"prerenderedAt":1853},["ShallowReactive",2],{"navigation":3,"class-ref-GGItemType":75,"class-ref-GGItemData":145,"class-ref-GGItemCollection":192,"class-ref-GGInventoryStackingStrategy":233,"class-ref-GGInventory":282,"class-ref-GGInventoryItemFilterStrategy":867,"class-ref-GGInventoryItemFilterStrategyWeight":895,"class-ref-GGInventoryUseStrategy":912,"class-ref-GGInventorySerializationStrategy":929,"class-ref-GGInventorySortingStrategy":959,"class-ref-GGInventoryUI":987,"class-ref-GGInventoryController":1198,"class-ref-GGInventoryActionStrategy":1370,"class-ref-GGInventoryActionStrategyDefault":1412,"class-ref-GGDragonDrop":1505,"class-ref-GGInventoryDndStrategy":1613,"class-ref-GGDragonDropStrategy":1670,"class-ref-GGInventoryTransferStrategy":1792,"class-ref-GGInventorySearchStrategy":1828},[4,13,40,60],{"title":5,"_path":6,"children":7},"Getting Started","/getting-started",[8,10],{"title":9,"_path":6},"Introduction",{"title":11,"_path":12},"Installation","/getting-started/installation",{"title":14,"_path":15,"children":16},"Concepts","/concepts",[17,19,22,25,28,31,34,37],{"title":18,"_path":15},"Overview",{"title":20,"_path":21},"Inventory","/concepts/inventory",{"title":23,"_path":24},"Interactions","/concepts/interaction",{"title":26,"_path":27},"Permissions","/concepts/permissions",{"title":29,"_path":30},"Multiplayer","/concepts/multiplayer",{"title":32,"_path":33},"User Interface","/concepts/user-interface",{"title":35,"_path":36},"Game Integration","/concepts/game-integration",{"title":38,"_path":39},"Crafting","/concepts/crafting",{"title":41,"_path":42,"children":43},"Demos","/demos",[44,46,49,52,54,57],{"title":45,"_path":42},"Inventory Tour",{"title":47,"_path":48},"Inventory UI Playground","/demos/inventory_ui",{"title":50,"_path":51},"Inventory Game UI","/demos/inventory_game_ui",{"title":38,"_path":53},"/demos/crafting",{"title":55,"_path":56},"Multiplayer Lobby","/demos/mp_lobby",{"title":58,"_path":59},"Sequencer (prototype)","/demos/sequencer",{"title":61,"_path":62,"children":63},"Guide","/guide",[64,66,69,72],{"title":65,"_path":62},"Architecture Deep Dive",{"title":67,"_path":68},"Design Principles","/guide/design-principles",{"title":70,"_path":71},"Changelog v2.x","/guide/changelog-v2",{"title":73,"_path":74},"Changelog v1.x","/guide/changelog",{"_path":76,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":80,"navigation":78,"addon":77,"version":81,"brief_description":82,"description":83,"tutorials":79,"methods":84,"members":107,"signals":137,"constants":138,"inherits":139,"name":140,"title":140,"_source":141,"_file":142,"_stem":143,"_extension":144},"/reference/2.0/gg_inventory/ggitemtype","gg_inventory",false,"","content:40.reference:2.0:gg_inventory:GGItemType.xml","2.0","Represents a type of inventory item and defines shared item properties.","Item types describe the properties shared by all instances of a particular type of item. An instance of an item type is represented by the [GGItemData] class.  For example, the [member name] and [member image] that represent the item type.[br][br]Some item types may be [member stackable], up to a specific [member stack_size]. They may also have a [member weight].[br][br]This class should be extended by your game to describe additional properties you may need. For example:\n[codeblock]\nclass_name MyCustomItemType extends GGItemType\n\n# The item description that will be shown to players on the item detail screen\nvar description: String = \"\"\n\n# Determines whether this type of item can be equipped.\nvar equippable: bool = false\n[/codeblock]",[85,94,99,103],{"description":86,"name":87,"public":88,"returnType":89,"params":90},"Creates and returns a new instance of the item type. The [param properties] can be used to set any properties on the [GGItemData] instance. Example:\n[codeblock]\nmy_item_data = my_item_type.create_item({ quantity = 2 })\n[/codeblock]","create_item",true,"GGItemData",[91],{"name":92,"type":93},"properties","Dictionary",{"description":95,"name":96,"public":88,"returnType":97,"params":98},"Wether instances of this item can be stacked with other instances of the same type.","is_stackable","bool",[],{"description":100,"name":101,"public":78,"returnType":89,"params":102},"Override to determine which class is use to represent the [GGItemData]. Example:\n[codeblock]\nfunc _factory_class() -> GGItemData:\n    return MyCustomItemData.new()\n[/codeblock]","_factory_class",[],{"description":79,"name":104,"public":78,"returnType":105,"params":106},"_to_string","String",[],[108,113,117,120,123,128,133],{"name":109,"description":110,"type":111,"setter":79,"getter":79,"default":112,"public":88},"icon","Represents the item visually.[br][br]This is, for example, used by the [GGInventorySlotItemUI].","Texture2D","null",{"name":114,"description":115,"type":105,"setter":79,"getter":79,"default":116,"public":88},"name","The name of the item.","\"\"",{"name":118,"description":119,"type":105,"setter":79,"getter":79,"default":116,"public":88},"description","The description of the item.",{"name":121,"description":95,"type":97,"setter":79,"getter":79,"default":122,"public":88},"stackable","false",{"name":124,"description":125,"type":126,"setter":79,"getter":79,"default":127,"public":88},"stack_size","The maximum stack size for this item.","int","0",{"name":129,"description":130,"type":131,"setter":79,"getter":79,"default":132,"public":88},"weight","How much this type of item weighs. Used by [method GGInventory.item_weight] to calculate the weight of all items.","float","0.0",{"name":134,"description":135,"type":136,"setter":79,"getter":79,"public":88},"audio","The audio to use when interacting with the item.","GGItemAudio",[],[],"Resource","GGItemType","content","40.reference/2.0/gg_inventory/GGItemType.xml","40.reference/2.0/gg_inventory/GGItemType","xml",{"_path":146,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":147,"navigation":78,"addon":77,"version":81,"brief_description":148,"description":149,"tutorials":79,"methods":150,"members":177,"signals":188,"constants":189,"inherits":139,"name":89,"title":89,"_source":141,"_file":190,"_stem":191,"_extension":144},"/reference/2.0/gg_inventory/ggitemdata","content:40.reference:2.0:gg_inventory:GGItemData.xml","Represents an instance of an inventory item and defines unique item properties.","The inventory item is defined by a [member type] and a [member quantity].[br][br]An item provides the [method serialize] and [method unserialize] methods, which may be used by a [GGInventorySerializationStrategy].[br][br]This class should be extended by your game to describe additional properties you may need. For example:\n[codeblock]\nclass_name MyCustomItemData extends GGItemData\n\n# Stores the name of the player that crafted this item\nvar crafted_by: String = \"\"\n\n# The quality of the item is determined by the skill level of the player who crafted the item.\nvar quality: float = 0.0\n[/codeblock]\nA custom item data class should only describe properties that are unique to a particular instanec of that item. Properties shared by all instances of a type should be added to a class that extends the [GGItemType] class instead.",[151,155,159,166,171,175],{"description":152,"name":153,"public":88,"returnType":89,"params":154},"Creates a copy of the current item. This allows inheriting classes to override the method to selectively duplicate additional object properties, since [method duplicate] cannot be overridden.","copy",[],{"description":156,"name":157,"public":88,"returnType":93,"params":158},"Serializes and returns the internal item state. This is used by the [GGInventorySerializationStrategyDynamic] class.","serialize",[],{"description":160,"name":161,"public":88,"returnType":162,"params":163},"Deserializes and restores the internal item state. This is used by the [GGInventorySerializationStrategyDynamic] class.","deserialize","void",[164],{"name":165,"type":93},"data",{"description":79,"name":167,"public":78,"returnType":162,"params":168},"_set_type",[169],{"name":170,"type":140},"value",{"description":79,"name":172,"public":78,"returnType":162,"params":173},"_set_quantity",[174],{"name":170,"type":126},{"description":79,"name":104,"public":78,"returnType":105,"params":176},[],[178,181,185],{"name":179,"description":180,"type":140,"setter":79,"getter":79,"public":88},"type","The item type describes common properties for all item instances. While it is typically desirable for all [GGItemData] instances to be unique, the [GGItemType] instances should be shared. This is best accomplished by using a [code].tres[/code] resource to configure the type.",{"name":182,"description":183,"type":126,"setter":172,"getter":79,"default":184,"public":88},"quantity","Specifies the number of items in the stack out of a maximum of [member GGItemType.stack_size].","1",{"name":186,"description":187,"type":97,"setter":79,"getter":79,"default":122,"public":88},"active","Whether the item is active. This property can be used to represent whether the item is active, equipped, enabled, or otherwise in use.",[],[],"40.reference/2.0/gg_inventory/GGItemData.xml","40.reference/2.0/gg_inventory/GGItemData",{"_path":193,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":194,"navigation":78,"addon":77,"version":81,"brief_description":195,"description":196,"tutorials":79,"methods":197,"members":221,"signals":228,"constants":229,"inherits":139,"name":230,"title":230,"_source":141,"_file":231,"_stem":232,"_extension":144},"/reference/2.0/gg_inventory/ggitemcollection","content:40.reference:2.0:gg_inventory:GGItemCollection.xml","Represents a collection of inventory items and ensures that each item is a unique instance.","The main purpose of this class is to be able to create a collection of items that can be stored as a resource. This makes it easy to assign a item collection resource to a [GGInventory] component. [br][br]Items are represented by the [GGItemData] class, which extends [Resource]. Resource instances are shared by default, which is not the desired behavior since you want to have a unique instance for each copy of the same item. This is handled by the collection when it is instantiated: All of its [member items] are ensured to be unique instances via [method GGItemData.copy]. [br][br]This class implements a [url=https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_advanced.html#custom-iterators]custom iterator[/url]. This allows you to iterate over the collection's items, for example, in a for loop:\n[codeblock]\nfor item: GGItemData in my_item_collection:\n    print(\"item: %s\" % [item])\n[/codeblock]\n[b]Note[/b]: If this collection belongs to an [GGInventory] that allows gaps (see [member GGInventory.allow_gaps]), it'll pad the collection's [member items] with [code]null[/code] values.",[198,202,206,212,216],{"description":199,"name":200,"public":88,"returnType":126,"params":201},"The size of the [member items] array.","size",[],{"description":203,"name":204,"public":88,"returnType":126,"params":205},"Counts the number of items in the [member items] array.","count",[],{"description":79,"name":207,"public":78,"returnType":97,"params":208},"_iter_init",[209],{"name":210,"type":211},"arg","Array",{"description":79,"name":213,"public":78,"returnType":97,"params":214},"_iter_next",[215],{"name":210,"type":211},{"description":79,"name":217,"public":78,"returnType":218,"params":219},"_iter_get","Variant",[220],{"name":210,"type":218},[222],{"name":223,"description":224,"type":225,"setter":226,"getter":79,"default":227,"public":88},"items","Represents a list of inventory items. The array may also contain [code]null[/code] entries, but only if [member GGInventory.allow_gaps] is enabled.","GGItemData[]","@items_setter","[]",[],[],"GGItemCollection","40.reference/2.0/gg_inventory/GGItemCollection.xml","40.reference/2.0/gg_inventory/GGItemCollection",{"_path":234,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":235,"navigation":78,"addon":77,"version":81,"brief_description":236,"description":237,"tutorials":79,"methods":238,"signals":276,"constants":277,"members":278,"inherits":139,"name":279,"title":279,"_source":141,"_file":280,"_stem":281,"_extension":144},"/reference/2.0/gg_inventory/gginventorystackingstrategy","content:40.reference:2.0:gg_inventory:GGInventoryStackingStrategy.xml","Implements the interface for stacking and splitting of inventory items.","The [method stack_items] method stacks as many items as possible to \"unclutter\" the inventory. The [method split_item] method can be used to split an item into two. In addition, the provided [method can_stack] and [method stack] methods. [br][br]The methods in this class are not intended to be called directly. They are called by a [GGInventory] instance. [br][br][b]Note[/b]: This class does not provide an implementation. Please use [GGInventoryStackingStrategyDefault] instead.",[239,252,262,268],{"description":240,"name":241,"public":88,"returnType":97,"params":242},"Returns whether the [param source_item] from the [param source_inventory] can be stacked onto the [param target_item] in the [param target_inventory].","can_stack",[243,246,248,250],{"name":244,"type":245},"source_inventory","GGInventory",{"name":247,"type":245},"target_inventory",{"name":249,"type":89},"source_item",{"name":251,"type":89},"target_item",{"description":253,"name":254,"public":88,"returnType":126,"params":255},"Attempt to stack source onto target. returns the quantity that was stacked (0 means nothing was stacked).","stack",[256,257,258,259,261],{"name":244,"type":245},{"name":247,"type":245},{"name":249,"type":89},{"name":260,"type":126},"target_slot_id",{"name":182,"type":126},{"description":263,"name":264,"public":88,"returnType":162,"params":265},"Combine all compatible stackable items in the inventory, so they take up the least amount of slots possible.","stack_items",[266],{"name":267,"type":245},"inventory",{"description":269,"name":270,"public":88,"returnType":162,"params":271},"Splits an item into two. If no [param quantity] is specified, it will split the [param item] as evenly in half as possible.","split_item",[272,273,275],{"name":267,"type":245},{"name":274,"type":89},"item",{"name":182,"type":126},[],[],[],"GGInventoryStackingStrategy","40.reference/2.0/gg_inventory/GGInventoryStackingStrategy.xml","40.reference/2.0/gg_inventory/GGInventoryStackingStrategy",{"_path":283,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":284,"navigation":78,"addon":77,"version":81,"brief_description":285,"description":286,"tutorials":287,"methods":291,"members":758,"signals":822,"constants":864,"inherits":440,"name":245,"title":245,"_source":141,"_file":865,"_stem":866,"_extension":144},"/reference/2.0/gg_inventory/gginventory","content:40.reference:2.0:gg_inventory:GGInventory.xml","Provides item storage capabilities to characters and objects.","The inventory component acts as a repository for items and provides methods to manage them. It is highly configurable and extensible through various [url=https://en.wikipedia.org/wiki/Strategy_pattern]strategies[/url] that modify its behavior. [br][br]The inventory offers methods for integration with your game logic, and methods for integration with the user interface used by players. [br][br][b]Managing Items[/b] [br][br]Basic operations for item management include [method add_item], [method get_item], [method has_item], and [method remove_item]. Items are stored in the [member contents] property. To organize items, use [method sort_items] and [method stack_items]. Their behavior is determined by the [member sorting_strategies] and [member stacking_strategy], respectively. [br][br][b]Inventory Limits[/b] [br][br]The [member max_items] property determines the item capacity of the inventory. Use [method item_count] to determine how many items the inventory contains. The [member max_weight] property determines the weight capacity of the inventory. [method item_weight] returns the combined weight of all items in the inventory. [br][br]Whenever inventory contents change, the [signal items_changed] signal is emitted, which the inventory user interface will react to. [br][br][b]Using Items[/b] [br][br]The [method use] method is a façade for using items and is typically invoked through the inventory's user interface. Its behavior is determined by the [member use_strategy]. It defaults to calling [method request_use_item], which abstracts multiplayer client handling and emits the [signal item_use_requested] signal on the server, which your game logic is expected to react to. [br][br][b]Dropping Items[/b] [br][br]Items can be dropped from the inventory either through game logic via the [method drop_items] method, through player action via the [method request_drop_items] method, or because the [member max_size] was reduced and the inventory can no longer hold as many items. The inventory will emit the [signal items_dropped] signal, which your game logic is expected to handle. [br][br][b]Permissions[/b] [br][br]Permissions are handled in two parts: Object-level access is handled by the [GGEntityAccessManager], while inventory-level permissions are handled by the [GGInventoryAccessPolicy]. [br][br]First, the inventory integrates with the [GGEntityAccessManager] for permissions handling. The access manager provides a [code]context_id[/code] which represents an actor for a particular client. Inventory methods such as [method request_sort_items], [method request_transfer_item_to_inventory], [method request_use_item], and other methods following the [code]request_*()[/code] format expect the [param context_id] as one of the parameters. This allows the host to determine which character the client is acting on behalf of. [br][br]Second, what an actor can [i]do[/i] with the inventory is determined by the inventory's [member access_policy]. The [GGInventoryAccessPolicy], despite having a similar name, is technically unrelated to the [GGEntityAccessPolicy] class. The inventory access policy defines what kind of actions an actor can take. The inventory provides façade methods to determine what permissions an actor has: For example, [method can_write] determines whether an actor can modify inventory contents at all, or if they have read-only access. In addition, the [method can_add_item], [method can_remove_item], [method can_use_item], and [method can_drop_item] determine what an actor can do with a specific item. These permissions are relied on by other behavior such as the [member transfer_strategy]. [br][br]For custom behavior, extend the [GGInventoryAccessPolicy] and override any methods with your game-specific logic. [br][br][b]Saving/Restoring[/b] [br][br]Inventory configuration and contents can be saved via [method serialize]. Use [method deserialize] to restore the inventory state. The serialization behavior can be modified via the [member serialization_strategy] property. [br][br][b]Multiplayer[/b] [br][br]Players (clients) act on behalf of their character. Any character or object the player interacts with must have a [GGEntityAccessManager] component from which a [code]context_id[/code] has to be obtained via [method GGEntityAccessManager.open_context]. [br][br]In this example, the player drops the item in the first inventory slot on behalf of their character: \n[codeblock]\nvar actor: CharacterBody2D = $PlayerCharacter\nvar entity_access_manager: GGEntityAccessManager = $PlayerCharacter/GGEntityAccessManager\nvar inventory: GGInventory = $PlayerCharacter/GGInventory\nvar first_item_id: Array[int] = [0]\n\nvar context_id: int = await entity_access_manager.open_context(actor)\ninventory.request_drop_items(first_item_id, context_id)\nentity_access_manager.close_context(context_id)\n[/codeblock]\n In most real-world scenarios, the [code]context_id[/code] is kept open to avoid having to re-open it for every action the player takes. For example, when a user interface shows inventory contents, it'll first open a [code]context_id[/code], which will only be closed once the user interface is closed. [br][br]The host's inventory component listens to the [signal GGEntityAccessManager.context_opened] and [signal GGEntityAccessManager.context_closed] signals. When a context is opened, the inventory contents are sent to the client. While a context is open, any item changes are synchronized with the respective client. [br][br]Since all multiplayer inventory interaction are server-authoritative and request/response-based, multiple clients can interact with the same inventory concurrently.",{"link":288},{"#text":289,"@title":290},"https://inventory.gogogodot.io/concepts/inventory#inventory-component","Conceptual Overview",[292,295,298,301,304,308,312,318,324,331,336,342,347,351,356,361,366,372,380,388,391,396,401,407,412,419,424,430,433,438,444,449,457,462,468,474,480,486,492,500,504,509,513,520,527,533,540,546,551,559,566,574,582,590,597,606,615,623,629,635,641,646,653,659,665,671,676,681,686,691,697,701,705,709,712,715,720,726,730,735,740,750],{"description":79,"name":293,"public":78,"returnType":162,"params":294},"_ready",[],{"description":79,"name":207,"public":78,"returnType":97,"params":296},[297],{"name":210,"type":211},{"description":79,"name":213,"public":78,"returnType":97,"params":299},[300],{"name":210,"type":211},{"description":79,"name":217,"public":78,"returnType":218,"params":302},[303],{"name":210,"type":218},{"description":305,"name":306,"public":88,"returnType":126,"params":307},"Counts how many items the inventory contains.","item_count",[],{"description":309,"name":310,"public":88,"returnType":131,"params":311},"The combined weight of all items in the inventory.","item_weight",[],{"description":313,"name":314,"public":88,"returnType":89,"params":315},"Returns the item of a slot","get_item",[316],{"name":317,"type":126},"slot_id",{"description":319,"name":320,"public":88,"returnType":89,"params":321},"Sets a slot to an item (or null)","set_item",[322,323],{"name":317,"type":126},{"name":274,"type":89},{"description":325,"name":326,"public":88,"returnType":162,"params":327},"An optimized method to swap items in [param source_slot_id] and [param target_slot_id]. Performs an atomic swap, that results in a single [signal items_changed] signal. Other components can use it to detect that an item was moved, but that it is still in the inventory.","swap_items",[328,330],{"name":329,"type":126},"source_slot_id",{"name":260,"type":126},{"description":79,"name":332,"public":78,"returnType":162,"params":333},"_set_item_quantity",[334,335],{"name":317,"type":126},{"name":182,"type":126},{"description":337,"name":338,"public":88,"returnType":126,"params":339},"Adds [param item] to the inventory. If [param quantity] is specified, only adds up to that quantity. Note: [method add_item] does not make a copy of the item, so if you're adding half of an item, it's the callers responsibility to first duplicate the item via [method GGItemData.copy].[br][br]Returns the quantity that was added.","add_item",[340,341],{"name":274,"type":89},{"name":182,"type":126},{"description":343,"name":344,"public":88,"returnType":89,"params":345},"Removes the item from the [param slot_id] and returns it.","remove_item",[346],{"name":317,"type":126},{"description":79,"name":348,"public":78,"returnType":89,"params":349},"_remove_item",[350],{"name":317,"type":126},{"description":352,"name":353,"public":88,"returnType":97,"params":354},"Checks if the inventory has the [param item]. Will only return true if the item is the exact same instance.","has_item",[355],{"name":274,"type":89},{"description":357,"name":358,"public":88,"returnType":97,"params":359},"Check if the inventory has the [param items] in sufficient quantities. The check will be compare the [param items]' types and quantities.","has_items",[360],{"name":223,"type":225},{"description":362,"name":363,"public":88,"returnType":126,"params":364},"Returns the total quantity of the item [param type].","get_quantity_by_item_type",[365],{"name":179,"type":140},{"description":367,"name":368,"public":88,"returnType":89,"params":369},"Consumes an item in [param slot_id]. If [param quantity] is specified, it'll consume and subtract the specific amount.","consume_item",[370,371],{"name":317,"type":126},{"name":182,"type":126},{"description":373,"name":374,"public":88,"returnType":225,"params":375},"Removes and returns the specified quantity of items from the inventory.[br][br]The returned array will contain the items in the format they were stored in the inventory; so if it requested a stack of 10 wood, and the inventory contained three items of 5 wood, 3 wood, and 8 wood, it'll return an array of 5, 3, and 2 wood.[br][br]If [param allow_partial] was set to [code]true[/code], the caller has to inspect what was returned. Partials means that nothing may have been returned at all. This makes it easy to consume ammo (e.g. request 30 bullets, but if only 10 were available, allow for a partial reload).","consume_items",[376,378],{"name":377,"type":225},"needed_items",{"name":379,"type":97},"allow_partial",{"description":381,"name":382,"public":88,"returnType":225,"params":383},"Consumes a specific [param quantity] of an item [param type]. If the inventory holds less than [param min_quantity], an empty array is returned. The caller should inspect the return value for the exact quantities. The returned quantities may be split across multiple items.","consume_item_type",[384,385,386],{"name":179,"type":140},{"name":182,"type":126},{"name":387,"type":126},"min_quantity",{"description":79,"name":389,"public":78,"returnType":162,"params":390},"_build_lookup_table",[],{"description":79,"name":392,"public":78,"returnType":162,"params":393},"_add_to_lookup_table",[394,395],{"name":317,"type":126},{"name":274,"type":89},{"description":79,"name":397,"public":78,"returnType":162,"params":398},"_remove_from_lookup_table",[399,400],{"name":317,"type":126},{"name":274,"type":89},{"description":79,"name":402,"public":78,"returnType":162,"params":403},"_adjust_lookup_table_quantity",[404,405],{"name":274,"type":89},{"name":406,"type":126},"diff",{"description":79,"name":408,"public":78,"returnType":162,"params":409},"_shift_lookup_table_slot_ids",[410],{"name":411,"type":126},"from_slot_id",{"description":413,"name":414,"public":88,"returnType":126,"params":415},"Returns the position of an open slot that can hold [param item], or [code]-1[/code] if all slots are taken.","find_free_slot_for_item",[416,417],{"name":274,"type":89},{"name":418,"type":126},"offset",{"description":420,"name":421,"public":88,"returnType":97,"params":422},"Whether the [param item] is accepted by this inventory as determined by the [member item_filter_strategy].","accepts_item",[423],{"name":274,"type":89},{"description":425,"name":426,"public":88,"returnType":97,"params":427},"Whether the [param item] is accepted by this inventory in [param slot_id] as determined by the [member item_filter_strategy].","slot_accepts_item",[428,429],{"name":274,"type":89},{"name":317,"type":126},{"description":431,"name":157,"public":88,"returnType":93,"params":432},"Serializes the inventory and returns its state. The implementation is determined by the [member serialization_strategy] and typically includes configuration and contents.",[],{"description":434,"name":161,"public":88,"returnType":162,"params":435},"Restores the inventory from the [param state]. The implementation is determined by the [member serialization_strategy] and typically includes configuration and contents.",[436],{"name":437,"type":93},"state",{"description":79,"name":439,"public":78,"returnType":440,"params":441},"_find_actor_for_context","Node",[442],{"name":443,"type":126},"context_id",{"description":445,"name":446,"public":88,"returnType":447,"params":448},"Retrieve the list of currently subscribed clients from the [member entity_access_manager]. These are the \"remote_sender_ids\". When called on the client, it will only return the client's own peer_id.","get_subscribers","int[]",[],{"description":450,"name":451,"public":88,"returnType":97,"params":452},"Returns true if the [member entity_access_manager] has a context for the [param actor] owned by the [param remote_sender_id].","has_context",[453,455],{"name":454,"type":440},"actor",{"name":456,"type":126},"remote_sender_id",{"description":458,"name":459,"public":88,"returnType":97,"params":460},"Whether the [param actor] can modify the inventory contents. Defers to the [member access_policy].","can_write",[461],{"name":454,"type":440},{"description":463,"name":464,"public":88,"returnType":97,"params":465},"Whether the [param item] can be added by the [param actor]. Defers to the [member access_policy].","can_add_item",[466,467],{"name":274,"type":89},{"name":454,"type":440},{"description":469,"name":470,"public":88,"returnType":97,"params":471},"Whether the [param item] can be removed by the [param actor]. Defers to the [member access_policy].","can_remove_item",[472,473],{"name":274,"type":89},{"name":454,"type":440},{"description":475,"name":476,"public":88,"returnType":97,"params":477},"Whether the [param item] can be used by the [param actor]. Defers to the [member access_policy].","can_use_item",[478,479],{"name":274,"type":89},{"name":454,"type":440},{"description":481,"name":482,"public":88,"returnType":97,"params":483},"Whether the [param item] can be dropped by the [param actor]. Defers to the [member access_policy].","can_drop_item",[484,485],{"name":274,"type":89},{"name":454,"type":440},{"description":487,"name":241,"public":88,"returnType":97,"params":488},"Whether the [param source_inventory]'s [param source_item] can be stacked onto the [param target_item]. Defers to the [member stacking_strategy] for the logic.",[489,490,491],{"name":244,"type":245},{"name":249,"type":89},{"name":251,"type":89},{"description":493,"name":254,"public":88,"returnType":126,"params":494},"Attempt to stack the [param source_item] onto a specific [param target_slot_id]. The [param quantity] specifies how much of the item should be stacked. The return value is the quantity that was added for the [param source_item], for which the caller is responsible that it is applied.",[495,496,497,499],{"name":244,"type":245},{"name":249,"type":89},{"name":498,"type":126},"target_item_id",{"name":182,"type":126},{"description":501,"name":264,"public":88,"returnType":162,"params":502},"Stack all stackable items to optimize inventory space. Will only work if the [param actor] Node has write permissions. This method should only be called server-side.",[503],{"name":454,"type":440},{"description":505,"name":506,"public":88,"returnType":162,"params":507},"Request stacking all stackable items to optimize inventory space. The [param context_id] must have been created through the [member entity_access_manager] first. Can be called from the server or client.","request_stack_items",[508],{"name":443,"type":126},{"description":79,"name":510,"public":78,"returnType":162,"params":511},"_request_stack_items",[512],{"name":443,"type":126},{"description":514,"name":270,"public":88,"returnType":162,"params":515},"Split the item in [param slot_id] as specified by the [param amount]. Splitting is done on behalf of the [param actor], if they have write permission. This method should only be called server-side.",[516,517,519],{"name":317,"type":126},{"name":518,"type":126},"amount",{"name":454,"type":440},{"description":521,"name":522,"public":88,"returnType":162,"params":523},"Split the item in [param slot_id] as specified by the [param amount]. The actor will be retrieved via the [param context_id] which must have been created through the [member entity_access_manager] first. Can be called from the server or client.","request_split_item",[524,525,526],{"name":317,"type":126},{"name":518,"type":126},{"name":443,"type":126},{"description":79,"name":528,"public":78,"returnType":162,"params":529},"_request_split_item",[530,531,532],{"name":317,"type":126},{"name":518,"type":126},{"name":443,"type":126},{"description":534,"name":535,"public":88,"returnType":162,"params":536},"Sort all items according to the [param strategy_id], which is the Nth strategy in the [member sorting_strategies] Array. Sorting is done on behalf of the [param actor], if they have write permission. This method should only be called server-side. Clients should use the [method request_sort_items] method instead.","sort_items",[537,539],{"name":538,"type":126},"strategy_id",{"name":454,"type":440},{"description":541,"name":542,"public":88,"returnType":162,"params":543},"Requests sorting items according to the [param strategy_id], which is the Nth strategy in the [member sorting_strategies] Array. The actor will be retrieved via the [param context_id] which must have been created through the [member entity_access_manager] first. Can be called from the server or client.","request_sort_items",[544,545],{"name":538,"type":126},{"name":443,"type":126},{"description":79,"name":547,"public":78,"returnType":162,"params":548},"_request_sort_items",[549,550],{"name":538,"type":126},{"name":443,"type":126},{"description":552,"name":553,"public":88,"returnType":162,"params":554},"Transfers the items in [param slot_ids] to the [param target_inventory]. The transfer is done on behalf of the [param actor], if they have write permission. This method should only be called server-side. You should use [method request_transfer_items_to_inventory] as it is server/client agnostic.","transfer_items_to_inventory",[555,557,558],{"name":556,"type":447},"slot_ids",{"name":247,"type":245},{"name":454,"type":440},{"description":560,"name":561,"public":88,"returnType":162,"params":562},"Transfers the items in the [param slot_ids] to the [param target_inventory]. The transfer is done on behalf of the actor identified by the [param context_id].","request_transfer_items_to_inventory",[563,564,565],{"name":556,"type":447},{"name":247,"type":245},{"name":443,"type":126},{"description":79,"name":567,"public":78,"returnType":162,"params":568},"_request_transfer_items_to_inventory",[569,570,573],{"name":556,"type":447},{"name":571,"type":572},"target_inventory_path","NodePath",{"name":443,"type":126},{"description":575,"name":576,"public":88,"returnType":162,"params":577},"Transfers the item in [param slot_id] to the [param target_inventory]. The [param quantity] parameter allows for partial transfers. The transfer is done on behalf of the [param actor], if they have write permission. This method should only be called server-side.","transfer_item_to_inventory",[578,579,580,581],{"name":317,"type":126},{"name":247,"type":245},{"name":182,"type":126},{"name":454,"type":440},{"description":583,"name":584,"public":88,"returnType":162,"params":585},"Requests transfer of the item in [param slot_id] to the [param target_inventory]. The [param quantity] parameter allows for partial transfers. The transfer is done on behalf of the actor identified by the [param context_id] issued by the [member entity_access_manager]. This method is server/client-agnostic.","request_transfer_item_to_inventory",[586,587,588,589],{"name":317,"type":126},{"name":247,"type":245},{"name":182,"type":126},{"name":443,"type":126},{"description":79,"name":591,"public":78,"returnType":162,"params":592},"_request_transfer_item_to_inventory",[593,594,595,596],{"name":317,"type":126},{"name":571,"type":572},{"name":182,"type":126},{"name":443,"type":126},{"description":598,"name":599,"public":88,"returnType":162,"params":600},"Transfers the item in [param source_slot_id] to the [param target_slot_id] in the [param target_inventory]. The [param quantity] parameter allows for partial transfers. The transfer is done on behalf of the [param actor], if they have write permission. This method should only be called by game logic on the server-side. UI logic should use [method request_transfer_item_to_slot] instead.","transfer_item_to_slot",[601,602,603,604,605],{"name":329,"type":126},{"name":247,"type":245},{"name":260,"type":126},{"name":182,"type":126},{"name":454,"type":440},{"description":607,"name":608,"public":88,"returnType":162,"params":609},"Requests transfer of the item in [param source_slot_id] to the [param target_slot_id] in the [param target_inventory]. The [param quantity] parameter allows for partial transfers. Can be called from the server or client.","request_transfer_item_to_slot",[610,611,612,613,614],{"name":329,"type":126},{"name":247,"type":245},{"name":260,"type":126},{"name":182,"type":126},{"name":443,"type":126},{"description":79,"name":616,"public":78,"returnType":162,"params":617},"_request_transfer_item_to_slot",[618,619,620,621,622],{"name":329,"type":126},{"name":571,"type":572},{"name":260,"type":126},{"name":182,"type":126},{"name":443,"type":126},{"description":624,"name":625,"public":88,"returnType":162,"params":626},"Use the item in [param slot_id] for [param actor]. Façade method that should be called locally. If no [member use_strategy] is defined, it defaults to calling [method request_use_item] for server-side handling.","use",[627,628],{"name":317,"type":126},{"name":443,"type":126},{"description":630,"name":631,"public":88,"returnType":162,"params":632},"Use the item in [param slot_id] for [param actor]. Should only be called server-side. This will only emit the [signal item_use_requested] signal. It is up to a listener to react to the item use request.","use_item",[633,634],{"name":317,"type":126},{"name":454,"type":440},{"description":636,"name":637,"public":88,"returnType":162,"params":638},"Request the use of the item in [param slot_id] for [param actor]. Can be called from the server or client. This will only emit the [signal item_use_requested] signal on the server. It is up to a listener to react to the item use request.","request_use_item",[639,640],{"name":317,"type":126},{"name":443,"type":126},{"description":79,"name":642,"public":78,"returnType":162,"params":643},"_request_use_item",[644,645],{"name":317,"type":126},{"name":443,"type":126},{"description":647,"name":648,"public":88,"returnType":162,"params":649},"Drops the item in [param slot_id] from the inventory on behalf of the [param actor]. The [param quantity] allows for specific quantities.","drop_item",[650,651,652],{"name":317,"type":126},{"name":182,"type":218},{"name":454,"type":440},{"description":79,"name":654,"public":88,"returnType":162,"params":655},"request_drop_item",[656,657,658],{"name":317,"type":126},{"name":182,"type":218},{"name":443,"type":126},{"description":79,"name":660,"public":78,"returnType":162,"params":661},"_request_drop_item",[662,663,664],{"name":317,"type":126},{"name":182,"type":218},{"name":443,"type":126},{"description":666,"name":667,"public":88,"returnType":162,"params":668},"Drops the items in slots specified by [param slot_ids] on behalf of [param actor].","drop_items",[669,670],{"name":556,"type":447},{"name":454,"type":440},{"description":79,"name":672,"public":88,"returnType":162,"params":673},"request_drop_items",[674,675],{"name":556,"type":447},{"name":443,"type":126},{"description":79,"name":677,"public":78,"returnType":162,"params":678},"_request_drop_items",[679,680],{"name":556,"type":447},{"name":443,"type":126},{"description":682,"name":683,"public":88,"returnType":126,"params":684},"Returns the slot ID of the [param item].","find_item_slot_id",[685],{"name":274,"type":89},{"description":687,"name":688,"public":88,"returnType":89,"params":689},"Find an item of a particular [param type].","find_item_by_type",[690],{"name":179,"type":140},{"description":79,"name":692,"public":78,"returnType":225,"params":693},"_find_items_by",[694],{"name":695,"type":696},"criteria","Callable",{"description":79,"name":698,"public":78,"returnType":225,"params":699},"_find_items_with_space_left",[700],{"name":179,"type":140},{"description":79,"name":702,"public":78,"returnType":162,"params":703},"_set_contents",[704],{"name":170,"type":230},{"description":79,"name":706,"public":78,"returnType":162,"params":707},"_on_items_changed",[708],{"name":556,"type":447},{"description":79,"name":710,"public":78,"returnType":162,"params":711},"_apply_items_changed",[],{"description":79,"name":713,"public":78,"returnType":162,"params":714},"_resize_inventory",[],{"description":79,"name":716,"public":78,"returnType":162,"params":717},"_cl_resize_inventory",[718],{"name":719,"type":126},"slots",{"description":721,"name":722,"public":88,"returnType":162,"params":723},"Sends the inventory contents to the client identified by its [param peer_id]. In most cases, calling this method is not needed. Instead, use the [member entity_access_manager] to open a context, which will automatically sync inventory contents as needed.","send_contents_to_client",[724],{"name":725,"type":126},"peer_id",{"description":79,"name":727,"public":78,"returnType":162,"params":728},"_sv_send_contents",[729],{"name":456,"type":126},{"description":79,"name":731,"public":78,"returnType":162,"params":732},"_sync_items_with_client",[733,734],{"name":556,"type":211},{"name":456,"type":126},{"description":79,"name":736,"public":78,"returnType":162,"params":737},"_cl_update_item",[738,739],{"name":317,"type":126},{"name":165,"type":218},{"description":79,"name":741,"public":78,"returnType":162,"params":742},"_on_context_opened",[743,745,747,749],{"name":744,"type":126},"_context_id",{"name":746,"type":440},"_actor",{"name":748,"type":126},"_nonce",{"name":456,"type":126},{"description":79,"name":751,"public":78,"returnType":162,"params":752},"_on_context_closed",[753,754,755,756],{"name":744,"type":126},{"name":746,"type":440},{"name":748,"type":126},{"name":757,"type":126},"_remote_sender_id",[759,763,768,772,774,777,781,785,789,794,798,801,805,810,814,818,820],{"name":760,"description":761,"type":230,"setter":702,"getter":79,"default":762,"public":88},"contents","The collection of items that the inventory manages.","new()",{"name":764,"description":765,"type":97,"setter":766,"getter":79,"default":767,"public":88},"allow_gaps","Allows gaps in the inventory.[br][br]When disabled, the [member contents] aren't allow to have any gaps. The [member GGItemCollection.items] Array is not allowed to have any [code]null[/code] values.[br][br]When enabled, the [member contents] are are padded with [code]null[/code] values. The size of the [member GGItemCollection.items] Array will match the [member max_slots] property.","@allow_gaps_setter","true",{"name":769,"description":770,"type":126,"setter":771,"getter":79,"default":127,"public":88},"max_slots","Maximum number of items this inventory can hold. Adjusting the value automatically resizes the [member contents]' [member GGItemCollection.items] array. If the resized inventory is too small, it will emit [signal items_dropped] with the items that were removed from the inventory.","@max_slots_setter",{"name":773,"type":97,"setter":79,"getter":79,"default":122,"public":88},"weight_limit",{"name":775,"description":776,"type":131,"setter":79,"getter":79,"default":132,"public":88},"max_weight","The maximum weight capacity of this inventory. [br][br]Use the [member item_filter_strategy] with the [GGInventoryItemFilterStrategyWeight] class to enforce the weight limit.",{"name":778,"description":779,"type":131,"setter":79,"getter":79,"default":780,"public":88},"expiration_multiplier","Modifies item expiration for this inventory. Smaller values expire faster, larger values expire slower (e.g. 2.0 means expiration is doubled). [br][br]Note: Requires the [GGInventoryExpirationsExtension].","1.0",{"name":782,"description":783,"type":784,"setter":79,"getter":79,"public":88},"use_strategy","The Use Strategy determines what happens when [method use] is called. The default behavior is for the inventory to call [method request_use_item]. If a strategy is specified, it can be used to \"intercept\" using an item on the client.","GGInventoryUseStrategy",{"name":786,"description":787,"type":788,"setter":79,"getter":79,"default":762,"public":88},"item_filter_strategy","Allows filtering items when they're added to the inventory. This can be used to ensure only specific items can be added, for example for crafting.","GGInventoryItemFilterStrategy",{"name":790,"description":791,"type":792,"setter":79,"getter":79,"default":793,"public":88},"sorting_strategies","Specifies the behavior of [method GGItemCollection.sort_items].","GGInventorySortingStrategy[]","[...]",{"name":795,"description":796,"type":797,"setter":79,"getter":79,"public":88},"transfer_strategy","Responsible for the logic when items are transferred to another inventory.","GGInventoryTransferStrategy",{"name":799,"description":800,"type":279,"setter":79,"getter":79,"public":88},"stacking_strategy","Specifies the strategy for stacking items.",{"name":802,"description":803,"type":804,"setter":79,"getter":79,"default":762,"public":88},"serialization_strategy","The serialization strategy determines how items are serialized and deserialized for the purpose of sending it to clients","GGInventorySerializationStrategy",{"name":806,"description":807,"type":808,"setter":809,"getter":79,"public":88},"entity_access_manager","Responsible for determining whether an actor has access to this inventory. This is required for multiplayer.","GGEntityAccessManager","@entity_access_manager_setter",{"name":811,"description":812,"type":813,"setter":79,"getter":79,"default":762,"public":88},"access_policy","The access policy determines what an actor interacting with the inventory is allowed to do.","GGInventoryAccessPolicy",{"name":815,"type":816,"setter":79,"getter":79,"default":817,"public":78},"_item_type_lut","Dictionary[GGItemType, GGInventory.LutEntry]","{}",{"name":819,"type":97,"setter":79,"getter":79,"default":122,"public":78},"_batch_changes",{"name":821,"type":447,"setter":79,"getter":79,"default":227,"public":78},"_batch_items_changed",[823,828,833,840,847,853,859],{"description":824,"name":825,"params":826},"Emitted when the inventory's resized (for example, by adjusting the [member max_slots] property).","inventory_resized",[827],{"name":719,"type":126},{"description":829,"name":830,"params":831},"Emitted when items have changed.","items_changed",[832],{"name":556,"type":447},{"description":834,"name":835,"params":836},"Emitted when an item is added. This signal is intended for UI notifications. The [param item] refers to the item in the inventory, which is not necessarily the same instance of the item that was passed to [method add_item] because the item may have been stacked. [br][br]The [param quantity] argument indicates how many items were added, while [code]item.quantity[/code] indicates the total quantity in the item stack. [br][br]Adding a single item with a quantity greater than 1 may result multiple item_added signals as the item gets split up across multiple slots.","item_added",[837,838,839],{"name":274,"type":89},{"name":182,"type":126},{"name":317,"type":126},{"description":841,"name":842,"params":843},"Emitted when an item is removed from the inventory. This signal is intended for UI notifications. To detect when an item was dropped into the world, use [signal items_dropped] instead. The [param item] should not be modified.","item_removed",[844,845,846],{"name":274,"type":89},{"name":182,"type":126},{"name":317,"type":126},{"description":848,"name":849,"params":850},"Emitted when items are dropped from the inventory. Either through player action, or because the [member max_size] was reduced and the inventory can no longer hold as many items.","items_dropped",[851,852],{"name":223,"type":225},{"name":454,"type":440},{"description":854,"name":855,"params":856},"Emitted when the player requests using an item.","item_use_requested",[857,858],{"name":274,"type":89},{"name":454,"type":440},{"description":860,"name":861,"params":862},"Emitted when an item has expired and was removed from the inventory. Note: Requires the [GGInventoryExpirationsExtension].","item_expired",[863],{"name":274,"type":89},[],"40.reference/2.0/gg_inventory/GGInventory.xml","40.reference/2.0/gg_inventory/GGInventory",{"_path":868,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":869,"navigation":78,"addon":77,"version":81,"brief_description":870,"description":871,"tutorials":79,"methods":872,"signals":890,"constants":891,"members":892,"inherits":139,"name":788,"title":788,"_source":141,"_file":893,"_stem":894,"_extension":144},"/reference/2.0/gg_inventory/gginventoryitemfilterstrategy","content:40.reference:2.0:gg_inventory:GGInventoryItemFilterStrategy.xml","The item filter strategy determines whether the inventory accepts a particular [GGItemData].","The default strategy accepts all items. Overriding [method accepts_item], lets you define which items can be added to the inventory. For even more specificity, [method slot_accepts_item] indicates whether a specific inventory slot accepts a particular item. In addition, the [method find_free_slot_for_item] method is used to find a free slot for an item.",[873,879,884],{"description":874,"name":414,"public":88,"returnType":126,"params":875},"Returns a [code]slot_id[/code] where the [param item] can be stored in the [param inventory], or [code]-1[/code], if no slot is available. It takes the [method accepts_item] filter into account.",[876,877,878],{"name":267,"type":245},{"name":274,"type":89},{"name":418,"type":126},{"description":880,"name":421,"public":88,"returnType":97,"params":881},"Returns whether the specified [param item] is allowed to be stored in the [param inventory].",[882,883],{"name":267,"type":245},{"name":274,"type":89},{"description":885,"name":426,"public":88,"returnType":97,"params":886},"Returns whether the specified [param item] is allowed to be stored in the [param inventory] in [param slot_id].",[887,888,889],{"name":267,"type":245},{"name":274,"type":89},{"name":317,"type":126},[],[],[],"40.reference/2.0/gg_inventory/GGInventoryItemFilterStrategy.xml","40.reference/2.0/gg_inventory/GGInventoryItemFilterStrategy",{"_path":896,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":897,"navigation":78,"addon":77,"version":81,"brief_description":898,"description":899,"tutorials":79,"methods":900,"@deprecated":905,"signals":906,"constants":907,"members":908,"inherits":788,"name":909,"title":909,"_source":141,"_file":910,"_stem":911,"_extension":144},"/reference/2.0/gg_inventory/gginventoryitemfilterstrategyweight","content:40.reference:2.0:gg_inventory:GGInventoryItemFilterStrategyWeight.xml","Enforces an inventory's weight capacity via the [member GGInventory.max_weight].","If the inventory has a maximum weight capacity, this item filter strategy only accepts the item if it won't exceed [member GGInventory.max_weight].",[901],{"description":79,"name":421,"public":88,"returnType":97,"params":902},[903,904],{"name":267,"type":245},{"name":274,"type":89},"Enforcing weight is now included in the inventory's logic.",[],[],[],"GGInventoryItemFilterStrategyWeight","40.reference/2.0/gg_inventory/GGInventoryItemFilterStrategyWeight.xml","40.reference/2.0/gg_inventory/GGInventoryItemFilterStrategyWeight",{"_path":913,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":914,"navigation":78,"addon":77,"version":81,"brief_description":915,"description":916,"tutorials":79,"methods":917,"signals":924,"constants":925,"members":926,"inherits":139,"name":784,"title":784,"_source":141,"_file":927,"_stem":928,"_extension":144},"/reference/2.0/gg_inventory/gginventoryusestrategy","content:40.reference:2.0:gg_inventory:GGInventoryUseStrategy.xml","The Use Strategy determines how an inventory item is used.","The strategy runs on the client when [method GGInventory.use] is called. [br][br]The default behavior is to call [method GGInventory.request_use_item], which sends a request to the server. [br][br]Extend this class and override the behavior to instead handle items locally on the client.",[918],{"description":919,"name":625,"public":88,"returnType":97,"params":920},"Handles the [method GGInventory.use] call for the [param slot_id] in [param inventory] for the actor identified by the [param context_id]. If the strategy successfully processed the request, it should return [code]true[/code], otherwise [code]false[/code].",[921,922,923],{"name":267,"type":245},{"name":317,"type":126},{"name":443,"type":126},[],[],[],"40.reference/2.0/gg_inventory/GGInventoryUseStrategy.xml","40.reference/2.0/gg_inventory/GGInventoryUseStrategy",{"_path":930,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":931,"navigation":78,"addon":77,"version":81,"brief_description":932,"description":933,"tutorials":79,"methods":934,"signals":954,"constants":955,"members":956,"inherits":139,"name":804,"title":804,"_source":141,"_file":957,"_stem":958,"_extension":144},"/reference/2.0/gg_inventory/gginventoryserializationstrategy","content:40.reference:2.0:gg_inventory:GGInventorySerializationStrategy.xml","Implements serialization/deserialization of inventory items for saving and sending them over the network.","Serialization turns [GGInventory] configuration and contents into a [Dictionary]. Deserialization is used to restore [GGInventory] configuration and contents from a [Dictionary].[br][br]The [method serialize] and [method deserialize] methods are invoked from a [GGInventory] instance according to its [member GGInventory.serialization_strategy].[br][br]The [method serialize_item] and [method deserialize_item] methods handle serialization/deserialization for each item in the inventory.[br][b]Note[/b]: This strategy only deserializes [GGItemData] instances. If you're using custom classes that extend [GGItemData], you should use the [GGInventorySerializationStrategyDynamic] instead.",[935,939,944,949],{"description":936,"name":157,"public":88,"returnType":93,"params":937},"Returns a [Dictionary] that contains the [param inventory] state.",[938],{"name":267,"type":245},{"description":940,"name":161,"public":88,"returnType":162,"params":941},"Restores the [param inventory] configuration and contents based on the provided [param state].",[942,943],{"name":267,"type":245},{"name":437,"type":93},{"description":945,"name":946,"public":88,"returnType":218,"params":947},"Returns the [param item] state as [Dictionary] or [code]null[/code].","serialize_item",[948],{"name":274,"type":89},{"description":950,"name":951,"public":88,"returnType":218,"params":952},"Returns a [GGItemData] instance (or [code]null[/code]) based on the provided [param state].","deserialize_item",[953],{"name":437,"type":218},[],[],[],"40.reference/2.0/gg_inventory/GGInventorySerializationStrategy.xml","40.reference/2.0/gg_inventory/GGInventorySerializationStrategy",{"_path":960,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":961,"navigation":78,"addon":77,"version":81,"brief_description":962,"description":963,"tutorials":79,"methods":964,"members":977,"signals":982,"constants":983,"inherits":139,"name":984,"title":984,"_source":141,"_file":985,"_stem":986,"_extension":144},"/reference/2.0/gg_inventory/gginventorysortingstrategy","content:40.reference:2.0:gg_inventory:GGInventorySortingStrategy.xml","Implements inventory item sorting by name.","Sorts [GGInventory] items by name. [br][br]Extend this class to implement additional sorting strategies. In most cases, it's sufficient to override [method _sort_callback].",[965,969],{"description":966,"name":535,"public":88,"returnType":162,"params":967},"Sort the [param items] using [method Array.sort_custom]) using the [method _sort_callback].",[968],{"name":223,"type":225},{"description":970,"name":971,"public":78,"returnType":97,"params":972},"Performs the custom sorting. Parameters [param a] and [param b] are either instances of [GGItemData] or [code]null[/code]. If the items are in the correct order (a before b) this method returns [code]true[/code].","_sort_callback",[973,975],{"name":974,"type":89},"a",{"name":976,"type":89},"b",[978],{"name":979,"description":980,"type":105,"setter":79,"getter":79,"default":981,"public":88},"sort_label","The label this sorting strategy will be visible as in the user interface.","\"Unnamed\"",[],[],"GGInventorySortingStrategy","40.reference/2.0/gg_inventory/GGInventorySortingStrategy.xml","40.reference/2.0/gg_inventory/GGInventorySortingStrategy",{"_path":988,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":989,"navigation":78,"addon":77,"version":81,"brief_description":990,"description":991,"tutorials":79,"methods":992,"members":1063,"signals":1156,"constants":1182,"inherits":1194,"name":1195,"title":1195,"_source":141,"_file":1196,"_stem":1197,"_extension":144},"/reference/2.0/gg_inventory/gginventoryui","content:40.reference:2.0:gg_inventory:GGInventoryUI.xml","Displays the contents of the [GGInventory] component.","The Inventory UI displays the contents of a [GGInventory] component. Most of the heavy lifting is performed by the [GGInventoryManagedSlotsController]. [br][br][b]Presentation[/b] [br][br]The inventory UI supports three different presentation styles determined by the [member view] setting: [br][br]- The [b]Grid View[/b] uses a [GridContainer] with a fixed number of [member grid_columns]. [br]- The [b]Flow View[/b] uses a [FlowContainer] and displays as many items side-by-side as will fit. This allows for more responsive design for differently size devices. [br]- The [b]List View[/b] uses a [VBoxContainer] to display vertically-arranged line items. [br][br]The grid view and flow view both use the [member slot_scene], while the list view uses the [member list_item_scene] to represent each individual inventory item slot.",[993,995,999,1005,1008,1011,1014,1017,1020,1025,1028,1031,1036,1042,1046,1050,1054,1058],{"description":79,"name":293,"public":78,"returnType":162,"params":994},[],{"description":996,"name":997,"public":88,"returnType":162,"params":998},"Forces all item slots to refresh.","refresh_slots",[],{"description":1000,"name":1001,"public":88,"returnType":1002,"params":1003},"Returns the [Control] node for the [param slot_id].","get_slot","Control",[1004],{"name":317,"type":126},{"description":79,"name":1006,"public":78,"returnType":162,"params":1007},"_set_scroll_container_custom_minimum_size",[],{"description":79,"name":1009,"public":78,"returnType":162,"params":1010},"_set_scroll_container_mode",[],{"description":79,"name":1012,"public":78,"returnType":162,"params":1013},"_set_inventory",[],{"description":79,"name":1015,"public":78,"returnType":162,"params":1016},"_update_controller_configuration",[],{"description":79,"name":1018,"public":78,"returnType":162,"params":1019},"_update_view",[],{"description":79,"name":1021,"public":78,"returnType":162,"params":1022},"_on_tab_changed",[1023],{"name":1024,"type":126},"tab",{"description":79,"name":1026,"public":78,"returnType":162,"params":1027},"_set_grid_columns",[],{"description":79,"name":1029,"public":78,"returnType":447,"params":1030},"_get_visible_slot_ids",[],{"description":1032,"name":1033,"public":78,"returnType":162,"params":1034},"Will transfer the item to the remote inventory","_on_inventory_controller_transfer_item_requested",[1035],{"name":317,"type":218},{"description":79,"name":1037,"public":78,"returnType":162,"params":1038},"_on_gui_input_slot",[1039],{"name":1040,"type":1041},"event_args","GGInventoryEventArgs",{"description":79,"name":1043,"public":78,"returnType":162,"params":1044},"_on_mouse_entered_slot",[1045],{"name":1040,"type":1041},{"description":79,"name":1047,"public":78,"returnType":162,"params":1048},"_on_mouse_exited_slot",[1049],{"name":1040,"type":1041},{"description":79,"name":1051,"public":78,"returnType":162,"params":1052},"_on_focus_entered_slot",[1053],{"name":1040,"type":1041},{"description":79,"name":1055,"public":78,"returnType":162,"params":1056},"_on_focus_exited_slot",[1057],{"name":1040,"type":1041},{"description":79,"name":1059,"public":78,"returnType":162,"params":1060},"_on_inventory_resized",[1061],{"name":1062,"type":126},"slot_count",[1064,1067,1070,1075,1080,1086,1091,1095,1098,1102,1105,1107,1112,1117,1122,1127,1132,1137,1141,1145,1150,1153],{"name":267,"description":1065,"type":245,"setter":1066,"getter":79,"public":88},"Specify the inventory node this UI should use","@inventory_setter",{"name":1068,"description":1069,"type":245,"setter":79,"getter":79,"public":88},"remote_inventory","If provided, items can be transferred via the [member GGInventory.transfer_strategy].",{"name":1071,"description":1072,"type":105,"setter":1073,"getter":1074,"public":88},"search","The search string used to filter and narrow down which inventory items are shown.","@search_setter","@search_getter",{"@enum":1076,"name":1077,"description":1078,"type":126,"setter":1079,"getter":79,"default":127,"public":88},"GGInventoryUI.Views","view","Determines which view to display the inventory in.","@view_setter",{"name":1081,"description":1082,"type":1083,"setter":1084,"getter":79,"default":1085,"public":88},"slot_scene","The scene responsible for displaying an inventory item.","PackedScene","@slot_scene_setter","\u003CObject>",{"name":1087,"description":1088,"type":1089,"setter":1090,"getter":79,"public":88},"slot_size","Sets the size for each slot.","Vector2","@slot_size_setter",{"name":1092,"description":1093,"type":97,"setter":1094,"getter":79,"default":767,"public":88},"allow_slot_focus","Determines whether inventory item slots can receive focus.","@allow_slot_focus_setter",{"name":1096,"description":1097,"type":1083,"setter":79,"getter":79,"default":1085,"public":88},"list_item_scene","The scene used for each list item when the inventory is in list [member view].",{"name":1099,"description":1100,"type":126,"setter":1101,"getter":79,"default":184,"public":88},"grid_columns","Specifies how many columns the [member grid_container] should have.","@grid_columns_setter",{"@enum":1103,"name":1104,"type":126,"setter":79,"getter":79,"default":127,"public":88},"ScrollContainer.ScrollMode","scroll_container_horizontal_mode",{"@enum":1103,"name":1106,"type":126,"setter":79,"getter":79,"default":184,"public":88},"scroll_container_vertical_mode",{"name":1108,"description":1109,"type":1089,"setter":1110,"getter":79,"default":1111,"public":88},"scroll_container_custom_minimum_size","Sets the [member ScrollContainer.custom_minimum_size] for all [Container]s listed in [member scroll_containers].","@scroll_container_custom_minimum_size_setter","Vector2(0, 0)",{"name":1113,"description":1114,"type":1115,"setter":1116,"getter":79,"public":88},"action_strategy","Handles the user input for each slot.","GGInventoryActionStrategy","@action_strategy_setter",{"name":1118,"description":1119,"type":1120,"setter":1121,"getter":79,"public":88},"dnd_strategy","Specifies the Drag-and-Drop handling implementation","GGInventoryDndStrategy","@dnd_strategy_setter",{"name":1123,"description":1124,"type":1125,"setter":1126,"getter":79,"public":88},"split_strategy","Specifies the Split-Item handling implementation","GGInventorySplitStrategy","@split_strategy_setter",{"name":1128,"description":1129,"type":1130,"setter":1131,"getter":79,"public":88},"search_strategy","Specifies the Search/filtering implementation","GGInventorySearchStrategy","@search_strategy_setter",{"name":1133,"description":1134,"type":1135,"setter":1136,"getter":79,"public":88},"inventory_controller","The controller that handles user input and interacts with the inventory.","GGInventoryController","@inventory_controller_setter",{"name":1138,"description":1139,"type":1140,"setter":79,"getter":79,"public":88},"grid_container","Defined so that the [member grid_columns] property can configure the [member GridContainer.columns].","GridContainer",{"name":1142,"description":1143,"type":1144,"setter":79,"getter":79,"default":227,"public":88},"scroll_containers","The [ScrollContainer]s for the different item presentations.","ScrollContainer[]",{"name":1146,"description":1147,"type":1148,"setter":1149,"getter":79,"public":88},"tab_container","Switches between different views when [member view] is updated.","TabContainer","@tab_container_setter",{"name":1151,"description":1152,"type":440,"setter":79,"getter":79,"default":112,"public":88},"default_focus","Used by [GGFocusControl] to determine which element should be focused.",{"name":443,"description":1154,"type":126,"setter":1155,"getter":79,"default":127,"public":88},"Represents a [GGEntityAccessManager] context.","@context_id_setter",[1157,1162,1167,1172,1177],{"description":1158,"name":1159,"params":1160},"Emitted for each slot's [signal Control.gui_input] signal.","gui_input_slot",[1161],{"name":1040,"type":1041},{"description":1163,"name":1164,"params":1165},"Emitted for each slot's [signal Control.focus_entered] signal.","focus_entered_slot",[1166],{"name":1040,"type":1041},{"description":1168,"name":1169,"params":1170},"Emitted for each slot's [signal Control.focus_exited] signal.","focus_exited_slot",[1171],{"name":1040,"type":1041},{"description":1173,"name":1174,"params":1175},"Emitted for each slot's [signal Control.mouse_entered] signal.","mouse_entered_slot",[1176],{"name":1040,"type":1041},{"description":1178,"name":1179,"params":1180},"Emitted for each slot's [signal Control.mouse_exited] signal.","mouse_exited_slot",[1181],{"name":1040,"type":1041},[1183,1187,1190],{"#text":1184,"@name":1185,"@value":127,"@enum":1186},"Uses a [FlowContainer] to display items in a responsive grid.","FLOW_VIEW","Views",{"#text":1188,"@name":1189,"@value":184,"@enum":1186},"Uses a [VBoxContainer] to display a list of item.","LIST_VIEW",{"#text":1191,"@name":1192,"@value":1193,"@enum":1186},"Uses a [GridContainer] to display item in a grid. The [member grid_columns] property determines the number of columns.","GRID_VIEW","2","PanelContainer","GGInventoryUI","40.reference/2.0/gg_inventory/GGInventoryUI.xml","40.reference/2.0/gg_inventory/GGInventoryUI",{"_path":1199,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":1200,"navigation":78,"addon":77,"version":81,"brief_description":1201,"description":1202,"tutorials":79,"methods":1203,"members":1308,"signals":1327,"constants":1367,"inherits":440,"name":1135,"title":1135,"_source":141,"_file":1368,"_stem":1369,"_extension":144},"/reference/2.0/gg_inventory/gginventorycontroller","content:40.reference:2.0:gg_inventory:GGInventoryController.xml","Displays inventory slots and coordinates player input.","The controller implements functionality using an [url=https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller]MVC[/url]-style approach.  The controller reacts to inventory changes (the model) to update the item slots (the view) and handles input events from the slots to call inventory functionality. [br][br]User input is handled by the [member action_strategy] and [member dnd_strategy]. [br][br]This class implements (abstract) base functionality and should not be used directly. The [GGInventoryManagedSlotsController] manages slots ([Control]s), while the [GGInventoryAssignedSlotsController] updates slots managed externally.",[1204,1206,1210,1214,1218,1222,1226,1232,1236,1241,1244,1247,1251,1254,1258,1261,1264,1267,1271,1275,1283,1287,1291,1295,1299,1304],{"description":79,"name":293,"public":78,"returnType":162,"params":1205},[],{"description":1207,"name":631,"public":88,"returnType":162,"params":1208},"Uses the item in [param slot_id].",[1209],{"name":317,"type":126},{"description":1211,"name":648,"public":88,"returnType":162,"params":1212},"Drops the item in [param slot_id].",[1213],{"name":317,"type":126},{"description":1215,"name":270,"public":88,"returnType":162,"params":1216},"Splits the item in [param slot_id]. [br][br]If a [member split_strategy] is defined, it'll handle splitting the item. Otherwise, the [signal split_item_requested] signal is emitted.",[1217],{"name":317,"type":126},{"description":79,"name":1219,"public":88,"returnType":162,"params":1220},"transfer_item",[1221],{"name":317,"type":126},{"description":1223,"name":314,"public":88,"returnType":89,"params":1224},"Retrieves the [GGItemData] from the [param slot_id].",[1225],{"name":317,"type":126},{"description":1227,"name":1228,"public":88,"returnType":126,"params":1229},"Retrieves the slot ID from the [param slot] node. [br][br][b]Note: This abstract class only returns [code]-1[/code].[/b]","get_slot_id",[1230],{"name":1231,"type":1002},"slot",{"description":1233,"name":1001,"public":88,"returnType":1002,"params":1234},"Retrieves the slot by its [param slot_id]. [br][br][b]Note: This abstract class only returns [code]null[/code].[/b]",[1235],{"name":317,"type":126},{"description":1237,"name":1238,"public":88,"returnType":1239,"params":1240},"Retrieves all slots. [br][br][b]Note: This abstract class only returns empty array.[/b]","get_slots","Control[]",[],{"description":1242,"name":997,"public":88,"returnType":162,"params":1243},"Refreshes all item slots.",[],{"description":79,"name":1012,"public":78,"returnType":162,"params":1245},[1246],{"name":170,"type":245},{"description":79,"name":1248,"public":78,"returnType":162,"params":1249},"_set_dnd_strategy",[1250],{"name":170,"type":1120},{"description":79,"name":1252,"public":78,"returnType":162,"params":1253},"_apply_slot_filter",[],{"description":79,"name":1255,"public":78,"returnType":162,"params":1256},"_refresh_slot_ui",[1257],{"name":317,"type":126},{"description":79,"name":706,"public":78,"returnType":162,"params":1259},[1260],{"name":556,"type":447},{"description":79,"name":1262,"public":78,"returnType":162,"params":1263},"_on_inventory_destroyed",[],{"description":79,"name":1059,"public":78,"returnType":162,"params":1265},[1266],{"name":1062,"type":126},{"description":79,"name":1268,"public":78,"returnType":162,"params":1269},"_connect_slot_signals",[1270],{"name":1231,"type":1002},{"description":79,"name":1272,"public":78,"returnType":1041,"params":1273},"_make_event_args",[1274],{"name":1231,"type":1002},{"description":1276,"name":1277,"public":78,"returnType":162,"params":1278},"Maps inputs into specific actions","_on_slot_gui_input",[1279,1282],{"name":1280,"type":1281},"event","InputEvent",{"name":1231,"type":1002},{"description":79,"name":1284,"public":78,"returnType":162,"params":1285},"_on_slot_mouse_entered",[1286],{"name":1231,"type":1002},{"description":79,"name":1288,"public":78,"returnType":162,"params":1289},"_on_slot_mouse_exited",[1290],{"name":1231,"type":1002},{"description":79,"name":1292,"public":78,"returnType":162,"params":1293},"_on_slot_focus_entered",[1294],{"name":1231,"type":1002},{"description":79,"name":1296,"public":78,"returnType":162,"params":1297},"_on_slot_focus_exited",[1298],{"name":1231,"type":1002},{"description":79,"name":1300,"public":78,"returnType":162,"params":1301},"_on_dragging",[1302],{"name":165,"type":1303},"GGDragonDropData",{"description":79,"name":1305,"public":78,"returnType":162,"params":1306},"_on_dropped",[1307],{"name":165,"type":1303},[1309,1311,1313,1315,1317,1319,1321,1325],{"name":267,"description":1310,"type":245,"setter":1012,"getter":79,"default":112,"public":88},"The Inventory we're displaying the contents of",{"name":1113,"description":1312,"type":1115,"setter":79,"getter":79,"public":88},"The action strategy handles input, mouse, and focus events from slots.",{"name":1118,"description":1314,"type":1120,"setter":1248,"getter":79,"public":88},"The drag-and-drop handling is implemented as strategy to allow for game-specific configuration of the behavior.",{"name":1123,"description":1316,"type":1125,"setter":79,"getter":79,"public":88},"Determines how a request to split an item should be interpreted.",{"name":1128,"description":1318,"type":1130,"setter":79,"getter":79,"public":88},"the filter strategy",{"name":1071,"description":1320,"type":105,"setter":1073,"getter":79,"default":116,"public":88},"Filters the items according to the [member search_strategy].",{"name":1322,"description":1323,"type":1324,"setter":79,"getter":79,"public":88},"dragon_drop","Handles the drag-and-drop interactions with the inventory slots.","GGDragonDrop",{"name":443,"description":1326,"type":126,"setter":79,"getter":79,"default":127,"public":88},"The context that's interacting with the inventory.",[1328,1332,1336,1339,1342,1345,1348,1351,1355,1359,1363],{"description":1329,"name":825,"params":1330},"Emitted when the [member inventory] is resized.",[1331],{"name":1062,"type":126},{"description":1333,"name":1334,"params":1335},"Emitted when the [member inventory] is destroyed.","inventory_destroyed",[],{"description":79,"name":1159,"params":1337},[1338],{"name":1040,"type":1041},{"description":79,"name":1174,"params":1340},[1341],{"name":1040,"type":1041},{"description":79,"name":1179,"params":1343},[1344],{"name":1040,"type":1041},{"description":79,"name":1164,"params":1346},[1347],{"name":1040,"type":1041},{"description":79,"name":1169,"params":1349},[1350],{"name":1040,"type":1041},{"description":79,"name":1352,"params":1353},"item_dragged",[1354],{"name":1040,"type":1041},{"description":79,"name":1356,"params":1357},"item_dropped",[1358],{"name":1040,"type":1041},{"description":79,"name":1360,"params":1361},"transfer_item_requested",[1362],{"name":317,"type":126},{"description":79,"name":1364,"params":1365},"split_item_requested",[1366],{"name":317,"type":126},[],"40.reference/2.0/gg_inventory/GGInventoryController.xml","40.reference/2.0/gg_inventory/GGInventoryController",{"_path":1371,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":1372,"navigation":78,"addon":77,"version":81,"brief_description":1373,"description":1374,"tutorials":79,"methods":1375,"signals":1407,"constants":1408,"members":1409,"inherits":139,"name":1115,"title":1115,"_source":141,"_file":1410,"_stem":1411,"_extension":144},"/reference/2.0/gg_inventory/gginventoryactionstrategy","content:40.reference:2.0:gg_inventory:GGInventoryActionStrategy.xml","Responsible for user input handling delegated from the [GGInventoryController].","Handles mouse, focus, and GUI [InputEvent]s for inventory slots which are delegated to this class by the [GGInventoryController]. This separation of concerns allows the [GGInventorySlotItemUI] to focus exclusively on displaying items, while an action strategy handles all the player input.[br][br][b]Note:[/b] This class only defines the methods, effectively acting as an interface. Please see the [GGInventoryActionStrategyDefault] which implements the default action strategy.",[1376,1383,1389,1395,1401],{"description":1377,"name":1378,"public":88,"returnType":162,"params":1379},"Called by the [param controller] for each [InputEvent] the slot described by [param event_args] receives. The inventory [param slot] and [param item] are provided for convenience. [br][br]If the [param event] is handled, use [method Viewport.set_input_as_handled] to mark it as such.","on_slot_gui_input",[1380,1382],{"name":1381,"type":1135},"controller",{"name":1040,"type":1041},{"description":1384,"name":1385,"public":88,"returnType":162,"params":1386},"Called when an inventory slot described by [param event_args] is focused.","on_focus_entered",[1387,1388],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":1390,"name":1391,"public":88,"returnType":162,"params":1392},"Called when an inventory slot described by [param event_args] loses focus.","on_focus_exited",[1393,1394],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":1396,"name":1397,"public":88,"returnType":162,"params":1398},"Called when the mouse hovers over the inventory slot described by [param event_args].","on_mouse_entered",[1399,1400],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":1402,"name":1403,"public":88,"returnType":162,"params":1404},"Called when the mouse no longer hovers over the inventory slot described by [param event_args].","on_mouse_exited",[1405,1406],{"name":1381,"type":1135},{"name":1040,"type":1041},[],[],[],"40.reference/2.0/gg_inventory/GGInventoryActionStrategy.xml","40.reference/2.0/gg_inventory/GGInventoryActionStrategy",{"_path":1413,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":1414,"navigation":78,"addon":77,"version":81,"brief_description":1415,"description":1416,"tutorials":79,"methods":1417,"members":1446,"constants":1483,"signals":1501,"inherits":1115,"name":1502,"title":1502,"_source":141,"_file":1503,"_stem":1504,"_extension":144},"/reference/2.0/gg_inventory/gginventoryactionstrategydefault","content:40.reference:2.0:gg_inventory:GGInventoryActionStrategyDefault.xml","Default implementation of handling player input when interacting with inventory slots.","The default action strategy handles user input for the [GGInventoryController]. It defines configurable settings for mouse input and other actions. You can define what actions left click, double-click, right-click, and middle-click perform, and also whether [member focus_follows_mouse]. [br][br]An action map determines which actions to use for using, dropping, transferring, splitting, and dragging items. These actions should match the actions created in the [url=https://docs.godotengine.org/en/4.3/getting_started/first_3d_game/02.player_input.html#creating-input-actions]Project Settings Input Map[/url].",[1418,1423,1427,1431,1435,1439],{"description":1419,"name":1378,"public":88,"returnType":162,"params":1420},"Called by the [param controller] for each [InputEvent] the slot described by [param event_args] receives. If [member set_input_as_handled] is enabled, [method Viewport.set_input_as_handled] is called to mark the event as handled.",[1421,1422],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":1384,"name":1385,"public":88,"returnType":162,"params":1424},[1425,1426],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":1390,"name":1391,"public":88,"returnType":162,"params":1428},[1429,1430],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":1396,"name":1397,"public":88,"returnType":162,"params":1432},[1433,1434],{"name":1381,"type":1135},{"name":1040,"type":1041},{"description":79,"name":1436,"public":78,"returnType":126,"params":1437},"_event_to_action",[1438],{"name":1280,"type":1281},{"description":79,"name":1440,"public":78,"returnType":162,"params":1441},"_perform_action",[1442,1443,1445],{"name":1381,"type":1135},{"name":1444,"type":126},"action",{"name":317,"type":126},[1447,1451,1454,1457,1461,1465,1469,1473,1477,1480],{"@enum":1448,"name":1449,"description":1450,"type":126,"setter":79,"getter":79,"default":127,"public":88},"GGInventoryActionStrategyDefault.Actions","mouse_left_click","The action to taken when left-clicking the mouse button.",{"@enum":1448,"name":1452,"description":1453,"type":126,"setter":79,"getter":79,"default":184,"public":88},"mouse_double_click","The action to take when double clicking the mouse button.",{"@enum":1448,"name":1455,"description":1456,"type":126,"setter":79,"getter":79,"default":1193,"public":88},"mouse_right_click","The action to take when the right mouse button is pressed.",{"@enum":1448,"name":1458,"description":1459,"type":126,"setter":79,"getter":79,"default":1460,"public":88},"mouse_middle_click","The action to take when the middle mouse button is pressed.","4",{"name":1462,"description":1463,"type":105,"setter":79,"getter":79,"default":1464,"public":88},"action_use_item","The [InputMap] action for using an inventory item.","\"inventory_use_item\"",{"name":1466,"description":1467,"type":105,"setter":79,"getter":79,"default":1468,"public":88},"action_drop_item","The [InputMap] action for dropping an inventory item.","\"inventory_drop_item\"",{"name":1470,"description":1471,"type":105,"setter":79,"getter":79,"default":1472,"public":88},"action_transfer_item","The [InputMap] action for transferring an inventory item to another inventory.","\"inventory_transfer_item\"",{"name":1474,"description":1475,"type":105,"setter":79,"getter":79,"default":1476,"public":88},"action_split_item","The [InputMap] action for splitting an inventory item.","\"inventory_split_item\"",{"name":1478,"description":1479,"type":97,"setter":79,"getter":79,"default":122,"public":88},"focus_follows_mouse","Automatically focuses the slot the mouse is hovering over.",{"name":1481,"description":1482,"type":97,"setter":79,"getter":79,"default":767,"public":88},"set_input_as_handled","When enabled, calls [method Viewport.set_input_as_handled] to prevent [InputEvent] from propagating further.",[1484,1488,1491,1494,1498],{"#text":1485,"@name":1486,"@value":127,"@enum":1487},"Take no action.","DO_NOTHING","Actions",{"#text":1489,"@name":1490,"@value":184,"@enum":1487},"Tells the [GGInventoryController] to use an item.","USE_ITEM",{"#text":1492,"@name":1493,"@value":1193,"@enum":1487},"Tells the [GGInventoryController] to drop the item.","DROP_ITEM",{"#text":1495,"@name":1496,"@value":1497,"@enum":1487},"Tells the [GGInventoryController] to transfer the item.","TRANSFER_ITEM","3",{"#text":1499,"@name":1500,"@value":1460,"@enum":1487},"Tells the [GGInventoryController] to split an item stack in half.","SPLIT_ITEM",[],"GGInventoryActionStrategyDefault","40.reference/2.0/gg_inventory/GGInventoryActionStrategyDefault.xml","40.reference/2.0/gg_inventory/GGInventoryActionStrategyDefault",{"_path":1506,"_dir":1507,"_draft":78,"_partial":78,"_locale":79,"_id":1508,"navigation":78,"addon":1507,"version":81,"brief_description":1509,"description":79,"tutorials":79,"methods":1510,"members":1587,"signals":1601,"constants":1610,"inherits":440,"name":1324,"title":1324,"_source":141,"_file":1611,"_stem":1612,"_extension":144},"/reference/2.0/gg_dragondrop/ggdragondrop","gg_dragondrop","content:40.reference:2.0:gg_dragondrop:GGDragonDrop.xml","Provides an abstraction for Drag-and-Drop operations.",[1511,1513,1519,1525,1530,1537,1542,1547,1551,1557,1564,1571,1577,1583],{"description":79,"name":293,"public":78,"returnType":162,"params":1512},[],{"description":1514,"name":1515,"public":78,"returnType":162,"params":1516},"When dragging ends, runs any callbacks that were added with [method _add_cleanup_callback].","_notification",[1517],{"name":1518,"type":126},"what",{"description":1520,"name":1521,"public":88,"returnType":162,"params":1522},"Adds drag-and-drop capabilities to the [param control]. The behavior is controlled by the [member allow_drag], [member use_force_drag], and [member allow_drop] properties.","add_dnd",[1523],{"name":1524,"type":1002},"control",{"description":1526,"name":1527,"public":88,"returnType":162,"params":1528},"Removes drag-and-drop capabilities from the [param control].  Note: It's currently not possible to \"unset\" drag forwarding configured through [method Control.set_drag_forwarding]. This means that the [param control]'s own [method Control._get_drag_data], [method Control._can_drop_data], and [method Control._drop_data] methods won't be invoked even after calling this method.","remove_dnd",[1529],{"name":1524,"type":1002},{"description":79,"name":1531,"public":88,"returnType":162,"params":1532},"force_drag",[1533,1534,1536],{"name":1524,"type":1002},{"name":1535,"type":1089},"at_position",{"name":165,"type":1303},{"description":1538,"name":1539,"public":88,"returnType":1540,"params":1541},"Retrieves an instance of the [GGDragonHelper] singleton or null, if the helper class cannot be found.","get_helper","GGDragonHelper",[],{"description":1543,"name":1544,"public":78,"returnType":162,"params":1545},"Emits the [signal dragging] signal when dragging starts. Also","_notify_dragging",[1546],{"name":165,"type":1303},{"description":79,"name":1548,"public":78,"returnType":162,"params":1549},"_notify_dropped",[1550],{"name":165,"type":1303},{"description":1552,"name":1553,"public":78,"returnType":218,"params":1554},"The forwarded [method Control._get_drag_data] call.","_handle_get_drag_data",[1555,1556],{"name":1535,"type":1089},{"name":1524,"type":1002},{"description":1558,"name":1559,"public":78,"returnType":97,"params":1560},"The forwarded [method Control._can_drop_data] call.","_handle_can_drop_data",[1561,1562,1563],{"name":1535,"type":1089},{"name":165,"type":218},{"name":1524,"type":1002},{"description":1565,"name":1566,"public":78,"returnType":162,"params":1567},"The forwarded [method Control._drop_data] call.","_handle_drop_data",[1568,1569,1570],{"name":1535,"type":1089},{"name":165,"type":218},{"name":1524,"type":1002},{"description":1572,"name":1573,"public":78,"returnType":162,"params":1574},"Handles the [param control]'s [signal Control.gui_input] signal to handle force-dragging.","_on_gui_input",[1575,1576],{"name":1280,"type":1281},{"name":1524,"type":1002},{"description":1578,"name":1579,"public":78,"returnType":162,"params":1580},"When dragging, the [member strategy] can register a [param callable], which will be cleaned up when dragging ends.","_add_cleanup_callback",[1581],{"name":1582,"type":696},"callable",{"description":1584,"name":1585,"public":78,"returnType":162,"params":1586},"Runs any registered callbacks when dragging ends.","_run_cleanup_callbacks",[],[1588,1590,1593,1596,1599],{"name":1524,"description":1589,"type":1002,"setter":79,"getter":79,"public":88},"The [Control] to handle drag and drop for (optional). If you want to manage which control drag-and-drop support is added to at runtime, use [method add_dnd] instead.",{"name":1591,"type":1592,"setter":79,"getter":79,"public":88},"strategy","GGDragonDropStrategy",{"name":1594,"type":105,"setter":79,"getter":79,"default":1595,"public":88},"helper_group","\"gg_dragon_helper\"",{"name":1597,"type":1598,"setter":79,"getter":79,"default":227,"public":78},"_cleanup_callbacks","Callable[]",{"name":1600,"type":97,"setter":79,"getter":79,"default":122,"public":78},"_is_dragging",[1602,1606],{"description":79,"name":1603,"params":1604},"dragging",[1605],{"name":165,"type":1303},{"description":79,"name":1607,"params":1608},"dropped",[1609],{"name":165,"type":1303},[],"40.reference/2.0/gg_dragondrop/GGDragonDrop.xml","40.reference/2.0/gg_dragondrop/GGDragonDrop",{"_path":1614,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":1615,"navigation":78,"addon":77,"version":81,"brief_description":1616,"description":1617,"tutorials":79,"methods":1618,"members":1661,"signals":1666,"constants":1667,"inherits":1592,"name":1120,"title":1120,"_source":141,"_file":1668,"_stem":1669,"_extension":144},"/reference/2.0/gg_inventory/gginventorydndstrategy","content:40.reference:2.0:gg_inventory:GGInventoryDndStrategy.xml","Responsible for handling the Drag and Drop behavior for the [GGInventorySlotItemContainer] and [GGInventorySlotItemUI] nodes.","Items can be dragged and dropped directly onto a slot.  This strategy expects the [GGDragonDrop] to be a direct child node of a [GGInventoryController].",[1619,1628,1636,1643,1649,1653,1656],{"description":1620,"name":1621,"public":88,"returnType":97,"params":1622},"Determines whether the [param control] can receive dropped data.","can_drop_data",[1623,1625,1626,1627],{"name":1624,"type":1324},"component",{"name":1524,"type":1002},{"name":1535,"type":1089},{"name":165,"type":1303},{"description":1629,"name":1630,"public":88,"returnType":162,"params":1631},"Called when the player drops data onto the [param control].","drop_data",[1632,1633,1634,1635],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"name":165,"type":1303},{"description":79,"name":1637,"public":78,"returnType":162,"params":1638},"_apply_modifier_key",[1639,1640,1641,1642],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1280,"type":1281},{"name":165,"type":1303},{"description":79,"name":1644,"public":78,"returnType":1303,"params":1645},"_make_drag_data",[1646,1647,1648],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"description":79,"name":1650,"public":78,"returnType":97,"params":1651},"_is_control_draggable",[1652],{"name":1524,"type":1002},{"description":79,"name":706,"public":78,"returnType":162,"params":1654},[1655],{"name":556,"type":447},{"description":1657,"name":1658,"public":88,"returnType":1002,"params":1659},"Returns a control to be used for the drag preview.","get_preview",[1660],{"name":165,"type":1303},[1662],{"name":1663,"description":1664,"type":105,"setter":79,"getter":79,"default":1665,"public":88},"draggable_group_name","Any controls in this group are considered draggable.","\"gg_draggable\"",[],[],"40.reference/2.0/gg_inventory/GGInventoryDndStrategy.xml","40.reference/2.0/gg_inventory/GGInventoryDndStrategy",{"_path":1671,"_dir":1507,"_draft":78,"_partial":78,"_locale":79,"_id":1672,"navigation":78,"addon":1507,"version":81,"brief_description":1673,"description":1674,"tutorials":79,"methods":1675,"members":1768,"signals":1788,"constants":1789,"inherits":139,"name":1592,"title":1592,"_source":141,"_file":1790,"_stem":1791,"_extension":144},"/reference/2.0/gg_dragondrop/ggdragondropstrategy","content:40.reference:2.0:gg_dragondrop:GGDragonDropStrategy.xml","Encapsulates the drag-and-drop configuration and logic.","Provides base functionality for drag-and-drop behavior. [br][br]Extend this class with your custom logic.",[1676,1682,1688,1694,1701,1709,1715,1719,1726,1729,1734,1741,1748,1754,1759,1765],{"description":79,"name":1677,"public":88,"returnType":1303,"params":1678},"get_drag_data",[1679,1680,1681],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"description":79,"name":1621,"public":88,"returnType":97,"params":1683},[1684,1685,1686,1687],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"name":165,"type":1303},{"description":79,"name":1630,"public":88,"returnType":162,"params":1689},[1690,1691,1692,1693],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"name":165,"type":1303},{"description":1695,"name":1696,"public":88,"returnType":162,"params":1697},"Process the [param control]'s [signal Control.gui_input] signal to handle force-dragging.","gui_input",[1698,1699,1700],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1280,"type":1281},{"description":1702,"name":1703,"public":88,"returnType":162,"params":1704},"Invoked from the [GGDragonHelper] to support right-click to cancel drag and modifier buttons. Override the [method _apply_modifier_key] method in your strategy.","handle_modifier",[1705,1706,1707,1708],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1280,"type":1281},{"name":165,"type":1303},{"description":79,"name":1710,"public":78,"returnType":162,"params":1711},"_force_drag_support",[1712,1713,1714],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1280,"type":1281},{"description":79,"name":1716,"public":78,"returnType":162,"params":1717},"_force_drop_support",[1718],{"name":165,"type":1303},{"description":79,"name":1720,"public":78,"returnType":1303,"params":1721},"_force_drag",[1722,1723,1724,1725],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"name":165,"type":1303},{"description":79,"name":1727,"public":78,"returnType":97,"params":1728},"_cancel_drag",[],{"description":79,"name":1730,"public":78,"returnType":97,"params":1731},"_right_click_cancel_drag",[1732,1733],{"name":1624,"type":1324},{"name":1280,"type":1281},{"description":79,"name":1735,"public":78,"returnType":97,"params":1736},"_can_drag_data",[1737,1739],{"name":1738,"type":1002},"_control",{"name":1740,"type":1089},"_at_position",{"description":79,"name":1742,"public":78,"returnType":97,"params":1743},"_can_drop_data",[1744,1745,1746],{"name":1738,"type":1002},{"name":1740,"type":1089},{"name":1747,"type":1303},"_data",{"description":79,"name":1637,"public":78,"returnType":162,"params":1749},[1750,1751,1752,1753],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1280,"type":1281},{"name":165,"type":1303},{"description":79,"name":1644,"public":78,"returnType":1303,"params":1755},[1756,1757,1758],{"name":1624,"type":1324},{"name":1524,"type":1002},{"name":1535,"type":1089},{"description":1760,"name":1761,"public":88,"returnType":162,"params":1762},"Update the preview. Should be called after a modifier updates the [param data] (e.g. via [method _apply_modifier_key]).","update_preview",[1763,1764],{"name":1524,"type":1002},{"name":165,"type":1303},{"description":79,"name":1658,"public":88,"returnType":1002,"params":1766},[1767],{"name":165,"type":1303},[1769,1772,1775,1778,1782,1785],{"name":1770,"description":1771,"type":97,"setter":79,"getter":79,"default":767,"public":88},"allow_drag","Whether the [member control] allows dragging.",{"name":1773,"description":1774,"type":97,"setter":79,"getter":79,"default":122,"public":88},"use_force_drag","When [code]true[/code] allows for simple left-clicks to start dragging.",{"name":1776,"description":1777,"type":97,"setter":79,"getter":79,"default":767,"public":88},"allow_drop","Whether the [member control] allows dropping.",{"name":1779,"description":1780,"type":1781,"setter":79,"getter":79,"default":1085,"public":88},"drag_data_script","The script to use when creating drag data in [method _make_drag_data].","Script",{"name":1783,"description":1784,"type":1083,"setter":79,"getter":79,"default":1085,"public":88},"preview_scene","The preview scene used while dragging. Assembled and populated in [method get_preview].",{"name":1786,"description":1787,"type":97,"setter":79,"getter":79,"default":122,"public":78},"_prevent_pickup_after_force_drop","(Internal) Flag to prevent immediate force_drag after a drop. This is because the drop occurs on pressed, while the pickup occurs during release. That's a current limitation of Godot's [method Control.force_drag] implementation. It's being addressed in [url=https://github.com/godotengine/godot/issues/95880]Godot issue #95880[/url].",[],[],"40.reference/2.0/gg_dragondrop/GGDragonDropStrategy.xml","40.reference/2.0/gg_dragondrop/GGDragonDropStrategy",{"_path":1793,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":1794,"navigation":78,"addon":77,"version":81,"brief_description":1795,"description":1796,"tutorials":79,"methods":1797,"signals":1823,"constants":1824,"members":1825,"inherits":139,"name":797,"title":797,"_source":141,"_file":1826,"_stem":1827,"_extension":144},"/reference/2.0/gg_inventory/gginventorytransferstrategy","content:40.reference:2.0:gg_inventory:GGInventoryTransferStrategy.xml","Provides the Inventory Transfer Strategy Interface for transferring items between inventories.","This interface is used by the [GGInventory] method counterparts. This class does not provide an implementation. Please see the [GGInventoryTransferStrategySimple] and [GGInventoryTransferStrategyStacking] classes.",[1798,1806,1815],{"description":1799,"name":576,"public":88,"returnType":126,"params":1800},"Transfer an item to another inventory. Returns the quantity transferred.",[1801,1802,1803,1804,1805],{"name":244,"type":245},{"name":329,"type":126},{"name":247,"type":245},{"name":182,"type":126},{"name":454,"type":440},{"description":1807,"name":599,"public":88,"returnType":126,"params":1808},"Transfers an item to a specific slot in an inventory. Returns the quantity transferred.",[1809,1810,1811,1812,1813,1814],{"name":244,"type":245},{"name":329,"type":126},{"name":247,"type":245},{"name":260,"type":126},{"name":182,"type":126},{"name":454,"type":440},{"description":79,"name":1816,"public":78,"returnType":97,"params":1817},"_swap_items",[1818,1819,1820,1821,1822],{"name":244,"type":245},{"name":329,"type":126},{"name":247,"type":245},{"name":260,"type":126},{"name":454,"type":440},[],[],[],"40.reference/2.0/gg_inventory/GGInventoryTransferStrategy.xml","40.reference/2.0/gg_inventory/GGInventoryTransferStrategy",{"_path":1829,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":1830,"navigation":78,"addon":77,"version":81,"brief_description":1831,"description":1832,"tutorials":79,"methods":1833,"members":1845,"signals":1849,"constants":1850,"inherits":139,"name":1130,"title":1130,"_source":141,"_file":1851,"_stem":1852,"_extension":144},"/reference/2.0/gg_inventory/gginventorysearchstrategy","content:40.reference:2.0:gg_inventory:GGInventorySearchStrategy.xml","Implements the search behavior for the [GGInventoryController].","The search strategy is invoked by the [GGInventoryController] to determine whether an item slot should be visible.",[1834,1840],{"description":1835,"name":1836,"public":88,"returnType":97,"params":1837},"Returns whether the [param item] should be visible in the UI.","matches",[1838,1839],{"name":1381,"type":1135},{"name":274,"type":89},{"description":79,"name":1841,"public":78,"returnType":97,"params":1842},"_item_matches_search",[1843,1844],{"name":274,"type":89},{"name":1071,"type":105},[1846],{"name":1847,"description":1848,"type":97,"setter":79,"getter":79,"default":122,"public":88},"hide_empty_slots","Determines whether empty inventory slots should always be hidden.",[],[],"40.reference/2.0/gg_inventory/GGInventorySearchStrategy.xml","40.reference/2.0/gg_inventory/GGInventorySearchStrategy",1743268966464]