[{"data":1,"prerenderedAt":920},["ShallowReactive",2],{"navigation":3,"class-ref-GGInventorySystemFacade":75,"class-ref-GGInventorySystemDialogStrategy":130,"class-ref-GGInventorySystemDialogStrategyDefault":181,"class-ref-GGInventorySystemDialogStrategyUIKit":242,"class-ref-GGInventoryUI":322,"class-ref-GGInventoryUIConfiguration":540,"class-ref-GGEntityAccessManager":601,"class-ref-GGDialogContextHelper":805},[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":115,"constants":119,"signals":124,"inherits":97,"name":125,"title":125,"_source":126,"_file":127,"_stem":128,"_extension":129},"/reference/2.0/gg_inventory/gginventorysystemfacade","gg_inventory",false,"","content:40.reference:2.0:gg_inventory:GGInventorySystemFacade.xml","2.0","Autoload/Singleton interface to the Inventory System.","This class provides access to the inventory system as the [code]GGInventorySystem[/code] autoload/singleton in your Godot project. Internally, the class is named [code]GGInventorySystemFacade[/code] so that links to the built-in documentation can be provided. [br][br][b]Opening Inventories (Browse/transfer modes)[/b] [br][br]Inventories can be opened in two modes: Browse mode and transfer mode. The two methods are [method open_inventory] and [method open_transfer]. They accept (for browse mode) one or (for transfer mode) two entities, which are the characters or objects whose inventories are accessed. [br][br][b]Browse mode[/b] is intended for when the player is accessing their character's own inventory. For example: \n[codeblock]\n# Get a reference to the player's character\nvar character: CharacterBody2D = $PlayerCharacter\n\n# Open the inventory user interface (in browse mode) so the player can interact with it.\nGGInventorySystem.open_inventory(character)\n[/codeblock]\n [b]Transfer mode[/b] is intended for when the player is accessing another character or object's inventory. For example: \n[codeblock]\n# Get a reference to the player's character\nvar character: CharacterBody2D = $PlayerCharacter\n# Get a reference to the object the character is interacting wth\nvar object: StaticBody2D = $StorageBox\n\n# Open the inventory user interface (in transfer mode) so the player can interact with it.\nGGInventorySystem.open_transfer(character, object)\n[/codeblock]\n The inventory system defers the details of how inventories are accessed to the configured [member dialog_strategy]. [br][br]Typically, entities are expected to have an [GGInventory] component, and an [GGEntityAccessManager] component (along with an [GGEntityAccessPolicy]), which the [member entity_resolver_strategy] is responsible for finding.",[85,89,100,106,112],{"description":79,"name":86,"public":78,"returnType":87,"params":88},"_ready","void",[],{"description":90,"name":91,"public":92,"returnType":93,"params":94},"High-level API for a [param character] to open their own inventory.","open_inventory",true,"Control",[95,98],{"name":96,"type":97},"character","Node",{"name":99,"type":97},"object",{"description":101,"name":102,"public":92,"returnType":93,"params":103},"High-level API for a [param character] to open an [param object]'s inventory. Both parameters are expected to be [i]entities[/i].","open_transfer",[104,105],{"name":96,"type":97},{"name":99,"type":97},{"description":79,"name":107,"public":78,"returnType":87,"params":108},"_set_dialog_strategy",[109],{"name":110,"type":111},"value","GGInventorySystemDialogStrategy",{"description":79,"name":113,"public":78,"returnType":87,"params":114},"_load_dialog_strategy",[],[116],{"name":117,"description":118,"type":111,"setter":107,"getter":79,"public":92},"dialog_strategy","The Dialog Strategy is responsible for opening the inventory user interface and all its details. Typically, the strategy verifies the player is allowed access via the [GGEntityAccessManager] and creates the necessary [Control]-based dialogs. The [method open_inventory] and [method open_transfer] methods both defer to this strategy.",[120],{"#text":121,"@name":122,"@value":123},"The [ProjectSettings] name where the [member dialog_strategy] is stored.","PS_DIALOG_STRATEGY","\"inventory_system/config/dialog_strategy\"",[],"GGInventorySystemFacade","content","40.reference/2.0/gg_inventory/GGInventorySystemFacade.xml","40.reference/2.0/gg_inventory/GGInventorySystemFacade","xml",{"_path":131,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":132,"navigation":78,"addon":77,"version":81,"brief_description":133,"description":134,"tutorials":79,"methods":135,"signals":175,"constants":176,"members":177,"inherits":178,"name":111,"title":111,"_source":126,"_file":179,"_stem":180,"_extension":129},"/reference/2.0/gg_inventory/gginventorysystemdialogstrategy","content:40.reference:2.0:gg_inventory:GGInventorySystemDialogStrategy.xml","The Dialog Strategy determines how inventories are presented to players.","When the game wants to present an inventory user interface to the player, it should call [code]GGInventorySystem.open_inventory()[/code] or [code]GGInventorySystem.open_transfer()[/code], which will defer to its configured dialog strategy. [br][br]The dialog strategy is responsible for ensuring the character has access, which typically involves using the [EntityAccessManager], and creating the appropriate [Control]s to present the user interface. [br][br]The default dialog strategy is provided by the [GGInventorySystemDialogStrategyDefault] class.",[136,144,150,157,163,169,172],{"description":137,"name":91,"public":92,"returnType":93,"params":138},"Called when [param inventory_system] should display the inventory of the [param object]. [br][br][b]Note[/b]: This method should not be called directly. Call [code]GGInventorySystem.open_inventory()[/code] instead.",[139,141,143],{"name":140,"type":125},"inventory_system",{"name":142,"type":97},"subject",{"name":99,"type":97},{"description":145,"name":102,"public":92,"returnType":93,"params":146},"Called when [param inventory_system] should display the inventories of the [param subject] and the [param object]. [br][br][b]Note[/b]: This method should not be called directly. Call [code]GGInventorySystem.open_transfer()[/code] instead.",[147,148,149],{"name":140,"type":125},{"name":142,"type":97},{"name":99,"type":97},{"description":151,"name":152,"public":92,"returnType":153,"params":154},"Looks up the name of the [param entity], so that it can be displayed in the inventory user interface as a title above their inventory.","resolve_entity_name","String",[155],{"name":156,"type":97},"entity",{"description":158,"name":159,"public":92,"returnType":160,"params":161},"Looks up the [GGEntityAccessManager] for the [param entity]. The access manager is used to ensure the player is allowed to access the inventory.","resolve_entity_access_manager","GGEntityAccessManager",[162],{"name":156,"type":97},{"description":164,"name":165,"public":92,"returnType":166,"params":167},"Looks up the [GGInventory] component for the [param entity].","resolve_entity_inventory","GGInventory",[168],{"name":156,"type":97},{"description":79,"name":170,"public":78,"returnType":153,"params":171},"_get_strategy_name",[],{"description":79,"name":173,"public":78,"returnType":153,"params":174},"_get_strategy_filename",[],[],[],[],"Resource","40.reference/2.0/gg_inventory/GGInventorySystemDialogStrategy.xml","40.reference/2.0/gg_inventory/GGInventorySystemDialogStrategy",{"_path":182,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":183,"navigation":78,"addon":77,"version":81,"brief_description":184,"description":185,"tutorials":79,"methods":186,"members":209,"constants":229,"signals":238,"inherits":111,"name":239,"title":239,"_source":126,"_file":240,"_stem":241,"_extension":129},"/reference/2.0/gg_inventory/gginventorysystemdialogstrategydefault","content:40.reference:2.0:gg_inventory:GGInventorySystemDialogStrategyDefault.xml","Default, Modal-based Inventory Dialog Strategy.","Provides inventory user interface dialogs where a single modal dialog takes over the whole screen.",[187,193,199,205,207],{"description":188,"name":91,"public":92,"returnType":93,"params":189},"Opens an inventory for browsing when the [param subject] entity interacts with the [param object] entity.",[190,191,192],{"name":140,"type":125},{"name":142,"type":97},{"name":99,"type":97},{"description":194,"name":102,"public":92,"returnType":93,"params":195},"Opens two inventories for transfer when the [param subject] entity interacts with the [param object] entity.",[196,197,198],{"name":140,"type":125},{"name":142,"type":97},{"name":99,"type":97},{"description":79,"name":200,"public":78,"returnType":87,"params":201},"_show_screen",[202,203],{"name":140,"type":125},{"name":204,"type":93},"screen",{"description":79,"name":170,"public":78,"returnType":153,"params":206},[],{"description":79,"name":173,"public":78,"returnType":153,"params":208},[],[210,215,218,222,226],{"name":211,"description":212,"type":213,"setter":79,"getter":79,"default":214,"public":92},"browse_modal_scene","The Browse Modal Scene, which is configured with the [member inventory_ui_configuration].","PackedScene","\u003CObject>",{"name":216,"description":217,"type":213,"setter":79,"getter":79,"default":214,"public":92},"transfer_modal_scene","The Transfer Modal Scene, which is configured with the [member inventory_ui_configuration].",{"name":219,"description":220,"type":221,"setter":79,"getter":79,"public":92},"inventory_ui_configuration","The Inventory UI Configuration encapsulates all details needed to configure the user interfaces specified by the [member browse_modal_scene] and [member transfer_modal_scene] properties.","GGInventoryUIConfiguration",{"name":223,"description":224,"type":153,"setter":79,"getter":79,"default":225,"public":92},"canvas_group_name","The group name of the canvas that will be dynamically created","\"inventory_ui_canvas\"",{"name":227,"type":228,"setter":79,"getter":79,"public":78},"_dialog","GGDialogContextHelper",[230,234],{"#text":231,"@name":232,"@value":233},"The default \"browse inventory\" modal scene","DEFAULT_BROWSE_SCENE","\"res://addons/gg_inventory/ui/inventory_browse_modal.tscn\"",{"#text":235,"@name":236,"@value":237},"The default \"transfer between two inventories\" modal scene","DEFAULT_TRANSFER_SCENE","\"res://addons/gg_inventory/ui/inventory_transfer_modal.tscn\"",[],"GGInventorySystemDialogStrategyDefault","40.reference/2.0/gg_inventory/GGInventorySystemDialogStrategyDefault.xml","40.reference/2.0/gg_inventory/GGInventorySystemDialogStrategyDefault",{"_path":243,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":244,"navigation":78,"addon":77,"version":81,"brief_description":79,"description":79,"tutorials":79,"methods":245,"members":288,"signals":317,"constants":318,"inherits":111,"name":319,"title":319,"_source":126,"_file":320,"_stem":321,"_extension":129},"/reference/2.0/gg_inventory/gginventorysystemdialogstrategyuikit","content:40.reference:2.0:gg_inventory:GGInventorySystemDialogStrategyUIKit.xml",[246,251,256,260,264,267,271,275,278,281,284,286],{"description":188,"name":91,"public":92,"returnType":93,"params":247},[248,249,250],{"name":140,"type":125},{"name":142,"type":97},{"name":99,"type":97},{"description":194,"name":102,"public":92,"returnType":93,"params":252},[253,254,255],{"name":140,"type":125},{"name":142,"type":97},{"name":99,"type":97},{"description":79,"name":257,"public":78,"returnType":97,"params":258},"_get_ui_kit",[259],{"name":140,"type":125},{"description":79,"name":261,"public":78,"returnType":228,"params":262},"_create_context_helper_for_object",[263],{"name":99,"type":97},{"description":79,"name":265,"public":78,"returnType":87,"params":266},"_close_all_dialogs",[],{"description":79,"name":268,"public":78,"returnType":87,"params":269},"_close_dialog",[270],{"name":99,"type":97},{"description":79,"name":272,"public":78,"returnType":87,"params":273},"_on_dialog_destroyed",[274],{"name":99,"type":97},{"description":151,"name":152,"public":92,"returnType":153,"params":276},[277],{"name":156,"type":97},{"description":158,"name":159,"public":92,"returnType":160,"params":279},[280],{"name":156,"type":97},{"description":164,"name":165,"public":92,"returnType":166,"params":282},[283],{"name":156,"type":97},{"description":79,"name":170,"public":78,"returnType":153,"params":285},[],{"description":79,"name":173,"public":78,"returnType":153,"params":287},[],[289,293,296,299,301,305,309,313],{"name":290,"type":291,"setter":79,"getter":79,"default":292,"public":92},"one_dialog_at_a_time","bool","false",{"name":294,"description":295,"type":213,"setter":79,"getter":79,"default":214,"public":92},"browse_ui_scene","The user interface scene when opening an inventory in browse mode.",{"name":297,"description":298,"type":213,"setter":79,"getter":79,"default":214,"public":92},"transfer_ui_scene","The user interface scene when opening an inventory in transfer mode.",{"name":219,"description":300,"type":221,"setter":79,"getter":79,"public":92},"The inventory UI configuration encapsulates all details needed to configure the user interfaces specified by the [member browse_ui_scene] and [member transfer_ui_scene] properties.",{"name":302,"description":303,"type":304,"setter":79,"getter":79,"public":92},"entity_resolver_strategy","Looks up the entity's display name, [GGEntityAccessManager], and [GGInventory] component. This is used by the [member dialog_strategy] to correctly present the inventory user interface to the player.","GGInventoryEntityResolverStrategy",{"name":306,"type":307,"setter":79,"getter":79,"default":308,"public":92},"dialog_size","Vector2","Vector2(600, 400)",{"name":310,"description":311,"type":153,"setter":79,"getter":79,"default":312,"public":92},"ui_kit_global_name","The name of the autoload/singleton that the UI kit is available under.","\"GGUIKit\"",{"name":314,"type":315,"setter":79,"getter":79,"default":316,"public":78},"_dialogs","Dictionary[Node, GGDialogContextHelper]","{}",[],[],"GGInventorySystemDialogStrategyUIKit","40.reference/2.0/gg_inventory/GGInventorySystemDialogStrategyUIKit.xml","40.reference/2.0/gg_inventory/GGInventorySystemDialogStrategyUIKit",{"_path":323,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":324,"navigation":78,"addon":77,"version":81,"brief_description":325,"description":326,"tutorials":79,"methods":327,"members":401,"signals":498,"constants":524,"inherits":536,"name":537,"title":537,"_source":126,"_file":538,"_stem":539,"_extension":129},"/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.",[328,330,334,341,344,347,350,353,356,361,364,368,374,380,384,388,392,396],{"description":79,"name":86,"public":78,"returnType":87,"params":329},[],{"description":331,"name":332,"public":92,"returnType":87,"params":333},"Forces all item slots to refresh.","refresh_slots",[],{"description":335,"name":336,"public":92,"returnType":93,"params":337},"Returns the [Control] node for the [param slot_id].","get_slot",[338],{"name":339,"type":340},"slot_id","int",{"description":79,"name":342,"public":78,"returnType":87,"params":343},"_set_scroll_container_custom_minimum_size",[],{"description":79,"name":345,"public":78,"returnType":87,"params":346},"_set_scroll_container_mode",[],{"description":79,"name":348,"public":78,"returnType":87,"params":349},"_set_inventory",[],{"description":79,"name":351,"public":78,"returnType":87,"params":352},"_update_controller_configuration",[],{"description":79,"name":354,"public":78,"returnType":87,"params":355},"_update_view",[],{"description":79,"name":357,"public":78,"returnType":87,"params":358},"_on_tab_changed",[359],{"name":360,"type":340},"tab",{"description":79,"name":362,"public":78,"returnType":87,"params":363},"_set_grid_columns",[],{"description":79,"name":365,"public":78,"returnType":366,"params":367},"_get_visible_slot_ids","int[]",[],{"description":369,"name":370,"public":78,"returnType":87,"params":371},"Will transfer the item to the remote inventory","_on_inventory_controller_transfer_item_requested",[372],{"name":339,"type":373},"Variant",{"description":79,"name":375,"public":78,"returnType":87,"params":376},"_on_gui_input_slot",[377],{"name":378,"type":379},"event_args","GGInventoryEventArgs",{"description":79,"name":381,"public":78,"returnType":87,"params":382},"_on_mouse_entered_slot",[383],{"name":378,"type":379},{"description":79,"name":385,"public":78,"returnType":87,"params":386},"_on_mouse_exited_slot",[387],{"name":378,"type":379},{"description":79,"name":389,"public":78,"returnType":87,"params":390},"_on_focus_entered_slot",[391],{"name":378,"type":379},{"description":79,"name":393,"public":78,"returnType":87,"params":394},"_on_focus_exited_slot",[395],{"name":378,"type":379},{"description":79,"name":397,"public":78,"returnType":87,"params":398},"_on_inventory_resized",[399],{"name":400,"type":340},"slot_count",[402,406,409,414,420,424,428,433,436,441,444,446,451,456,461,466,471,476,480,485,490,494],{"name":403,"description":404,"type":166,"setter":405,"getter":79,"public":92},"inventory","Specify the inventory node this UI should use","@inventory_setter",{"name":407,"description":408,"type":166,"setter":79,"getter":79,"public":92},"remote_inventory","If provided, items can be transferred via the [member GGInventory.transfer_strategy].",{"name":410,"description":411,"type":153,"setter":412,"getter":413,"public":92},"search","The search string used to filter and narrow down which inventory items are shown.","@search_setter","@search_getter",{"@enum":415,"name":416,"description":417,"type":340,"setter":418,"getter":79,"default":419,"public":92},"GGInventoryUI.Views","view","Determines which view to display the inventory in.","@view_setter","0",{"name":421,"description":422,"type":213,"setter":423,"getter":79,"default":214,"public":92},"slot_scene","The scene responsible for displaying an inventory item.","@slot_scene_setter",{"name":425,"description":426,"type":307,"setter":427,"getter":79,"public":92},"slot_size","Sets the size for each slot.","@slot_size_setter",{"name":429,"description":430,"type":291,"setter":431,"getter":79,"default":432,"public":92},"allow_slot_focus","Determines whether inventory item slots can receive focus.","@allow_slot_focus_setter","true",{"name":434,"description":435,"type":213,"setter":79,"getter":79,"default":214,"public":92},"list_item_scene","The scene used for each list item when the inventory is in list [member view].",{"name":437,"description":438,"type":340,"setter":439,"getter":79,"default":440,"public":92},"grid_columns","Specifies how many columns the [member grid_container] should have.","@grid_columns_setter","1",{"@enum":442,"name":443,"type":340,"setter":79,"getter":79,"default":419,"public":92},"ScrollContainer.ScrollMode","scroll_container_horizontal_mode",{"@enum":442,"name":445,"type":340,"setter":79,"getter":79,"default":440,"public":92},"scroll_container_vertical_mode",{"name":447,"description":448,"type":307,"setter":449,"getter":79,"default":450,"public":92},"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":452,"description":453,"type":454,"setter":455,"getter":79,"public":92},"action_strategy","Handles the user input for each slot.","GGInventoryActionStrategy","@action_strategy_setter",{"name":457,"description":458,"type":459,"setter":460,"getter":79,"public":92},"dnd_strategy","Specifies the Drag-and-Drop handling implementation","GGInventoryDndStrategy","@dnd_strategy_setter",{"name":462,"description":463,"type":464,"setter":465,"getter":79,"public":92},"split_strategy","Specifies the Split-Item handling implementation","GGInventorySplitStrategy","@split_strategy_setter",{"name":467,"description":468,"type":469,"setter":470,"getter":79,"public":92},"search_strategy","Specifies the Search/filtering implementation","GGInventorySearchStrategy","@search_strategy_setter",{"name":472,"description":473,"type":474,"setter":475,"getter":79,"public":92},"inventory_controller","The controller that handles user input and interacts with the inventory.","GGInventoryController","@inventory_controller_setter",{"name":477,"description":478,"type":479,"setter":79,"getter":79,"public":92},"grid_container","Defined so that the [member grid_columns] property can configure the [member GridContainer.columns].","GridContainer",{"name":481,"description":482,"type":483,"setter":79,"getter":79,"default":484,"public":92},"scroll_containers","The [ScrollContainer]s for the different item presentations.","ScrollContainer[]","[]",{"name":486,"description":487,"type":488,"setter":489,"getter":79,"public":92},"tab_container","Switches between different views when [member view] is updated.","TabContainer","@tab_container_setter",{"name":491,"description":492,"type":97,"setter":79,"getter":79,"default":493,"public":92},"default_focus","Used by [GGFocusControl] to determine which element should be focused.","null",{"name":495,"description":496,"type":340,"setter":497,"getter":79,"default":419,"public":92},"context_id","Represents a [GGEntityAccessManager] context.","@context_id_setter",[499,504,509,514,519],{"description":500,"name":501,"params":502},"Emitted for each slot's [signal Control.gui_input] signal.","gui_input_slot",[503],{"name":378,"type":379},{"description":505,"name":506,"params":507},"Emitted for each slot's [signal Control.focus_entered] signal.","focus_entered_slot",[508],{"name":378,"type":379},{"description":510,"name":511,"params":512},"Emitted for each slot's [signal Control.focus_exited] signal.","focus_exited_slot",[513],{"name":378,"type":379},{"description":515,"name":516,"params":517},"Emitted for each slot's [signal Control.mouse_entered] signal.","mouse_entered_slot",[518],{"name":378,"type":379},{"description":520,"name":521,"params":522},"Emitted for each slot's [signal Control.mouse_exited] signal.","mouse_exited_slot",[523],{"name":378,"type":379},[525,529,532],{"#text":526,"@name":527,"@value":419,"@enum":528},"Uses a [FlowContainer] to display items in a responsive grid.","FLOW_VIEW","Views",{"#text":530,"@name":531,"@value":440,"@enum":528},"Uses a [VBoxContainer] to display a list of item.","LIST_VIEW",{"#text":533,"@name":534,"@value":535,"@enum":528},"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":541,"_dir":77,"_draft":78,"_partial":78,"_locale":79,"_id":542,"navigation":78,"addon":77,"version":81,"brief_description":543,"description":544,"tutorials":79,"methods":545,"members":554,"signals":597,"constants":598,"inherits":178,"name":221,"title":221,"_source":126,"_file":599,"_stem":600,"_extension":129},"/reference/2.0/gg_inventory/gginventoryuiconfiguration","content:40.reference:2.0:gg_inventory:GGInventoryUIConfiguration.xml","Stores configuration for the inventory UI.","To use, create a resource and set its properties. then call the [method apply] method, and pass the UI control you want to configure. For example: \n[codeblock]\n# Instantiate a new inventory UI.\nvar inventory_ui := GGInventoryUI.new()\n\n# Create the configuration resource and define its properties.\n# Typically, you'd load it from a resource.\nvar ui_config := GGInventoryUIConfiguration.new()\n\n# Apply the configuration.\nui_config.apply(inventory_ui)\n[/codeblock]\n It ensures that each property exists before attempting to configure it. This is done so that it can work with different UI scenes, as long as they follow the same naming conventions for their properties. This means it's compatible with: [GGInventoryUI], [GGInventoryBrowseUI], [GGInventoryTransferUI], [GGInventoryBrowseModal], [GGInventoryTransferModal].",[546],{"description":547,"name":548,"public":92,"returnType":87,"params":549},"Applies the configuration to the [param control].","apply",[550,552],{"name":551,"type":93},"control",{"name":553,"type":153},"mode",[555,556,558,559,560,562,563,564,565,568,569,570,571,572,574,576,578,580,582,584,586,588,591,594],{"name":421,"type":213,"setter":79,"getter":79,"default":214,"public":92},{"name":425,"type":307,"setter":79,"getter":79,"default":557,"public":92},"Vector2(64, 64)",{"name":434,"type":213,"setter":79,"getter":79,"default":214,"public":92},{"name":452,"type":454,"setter":79,"getter":79,"public":92},{"name":561,"type":454,"setter":79,"getter":79,"public":92},"transfer_action_strategy",{"name":457,"type":459,"setter":79,"getter":79,"public":92},{"name":462,"type":464,"setter":79,"getter":79,"public":92},{"name":467,"type":469,"setter":79,"getter":79,"public":92},{"name":566,"type":567,"setter":79,"getter":79,"public":92},"popover_settings","GGInventoryPopoverSettings",{"@enum":415,"name":416,"type":340,"setter":79,"getter":79,"default":419,"public":92},{"name":437,"type":340,"setter":79,"getter":79,"default":440,"public":92},{"@enum":442,"name":443,"type":340,"setter":79,"getter":79,"default":419,"public":92},{"@enum":442,"name":445,"type":340,"setter":79,"getter":79,"default":440,"public":92},{"name":573,"type":291,"setter":79,"getter":79,"default":292,"public":92},"toolbar_visible",{"name":575,"type":291,"setter":79,"getter":79,"default":292,"public":92},"sort_button_visible",{"name":577,"type":291,"setter":79,"getter":79,"default":292,"public":92},"stack_button_visible",{"name":579,"type":291,"setter":79,"getter":79,"default":292,"public":92},"drop_all_button_visible",{"name":581,"type":291,"setter":79,"getter":79,"default":292,"public":92},"search_box_visible",{"name":583,"type":291,"setter":79,"getter":79,"default":292,"public":92},"grid_view_button_visible",{"name":585,"type":291,"setter":79,"getter":79,"default":292,"public":92},"flow_view_button_visible",{"name":587,"type":291,"setter":79,"getter":79,"default":292,"public":92},"list_view_button_visible",{"name":589,"type":590,"setter":79,"getter":79,"public":92},"theme","Theme",{"name":592,"type":593,"setter":79,"getter":79,"public":92},"audio_theme","GGInventoryAudioTheme",{"name":595,"type":596,"setter":79,"getter":79,"public":92},"audio_theme_bindings","GGAudioThemeBindings",[],[],"40.reference/2.0/gg_inventory/GGInventoryUIConfiguration.xml","40.reference/2.0/gg_inventory/GGInventoryUIConfiguration",{"_path":602,"_dir":603,"_draft":78,"_partial":78,"_locale":79,"_id":604,"navigation":78,"addon":603,"version":81,"brief_description":605,"description":606,"tutorials":607,"methods":611,"members":744,"signals":778,"constants":802,"inherits":97,"name":160,"title":160,"_source":126,"_file":803,"_stem":804,"_extension":129},"/reference/2.0/gg_permissions/ggentityaccessmanager","gg_permissions","content:40.reference:2.0:gg_permissions:GGEntityAccessManager.xml","Manages player access to an entity by establishing a context.","Players (Clients) that want to interact with a scene make a request to the scene's access manager and specify the entity/actor they will act on behalf of.[br][br]The actor is represented by a [Node], such as the player character. The access manager grants access by returning a context ID (integer). The context ID is then used by the client to perform subsequent actions as that actor.[br][br]The [member access_policy] encapsulates the logic that determines whether access should be granted.[br][br]Use case example: A character/actor requests access to a \"storage box\" entity so the player can interact with the storage box inventory on behalf of the character.",{"link":608},{"#text":609,"@title":610},"https://inventory.gogogodot.io/concepts/permissions#the-access-manager","Conceptual Overview",[612,615,618,626,633,639,643,648,654,659,663,668,672,677,684,689,694,701,707,713,718,722,726,730,734,739],{"description":79,"name":613,"public":78,"returnType":87,"params":614},"_enter_tree",[],{"description":79,"name":616,"public":78,"returnType":87,"params":617},"_exit_tree",[],{"description":619,"name":620,"public":92,"returnType":340,"params":621},"Attempts to open a context for an [param actor]. Returns a [code]context_id[/code] or [code]0[/code] indicating no context was opened. Providing a [param nonce] is optional, unless you intend to use [method cancel_context].","open_context",[622,624],{"name":623,"type":97},"actor",{"name":625,"type":340},"nonce",{"description":79,"name":627,"public":78,"returnType":340,"params":628},"_sv_open_context",[629,632],{"name":630,"type":631},"actor_path","NodePath",{"name":625,"type":340},{"description":79,"name":634,"public":78,"returnType":87,"params":635},"_cl_open_context",[636,637,638],{"name":495,"type":340},{"name":630,"type":631},{"name":625,"type":340},{"description":640,"name":641,"public":92,"returnType":87,"params":642},"If world state changes that might affect open contexts, they must be revalidated, so that invalid contexts will be closed.","revalidate",[],{"description":644,"name":645,"public":92,"returnType":87,"params":646},"Removes all contexts for a specific [param actor]. Can only be called on the server.","close_all_contexts",[647],{"name":623,"type":97},{"description":79,"name":649,"public":78,"returnType":87,"params":650},"_remove_contexts",[651],{"name":652,"type":653},"contexts","GGEntityAccessManager.Context[]",{"description":655,"name":656,"public":92,"returnType":87,"params":657},"Used by clients to cancel a pending context. Will also close a context if it was already opened. In order for cancellation to work properly, the caller must have provided a [param nonce] to [method open_context].[br]","cancel_context",[658],{"name":625,"type":340},{"description":79,"name":660,"public":78,"returnType":87,"params":661},"_sv_cancel_context",[662],{"name":625,"type":340},{"description":664,"name":665,"public":92,"returnType":87,"params":666},"When invoked, will revoke access to the inventory for the [param actor]. If [param context_id] is not provided, it will removed all contexts for the client.","close_context",[667],{"name":495,"type":340},{"description":79,"name":669,"public":78,"returnType":87,"params":670},"_sv_close_context",[671],{"name":495,"type":340},{"description":79,"name":673,"public":78,"returnType":87,"params":674},"_cl_close_context",[675,676],{"name":495,"type":340},{"name":625,"type":340},{"description":79,"name":678,"public":78,"returnType":87,"params":679},"_set_pending_request",[680,682,683],{"name":681,"type":340},"remote_sender_id",{"name":625,"type":340},{"name":623,"type":97},{"description":79,"name":685,"public":78,"returnType":291,"params":686},"_is_pending_request",[687,688],{"name":681,"type":340},{"name":625,"type":340},{"description":79,"name":690,"public":78,"returnType":87,"params":691},"_remove_pending_request",[692,693],{"name":681,"type":340},{"name":625,"type":340},{"description":79,"name":695,"public":78,"returnType":340,"params":696},"_add_context_for_actor",[697,698,699,700],{"name":623,"type":97},{"name":625,"type":340},{"name":681,"type":340},{"name":495,"type":340},{"description":702,"name":703,"public":92,"returnType":291,"params":704},"Returns true if a context for the [param actor] owned by the [param remote_sender_id] exists.","has_context",[705,706],{"name":623,"type":97},{"name":681,"type":340},{"description":708,"name":709,"public":92,"returnType":97,"params":710},"Used by other components to determine the actor based on the [param context_id] and [param remote_sender_id].","find_actor_for_context",[711,712],{"name":495,"type":340},{"name":681,"type":340},{"description":79,"name":714,"public":78,"returnType":653,"params":715},"_remove_context",[716,717],{"name":681,"type":340},{"name":495,"type":340},{"description":719,"name":720,"public":92,"returnType":340,"params":721},"The number of contexts this access manager has. Clients are only aware of their own contexts.","context_count",[],{"description":79,"name":723,"public":78,"returnType":87,"params":724},"_add_subscriber",[725],{"name":681,"type":340},{"description":79,"name":727,"public":78,"returnType":87,"params":728},"_remove_subscriber",[729],{"name":681,"type":340},{"description":731,"name":732,"public":92,"returnType":366,"params":733},"Returns an array of [code]peer_id[/code]s that have at least one open context with this access manager.","get_subscribers",[],{"description":79,"name":735,"public":78,"returnType":736,"params":737},"_make_await_handler","GGEntityAccessManager.AwaitHandler",[738],{"name":625,"type":340},{"description":79,"name":740,"public":78,"returnType":87,"params":741},"_resolve_await_handler",[742,743],{"name":625,"type":340},{"name":495,"type":340},[745,750,754,757,762,764,766,769,772,774,776],{"name":746,"description":747,"type":748,"setter":79,"getter":79,"default":749,"public":92},"access_policy","The access policy determines whether opening a context succeeds","GGEntityAccessPolicy","new()",{"name":751,"description":752,"type":340,"setter":79,"getter":79,"default":753,"public":92},"max_contexts_per_client","Limits the number of concurrent contexts a single client (i.e. [code]remote_sender_id[/code]) can have open.","5",{"name":755,"description":756,"type":291,"setter":79,"getter":79,"default":292,"public":92},"sync_with_all_clients","When enabled, [method get_subscribers] returns [code]0[/code] to broadcast an RPC to all clients. This bypasses the need for [method open_context], if the [member access_policy] supports it.",{"name":758,"description":759,"type":760,"setter":79,"getter":79,"default":761,"public":92},"await_rpc_timeout","How long the client should wait on the server for a reply when opening a context before considering it a failure. Only used client-side.","float","5.0",{"name":763,"type":366,"setter":79,"getter":79,"default":484,"public":78},"_subscribers",{"name":765,"type":340,"setter":79,"getter":79,"default":440,"public":78},"_next_await_request_id",{"name":767,"type":768,"setter":79,"getter":79,"default":316,"public":78},"_await_handlers","Dictionary[int, GGEntityAccessManager.AwaitHandler]",{"name":770,"type":771,"setter":79,"getter":79,"default":316,"public":78},"_pending_requests","Dictionary[int, Dictionary]",{"name":773,"type":771,"setter":79,"getter":79,"default":316,"public":78},"_contexts",{"name":775,"type":340,"setter":79,"getter":79,"default":440,"public":78},"_next_context_id",{"name":777,"type":291,"setter":79,"getter":79,"default":292,"public":78},"_leaving_tree",[779,787,794],{"description":780,"name":781,"params":782},"Emitted when a context was opened. The signal will be emitted on both the server and the client that made the [method open_context] request.","context_opened",[783,784,785,786],{"name":495,"type":340},{"name":623,"type":97},{"name":625,"type":340},{"name":681,"type":340},{"description":788,"name":789,"params":790},"Emitted when opening a context was denied. The signal will be emitted on both the server and the client that made the [method open_context] request.","context_denied",[791,792,793],{"name":623,"type":97},{"name":625,"type":340},{"name":681,"type":340},{"description":795,"name":796,"params":797},"Emitted when a context was closed. The signal will be emitted on both the server and the client that made the [method close_context] request. The signal may also be emitted when the server decides to close a context for any other reason, such as when [method close_all_contexts] is used.","context_closed",[798,799,800,801],{"name":495,"type":340},{"name":623,"type":97},{"name":625,"type":340},{"name":681,"type":340},[],"40.reference/2.0/gg_permissions/GGEntityAccessManager.xml","40.reference/2.0/gg_permissions/GGEntityAccessManager",{"_path":806,"_dir":603,"_draft":78,"_partial":78,"_locale":79,"_id":807,"navigation":78,"addon":603,"version":81,"brief_description":808,"description":809,"tutorials":79,"methods":810,"members":871,"signals":901,"constants":916,"inherits":917,"name":228,"title":228,"_source":126,"_file":918,"_stem":919,"_extension":129},"/reference/2.0/gg_permissions/ggdialogcontexthelper","content:40.reference:2.0:gg_permissions:GGDialogContextHelper.xml","Helps manage user interfaces (dialogs) and access manager contexts.","UIs use context_ids when interacting with an inventory on behalf of an actor (character). Some UIs (i.e. inventory transfers) require multiple contexts -- one for each side. The GGDialogContextHelper is used to ensure the UI has all the context IDs it needs. If any contexts fail or are closed, the UI automatically closes.[br][br]To use:[br]- set the [member ui] to the root [Node] of your UI scene[br]- set the [member on_success] [Callable] to the callback closure that provides your UI scene with the context IDs returned by the [GGEntityAccessManager].[br]Then, use [method acquire_context] to acquire contexts for an [code]object[/code] on behalf of an [code]actor[/code].[br]Finally, use [code]await[/code] [method dialog.wait_for_contexts()] to wait for the contexts to have been acquired.",[811,818,822,826,829,833,837,841,845,855,862],{"description":812,"name":813,"public":92,"returnType":87,"params":814},"Opens a context with the [param entity_access_manager] on behalf of the [param actor].","acquire_context",[815,817],{"name":816,"type":160},"entity_access_manager",{"name":623,"type":97},{"description":819,"name":820,"public":92,"returnType":87,"params":821},"Waits for all replies from the access manager to finish. This largely applies to the client waiting for responses from the server. If run on the server, and access manager policies are synchronous (the default), they've already been acquired.","wait_for_contexts",[],{"description":79,"name":823,"public":92,"returnType":340,"params":824},"get_context_id_for",[825],{"name":816,"type":160},{"description":79,"name":827,"public":78,"returnType":87,"params":828},"_on_closed",[],{"description":830,"name":831,"public":92,"returnType":87,"params":832},"Cancels any pending context requests and closes any contexts already received. Automatically closes the UI if necessary.","close",[],{"description":834,"name":835,"public":92,"returnType":87,"params":836},"Tells the [GGEntityAccessManager] to cancel any pending context requests for this helper.","cancel_pending",[],{"description":838,"name":839,"public":92,"returnType":87,"params":840},"Tells the [GGEntityAccessManager] to close all Context IDs for this helper.","close_contexts",[],{"description":79,"name":842,"public":78,"returnType":87,"params":843},"_on_entity_access_manager_exiting_tree",[844],{"name":816,"type":97},{"description":79,"name":846,"public":78,"returnType":87,"params":847},"_on_context_opened",[848,849,851,852,854],{"name":495,"type":340},{"name":850,"type":97},"_actor",{"name":625,"type":340},{"name":853,"type":340},"_remote_sender_id",{"name":816,"type":160},{"description":79,"name":856,"public":78,"returnType":87,"params":857},"_on_context_denied",[858,859,860,861],{"name":850,"type":97},{"name":625,"type":340},{"name":853,"type":340},{"name":816,"type":160},{"description":79,"name":863,"public":78,"returnType":87,"params":864},"_on_context_closed",[865,866,867,869,870],{"name":495,"type":340},{"name":850,"type":97},{"name":868,"type":340},"_nonce",{"name":853,"type":340},{"name":816,"type":160},[872,876,879,882,887,890,894,897,899],{"name":873,"description":874,"type":875,"setter":79,"getter":79,"default":316,"public":92},"pending","Pending context requests; maps [GGEntityAccessManager] -> nonce","Dictionary[GGEntityAccessManager, int]",{"name":877,"description":878,"type":875,"setter":79,"getter":79,"default":316,"public":92},"context_ids","context IDs; maps [GGEntityAccessManager] -> context_id",{"name":880,"description":881,"type":291,"setter":79,"getter":79,"default":432,"public":92},"success","Indicates whether we're in a successful state.",{"@deprecated":883,"name":884,"description":885,"type":886,"setter":79,"getter":79,"public":92},"Use the [signal acquired] signal instead.","on_success","Called when a context ID was received.","Callable",{"name":888,"description":889,"type":886,"setter":79,"getter":79,"public":92},"on_failure","Called when getting a context ID failed,",{"name":891,"description":892,"type":97,"setter":893,"getter":79,"public":92},"ui","Keep track of the UI. If it leaves the tree, we close the context.","@ui_setter",{"name":895,"type":896,"setter":79,"getter":79,"default":316,"public":78},"_queue","Dictionary[GGEntityAccessManager, Node]",{"name":898,"type":291,"setter":79,"getter":79,"default":292,"public":78},"_done",{"name":900,"type":291,"setter":79,"getter":79,"default":292,"public":78},"_closing",[902,906,912],{"description":903,"name":904,"params":905},"Emitted when the contexts are acquired","done",[],{"description":907,"name":908,"params":909},"Emitted when all queued contexts are acquired. TODO: Godot 4.4: context_ids: Dictionary[GGEntityAccessManager, int]","acquired",[910],{"name":877,"type":911},"Dictionary",{"description":913,"name":914,"params":915},"Emitted when the helper closed","destroyed",[],[],"RefCounted","40.reference/2.0/gg_permissions/GGDialogContextHelper.xml","40.reference/2.0/gg_permissions/GGDialogContextHelper",1743268966690]