formated files (spaces to tabs)
authorEduardo <[email protected]>
Mon, 5 Aug 2024 12:25:08 +0000 (14:25 +0200)
committerEduardo <[email protected]>
Mon, 5 Aug 2024 12:25:08 +0000 (14:25 +0200)
addons/gloot/ui/ctrl_inventory.gd
addons/gloot/ui/ctrl_inventory_grid.gd

index facc1ec9209af4ac081cac30556a3c5825322ea1..c306bfaec5820f2a4b7b3f4d031fe7a093c465d2 100644 (file)
@@ -9,189 +9,188 @@ signal inventory_item_context_activated(item)
 enum SelectMode {SELECT_SINGLE = ItemList.SELECT_SINGLE, SELECT_MULTI = ItemList.SELECT_MULTI}
 
 @export var inventory_path: NodePath :
-    set(new_inv_path):
-        inventory_path = new_inv_path
-        var node: Node = get_node_or_null(inventory_path)
+       set(new_inv_path):
+               inventory_path = new_inv_path
+               var node: Node = get_node_or_null(inventory_path)
 
-        if node == null:
-            return
+               if node == null:
+                       return
 
-        if is_inside_tree():
-            assert(node is Inventory)
-            
-        inventory = node
-        update_configuration_warnings()
+               if is_inside_tree():
+                       assert(node is Inventory)
+                       
+               inventory = node
+               update_configuration_warnings()
 
 
 @export var default_item_icon: Texture2D
 @export_enum("Single", "Multi") var select_mode: int = SelectMode.SELECT_SINGLE :
-    set(new_select_mode):
-        if select_mode == new_select_mode:
-            return
-        select_mode = new_select_mode
-        if is_instance_valid(_item_list):
-            _item_list.deselect_all();
-            _item_list.select_mode = select_mode
+       set(new_select_mode):
+               if select_mode == new_select_mode:
+                       return
+               select_mode = new_select_mode
+               if is_instance_valid(_item_list):
+                       _item_list.deselect_all();
+                       _item_list.select_mode = select_mode
 var inventory: Inventory = null :
-    set(new_inventory):
-        if new_inventory == inventory:
-            return
-    
-        _disconnect_inventory_signals()
-        inventory = new_inventory
-        _connect_inventory_signals()
-
-        _queue_refresh()
+       set(new_inventory):
+               if new_inventory == inventory:
+                       return
+       
+               _disconnect_inventory_signals()
+               inventory = new_inventory
+               _connect_inventory_signals()
+
+               _queue_refresh()
 var _vbox_container: VBoxContainer
 var _item_list: ItemList
 var _refresh_queued: bool = false
 
 
 func _get_configuration_warnings() -> PackedStringArray:
-    if inventory_path.is_empty():
-        return PackedStringArray([
-                "This node is not linked to an inventory, so it can't display any content.\n" + \
-                "Set the inventory_path property to point to an Inventory node."])
-    return PackedStringArray()
+       if inventory_path.is_empty():
+               return PackedStringArray([
+                               "This node is not linked to an inventory, so it can't display any content.\n" + \
+                               "Set the inventory_path property to point to an Inventory node."])
+       return PackedStringArray()
 
 
 func _ready():
-    if Engine.is_editor_hint():
-        # Clean up, in case it is duplicated in the editor
-        if is_instance_valid(_vbox_container):
-            _vbox_container.queue_free()
+       if Engine.is_editor_hint():
+               # Clean up, in case it is duplicated in the editor
+               if is_instance_valid(_vbox_container):
+                       _vbox_container.queue_free()
 
-    _vbox_container = VBoxContainer.new()
-    _vbox_container.size_flags_horizontal = SIZE_EXPAND_FILL
-    _vbox_container.size_flags_vertical = SIZE_EXPAND_FILL
-    _vbox_container.anchor_right = 1.0
-    _vbox_container.anchor_bottom = 1.0
-    add_child(_vbox_container)
+       _vbox_container = VBoxContainer.new()
+       _vbox_container.size_flags_horizontal = SIZE_EXPAND_FILL
+       _vbox_container.size_flags_vertical = SIZE_EXPAND_FILL
+       _vbox_container.anchor_right = 1.0
+       _vbox_container.anchor_bottom = 1.0
+       add_child(_vbox_container)
 
-    _item_list = ItemList.new()
-    _item_list.size_flags_horizontal = SIZE_EXPAND_FILL
-    _item_list.size_flags_vertical = SIZE_EXPAND_FILL
-    _item_list.item_activated.connect(_on_list_item_activated)
-    _item_list.item_clicked.connect(_on_list_item_clicked)
-    _item_list.select_mode = select_mode
-    _vbox_container.add_child(_item_list)
+       _item_list = ItemList.new()
+       _item_list.size_flags_horizontal = SIZE_EXPAND_FILL
+       _item_list.size_flags_vertical = SIZE_EXPAND_FILL
+       _item_list.item_activated.connect(_on_list_item_activated)
+       _item_list.item_clicked.connect(_on_list_item_clicked)
+       _item_list.select_mode = select_mode
+       _vbox_container.add_child(_item_list)
 
-    if has_node(inventory_path):
-        inventory = get_node(inventory_path)
+       if has_node(inventory_path):
+               inventory = get_node(inventory_path)
 
-    _queue_refresh()
+       _queue_refresh()
 
 
 func _connect_inventory_signals() -> void:
-    if !is_instance_valid(inventory):
-        return
+       if !is_instance_valid(inventory):
+               return
 
-    if !inventory.contents_changed.is_connected(_queue_refresh):
-        inventory.contents_changed.connect(_queue_refresh)
-    if !inventory.item_property_changed.is_connected(_on_item_property_changed):
-        inventory.item_property_changed.connect(_on_item_property_changed)
+       if !inventory.contents_changed.is_connected(_queue_refresh):
+               inventory.contents_changed.connect(_queue_refresh)
+       if !inventory.item_property_changed.is_connected(_on_item_property_changed):
+               inventory.item_property_changed.connect(_on_item_property_changed)
 
 
 func _disconnect_inventory_signals() -> void:
-    if !is_instance_valid(inventory):
-        return
+       if !is_instance_valid(inventory):
+               return
 
-    if inventory.contents_changed.is_connected(_queue_refresh):
-        inventory.contents_changed.disconnect(_queue_refresh)
-    if inventory.item_property_changed.is_connected(_on_item_property_changed):
-        inventory.item_property_changed.disconnect(_on_item_property_changed)
+       if inventory.contents_changed.is_connected(_queue_refresh):
+               inventory.contents_changed.disconnect(_queue_refresh)
+       if inventory.item_property_changed.is_connected(_on_item_property_changed):
+               inventory.item_property_changed.disconnect(_on_item_property_changed)
 
 
 func _on_list_item_activated(index: int) -> void:
-    inventory_item_activated.emit(_get_inventory_item(index))
+       inventory_item_activated.emit(_get_inventory_item(index))
 
 
 func _on_list_item_clicked(index: int, at_position: Vector2, mouse_button_index: int) -> void:
-    if mouse_button_index == MOUSE_BUTTON_RIGHT:
-        inventory_item_context_activated.emit(_get_inventory_item(index))
+       if mouse_button_index == MOUSE_BUTTON_RIGHT:
+               inventory_item_context_activated.emit(_get_inventory_item(index))
 
 
 func _on_item_property_changed(_item: InventoryItem, property_name: String) -> void:
-    if property_name in [InventoryItem.KEY_NAME, InventoryItem.KEY_IMAGE]:
-        _queue_refresh()
+       if property_name in [InventoryItem.KEY_NAME, InventoryItem.KEY_IMAGE]:
+               _queue_refresh()
 
 
 func _process(_delta) -> void:
-    if _refresh_queued:
-        _refresh()
-        _refresh_queued = false
+       if _refresh_queued:
+               _refresh()
+               _refresh_queued = false
 
 
 func _queue_refresh() -> void:
-    _refresh_queued = true
+       _refresh_queued = true
 
 
 func _refresh() -> void:
-    if is_inside_tree():
-        _clear_list()
-        _populate_list()
+       if is_inside_tree():
+               _clear_list()
+               _populate_list()
 
 
 func _clear_list() -> void:
-    if is_instance_valid(_item_list):
-        _item_list.clear()
+       if is_instance_valid(_item_list):
+               _item_list.clear()
 
 
 func _populate_list() -> void:
-    if !is_instance_valid(inventory):
-        return
+       if !is_instance_valid(inventory):
+               return
 
-    for item in inventory.get_items():
-        var texture := item.get_texture()
-        if !texture:
-            texture = default_item_icon
-        _item_list.add_item(_get_item_title(item), texture)
-        _item_list.set_item_metadata(_item_list.get_item_count() - 1, item)
+       for item in inventory.get_items():
+               var texture := item.get_texture()
+               if !texture:
+                       texture = default_item_icon
+               _item_list.add_item(_get_item_title(item), texture)
+               _item_list.set_item_metadata(_item_list.get_item_count() - 1, item)
 
 
 func _get_item_title(item: InventoryItem) -> String:
-    if item == null:
-        return ""
+       if item == null:
+               return ""
 
-    var title = item.get_title()
-    var stack_size: int = InventoryStacked.get_item_stack_size(item)
-    if stack_size > 1:
-        title = "%s (x%d)" % [title, stack_size]
+       var title = item.get_title()
+       var stack_size: int = InventoryStacked.get_item_stack_size(item)
+       if stack_size > 1:
+               title = "%s (x%d)" % [title, stack_size]
 
-    return title
+       return title
 
 
 func get_selected_inventory_item() -> InventoryItem:
-    if _item_list.get_selected_items().is_empty():
-        return null
+       if _item_list.get_selected_items().is_empty():
+               return null
 
-    return _get_inventory_item(_item_list.get_selected_items()[0])
+       return _get_inventory_item(_item_list.get_selected_items()[0])
 
 
 func get_selected_inventory_items() -> Array[InventoryItem]:
-    var result: Array[InventoryItem]
-    var indexes = _item_list.get_selected_items()
-    for i in indexes:
-        result.append(_get_inventory_item(i))
-    return result
+       var result: Array[InventoryItem]
+       var indexes = _item_list.get_selected_items()
+       for i in indexes:
+               result.append(_get_inventory_item(i))
+       return result
 
 
 func _get_inventory_item(index: int) -> InventoryItem:
-    assert(index >= 0)
-    assert(index < _item_list.get_item_count())
+       assert(index >= 0)
+       assert(index < _item_list.get_item_count())
 
-    return _item_list.get_item_metadata(index)
+       return _item_list.get_item_metadata(index)
 
 
 func deselect_inventory_item() -> void:
-    _item_list.deselect_all()
+       _item_list.deselect_all()
 
 
 func select_inventory_item(item: InventoryItem) -> void:
-    _item_list.deselect_all()
-    for index in _item_list.item_count:
-        if _item_list.get_item_metadata(index) != item:
-            continue
-        _item_list.select(index)
-        return
-
+       _item_list.deselect_all()
+       for index in _item_list.item_count:
+               if _item_list.get_item_metadata(index) != item:
+                       continue
+               _item_list.select(index)
+               return
index d7fbb76a2a68e39aa0722839b34252ad92968df8..09e6372bf6fa1c9f94041570e199d2a922bc2311 100644 (file)
@@ -13,119 +13,119 @@ signal item_mouse_exited(item)
 const CtrlInventoryGridBasic = preload("res://addons/gloot/ui/ctrl_inventory_grid_basic.gd")
 
 class GridControl extends Control:
-    var color: Color = Color.BLACK :
-        set(new_color):
-            if new_color == color:
-                return
-            color = new_color
-            queue_redraw()
-    var dimensions: Vector2i = Vector2i.ZERO :
-        set(new_dimensions):
-            if new_dimensions == dimensions:
-                return
-            dimensions = new_dimensions
-            queue_redraw()
-
-    func _init(color_: Color, dimensions_: Vector2i) -> void:
-        color = color_
-        dimensions = dimensions_
-
-    func _draw() -> void:
-        var rect = Rect2(Vector2.ZERO, size)
-        draw_rect(rect, color, false)
-
-        if dimensions.x < 1 || dimensions.y < 1:
-            return
-
-        for i in range(1, dimensions.x):
-            var from: Vector2 = Vector2(i * size.x / dimensions.x, 0)
-            var to: Vector2 = Vector2(i * size.x / dimensions.x, size.y)
-            draw_line(from, to, color)
-        for j in range(1, dimensions.y):
-            var from: Vector2 = Vector2(0, j * size.y / dimensions.y)
-            var to: Vector2 = Vector2(size.x, j * size.y / dimensions.y)
-            draw_line(from, to, color)
-        
+       var color: Color = Color.BLACK :
+               set(new_color):
+                       if new_color == color:
+                               return
+                       color = new_color
+                       queue_redraw()
+       var dimensions: Vector2i = Vector2i.ZERO :
+               set(new_dimensions):
+                       if new_dimensions == dimensions:
+                               return
+                       dimensions = new_dimensions
+                       queue_redraw()
+
+       func _init(color_: Color, dimensions_: Vector2i) -> void:
+               color = color_
+               dimensions = dimensions_
+
+       func _draw() -> void:
+               var rect = Rect2(Vector2.ZERO, size)
+               draw_rect(rect, color, false)
+
+               if dimensions.x < 1 || dimensions.y < 1:
+                       return
+
+               for i in range(1, dimensions.x):
+                       var from: Vector2 = Vector2(i * size.x / dimensions.x, 0)
+                       var to: Vector2 = Vector2(i * size.x / dimensions.x, size.y)
+                       draw_line(from, to, color)
+               for j in range(1, dimensions.y):
+                       var from: Vector2 = Vector2(0, j * size.y / dimensions.y)
+                       var to: Vector2 = Vector2(size.x, j * size.y / dimensions.y)
+                       draw_line(from, to, color)
+               
 
 @export var inventory_path: NodePath :
-    set(new_inv_path):
-        if new_inv_path == inventory_path:
-            return
-        inventory_path = new_inv_path
-        var node: Node = get_node_or_null(inventory_path)
-
-        if node == null:
-            return
-
-        if is_inside_tree():
-            assert(node is InventoryGrid)
-            
-        inventory = node
-        update_configuration_warnings()
+       set(new_inv_path):
+               if new_inv_path == inventory_path:
+                       return
+               inventory_path = new_inv_path
+               var node: Node = get_node_or_null(inventory_path)
+
+               if node == null:
+                       return
+
+               if is_inside_tree():
+                       assert(node is InventoryGrid)
+                       
+               inventory = node
+               update_configuration_warnings()
 @export var default_item_texture: Texture2D :
-    set(new_default_item_texture):
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.default_item_texture = new_default_item_texture
-        default_item_texture = new_default_item_texture
+       set(new_default_item_texture):
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.default_item_texture = new_default_item_texture
+               default_item_texture = new_default_item_texture
 @export var stretch_item_sprites: bool = true :
-    set(new_stretch_item_sprites):
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.stretch_item_sprites = new_stretch_item_sprites
-        stretch_item_sprites = new_stretch_item_sprites
+       set(new_stretch_item_sprites):
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.stretch_item_sprites = new_stretch_item_sprites
+               stretch_item_sprites = new_stretch_item_sprites
 @export var field_dimensions: Vector2 = Vector2(32, 32) :
-    set(new_field_dimensions):
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.field_dimensions = new_field_dimensions
-        field_dimensions = new_field_dimensions
+       set(new_field_dimensions):
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.field_dimensions = new_field_dimensions
+               field_dimensions = new_field_dimensions
 @export var item_spacing: int = 0 :
-    set(new_item_spacing):
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.item_spacing = new_item_spacing
-        item_spacing = new_item_spacing
+       set(new_item_spacing):
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.item_spacing = new_item_spacing
+               item_spacing = new_item_spacing
 @export var draw_grid: bool = true :
-    set(new_draw_grid):
-        if new_draw_grid == draw_grid:
-            return
-        draw_grid = new_draw_grid
-        _queue_refresh()
+       set(new_draw_grid):
+               if new_draw_grid == draw_grid:
+                       return
+               draw_grid = new_draw_grid
+               _queue_refresh()
 @export var grid_color: Color = Color.BLACK :
-    set(new_grid_color):
-        if(new_grid_color == grid_color):
-            return
-        grid_color = new_grid_color
-        _queue_refresh()
+       set(new_grid_color):
+               if(new_grid_color == grid_color):
+                       return
+               grid_color = new_grid_color
+               _queue_refresh()
 @export var draw_selections: bool = false :
-    set(new_draw_selections):
-        if new_draw_selections == draw_selections:
-            return
-        draw_selections = new_draw_selections
-        _queue_refresh()
+       set(new_draw_selections):
+               if new_draw_selections == draw_selections:
+                       return
+               draw_selections = new_draw_selections
+               _queue_refresh()
 @export var selection_color: Color = Color.GRAY :
-    set(new_selection_color):
-        if(new_selection_color == selection_color):
-            return
-        selection_color = new_selection_color
-        _queue_refresh()
+       set(new_selection_color):
+               if(new_selection_color == selection_color):
+                       return
+               selection_color = new_selection_color
+               _queue_refresh()
 @export_enum("Single", "Multi") var select_mode: int = CtrlInventoryGridBasic.SelectMode.SELECT_SINGLE :
-    set(new_select_mode):
-        if select_mode == new_select_mode:
-            return
-        select_mode = new_select_mode
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.select_mode = select_mode
+       set(new_select_mode):
+               if select_mode == new_select_mode:
+                       return
+               select_mode = new_select_mode
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.select_mode = select_mode
 
 var inventory: InventoryGrid = null :
-    set(new_inventory):
-        if inventory == new_inventory:
-            return
+       set(new_inventory):
+               if inventory == new_inventory:
+                       return
 
-        _disconnect_inventory_signals()
-        inventory = new_inventory
-        _connect_inventory_signals()
+               _disconnect_inventory_signals()
+               inventory = new_inventory
+               _connect_inventory_signals()
 
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.inventory = inventory
-        _queue_refresh()
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.inventory = inventory
+               _queue_refresh()
 
 var _ctrl_grid: GridControl = null
 var _ctrl_selection: Control = null
@@ -134,161 +134,160 @@ var _refresh_queued: bool = false
 
 
 func _connect_inventory_signals() -> void:
-    if !is_instance_valid(inventory):
-        return
-    if !inventory.contents_changed.is_connected(_queue_refresh):
-        inventory.contents_changed.connect(_queue_refresh)
-    if !inventory.size_changed.is_connected(_on_inventory_resized):
-        inventory.size_changed.connect(_on_inventory_resized)
+       if !is_instance_valid(inventory):
+               return
+       if !inventory.contents_changed.is_connected(_queue_refresh):
+               inventory.contents_changed.connect(_queue_refresh)
+       if !inventory.size_changed.is_connected(_on_inventory_resized):
+               inventory.size_changed.connect(_on_inventory_resized)
 
 
 func _disconnect_inventory_signals() -> void:
-    if !is_instance_valid(inventory):
-        return
-    if inventory.contents_changed.is_connected(_queue_refresh):
-        inventory.contents_changed.disconnect(_queue_refresh)
-    if inventory.size_changed.is_connected(_on_inventory_resized):
-        inventory.size_changed.disconnect(_on_inventory_resized)
+       if !is_instance_valid(inventory):
+               return
+       if inventory.contents_changed.is_connected(_queue_refresh):
+               inventory.contents_changed.disconnect(_queue_refresh)
+       if inventory.size_changed.is_connected(_on_inventory_resized):
+               inventory.size_changed.disconnect(_on_inventory_resized)
 
 
 func _on_inventory_resized() -> void:
-    _queue_refresh()
+       _queue_refresh()
 
 
 func _get_configuration_warnings() -> PackedStringArray:
-    if inventory_path.is_empty():
-        return PackedStringArray([
-                "This node is not linked to an inventory and can't display any content.\n" + \
-                "Set the inventory_path property to point to an InventoryGrid node."])
-    return PackedStringArray()
+       if inventory_path.is_empty():
+               return PackedStringArray([
+                               "This node is not linked to an inventory and can't display any content.\n" + \
+                               "Set the inventory_path property to point to an InventoryGrid node."])
+       return PackedStringArray()
 
 
 func _ready() -> void:
-    if Engine.is_editor_hint():
-        # Clean up, in case it is duplicated in the editor
-        if is_instance_valid(_ctrl_inventory_grid_basic):
-            _ctrl_inventory_grid_basic.queue_free()
-            _ctrl_grid.queue_free()
-            _ctrl_selection.queue_free()
-
-    if has_node(inventory_path):
-        inventory = get_node_or_null(inventory_path)
-
-    _ctrl_inventory_grid_basic = CtrlInventoryGridBasic.new()
-    _ctrl_inventory_grid_basic.inventory = inventory
-    _ctrl_inventory_grid_basic.field_dimensions = field_dimensions
-    _ctrl_inventory_grid_basic.item_spacing = item_spacing
-    _ctrl_inventory_grid_basic.default_item_texture = default_item_texture
-    _ctrl_inventory_grid_basic.stretch_item_sprites = stretch_item_sprites
-    _ctrl_inventory_grid_basic.name = "CtrlInventoryGridBasic"
-    _ctrl_inventory_grid_basic.resized.connect(_update_size)
-    _ctrl_inventory_grid_basic.select_mode = select_mode
-
-    _ctrl_inventory_grid_basic.item_dropped.connect(func(item: InventoryItem, drop_position: Vector2):
-        item_dropped.emit(item, drop_position)
-    )
-    _ctrl_inventory_grid_basic.selection_changed.connect(func():
-        _queue_refresh()
-        selection_changed.emit()
-    )
-    _ctrl_inventory_grid_basic.inventory_item_activated.connect(func(item: InventoryItem):
-        inventory_item_activated.emit(item)
-    )
-    _ctrl_inventory_grid_basic.inventory_item_context_activated.connect(func(item: InventoryItem):
-        inventory_item_context_activated.emit(item)
-    )
-    _ctrl_inventory_grid_basic.item_mouse_entered.connect(func(item: InventoryItem): item_mouse_entered.emit(item))
-    _ctrl_inventory_grid_basic.item_mouse_exited.connect(func(item: InventoryItem): item_mouse_exited.emit(item))
-
-    _ctrl_grid = GridControl.new(grid_color, _get_inventory_dimensions())
-    _ctrl_grid.color = grid_color
-    _ctrl_grid.dimensions = _get_inventory_dimensions()
-    _ctrl_grid.name = "CtrlGrid"
-
-    _ctrl_selection = Control.new()
-    _ctrl_selection.visible = draw_selections
-
-    add_child(_ctrl_grid)
-    add_child(_ctrl_selection)
-    add_child(_ctrl_inventory_grid_basic)
-
-    _update_size()
-    _queue_refresh()
+       if Engine.is_editor_hint():
+               # Clean up, in case it is duplicated in the editor
+               if is_instance_valid(_ctrl_inventory_grid_basic):
+                       _ctrl_inventory_grid_basic.queue_free()
+                       _ctrl_grid.queue_free()
+                       _ctrl_selection.queue_free()
+
+       if has_node(inventory_path):
+               inventory = get_node_or_null(inventory_path)
+
+       _ctrl_inventory_grid_basic = CtrlInventoryGridBasic.new()
+       _ctrl_inventory_grid_basic.inventory = inventory
+       _ctrl_inventory_grid_basic.field_dimensions = field_dimensions
+       _ctrl_inventory_grid_basic.item_spacing = item_spacing
+       _ctrl_inventory_grid_basic.default_item_texture = default_item_texture
+       _ctrl_inventory_grid_basic.stretch_item_sprites = stretch_item_sprites
+       _ctrl_inventory_grid_basic.name = "CtrlInventoryGridBasic"
+       _ctrl_inventory_grid_basic.resized.connect(_update_size)
+       _ctrl_inventory_grid_basic.select_mode = select_mode
+
+       _ctrl_inventory_grid_basic.item_dropped.connect(func(item: InventoryItem, drop_position: Vector2):
+               item_dropped.emit(item, drop_position)
+       )
+       _ctrl_inventory_grid_basic.selection_changed.connect(func():
+               _queue_refresh()
+               selection_changed.emit()
+       )
+       _ctrl_inventory_grid_basic.inventory_item_activated.connect(func(item: InventoryItem):
+               inventory_item_activated.emit(item)
+       )
+       _ctrl_inventory_grid_basic.inventory_item_context_activated.connect(func(item: InventoryItem):
+               inventory_item_context_activated.emit(item)
+       )
+       _ctrl_inventory_grid_basic.item_mouse_entered.connect(func(item: InventoryItem): item_mouse_entered.emit(item))
+       _ctrl_inventory_grid_basic.item_mouse_exited.connect(func(item: InventoryItem): item_mouse_exited.emit(item))
+
+       _ctrl_grid = GridControl.new(grid_color, _get_inventory_dimensions())
+       _ctrl_grid.color = grid_color
+       _ctrl_grid.dimensions = _get_inventory_dimensions()
+       _ctrl_grid.name = "CtrlGrid"
+
+       _ctrl_selection = Control.new()
+       _ctrl_selection.visible = draw_selections
+
+       add_child(_ctrl_grid)
+       add_child(_ctrl_selection)
+       add_child(_ctrl_inventory_grid_basic)
+
+       _update_size()
+       _queue_refresh()
 
 
 func _process(_delta) -> void:
-    if _refresh_queued:
-        _refresh()
-        _refresh_queued = false
+       if _refresh_queued:
+               _refresh()
+               _refresh_queued = false
 
 
 func _refresh() -> void:
-    if is_instance_valid(_ctrl_grid):
-        _ctrl_grid.dimensions = _get_inventory_dimensions()
-        _ctrl_grid.color = grid_color
-        _ctrl_grid.visible = draw_grid
-    else:
-        _ctrl_grid.hide()
-
-    if is_instance_valid(_ctrl_selection) && is_instance_valid(_ctrl_inventory_grid_basic):
-        for child in _ctrl_selection.get_children():
-            child.queue_free()
-        for selected_inventory_item in _ctrl_inventory_grid_basic.get_selected_inventory_items():
-            var rect := _ctrl_inventory_grid_basic.get_item_rect(selected_inventory_item)
-            var selection_rect := ColorRect.new()
-            selection_rect.color = selection_color
-            selection_rect.position = rect.position
-            selection_rect.size = rect.size
-            _ctrl_selection.add_child(selection_rect)
-            _ctrl_selection.visible = draw_selections
+       if is_instance_valid(_ctrl_grid):
+               _ctrl_grid.dimensions = _get_inventory_dimensions()
+               _ctrl_grid.color = grid_color
+               _ctrl_grid.visible = draw_grid
+       else:
+               _ctrl_grid.hide()
+
+       if is_instance_valid(_ctrl_selection) && is_instance_valid(_ctrl_inventory_grid_basic):
+               for child in _ctrl_selection.get_children():
+                       child.queue_free()
+               for selected_inventory_item in _ctrl_inventory_grid_basic.get_selected_inventory_items():
+                       var rect := _ctrl_inventory_grid_basic.get_item_rect(selected_inventory_item)
+                       var selection_rect := ColorRect.new()
+                       selection_rect.color = selection_color
+                       selection_rect.position = rect.position
+                       selection_rect.size = rect.size
+                       _ctrl_selection.add_child(selection_rect)
+                       _ctrl_selection.visible = draw_selections
 
 
 func _queue_refresh() -> void:
-    _refresh_queued = true
+       _refresh_queued = true
 
 
 func _get_inventory_dimensions() -> Vector2i:
-    var inventory_grid = _get_inventory()
-    if !is_instance_valid(inventory_grid):
-        return Vector2i.ZERO
-    return _ctrl_inventory_grid_basic.inventory.size
+       var inventory_grid = _get_inventory()
+       if !is_instance_valid(inventory_grid):
+               return Vector2i.ZERO
+       return _ctrl_inventory_grid_basic.inventory.size
 
 
 func _update_size() -> void:
-    custom_minimum_size = _ctrl_inventory_grid_basic.size
-    size = _ctrl_inventory_grid_basic.size
-    _ctrl_grid.custom_minimum_size = _ctrl_inventory_grid_basic.size
-    _ctrl_grid.size = _ctrl_inventory_grid_basic.size
+       custom_minimum_size = _ctrl_inventory_grid_basic.size
+       size = _ctrl_inventory_grid_basic.size
+       _ctrl_grid.custom_minimum_size = _ctrl_inventory_grid_basic.size
+       _ctrl_grid.size = _ctrl_inventory_grid_basic.size
 
 
 func _get_inventory() -> InventoryGrid:
-    if !is_instance_valid(_ctrl_inventory_grid_basic):
-        return null
-    if !is_instance_valid(_ctrl_inventory_grid_basic.inventory):
-        return null
-    return _ctrl_inventory_grid_basic.inventory
+       if !is_instance_valid(_ctrl_inventory_grid_basic):
+               return null
+       if !is_instance_valid(_ctrl_inventory_grid_basic.inventory):
+               return null
+       return _ctrl_inventory_grid_basic.inventory
 
 
 func deselect_inventory_item() -> void:
-    if !is_instance_valid(_ctrl_inventory_grid_basic):
-        return
-    _ctrl_inventory_grid_basic.deselect_inventory_item()
+       if !is_instance_valid(_ctrl_inventory_grid_basic):
+               return
+       _ctrl_inventory_grid_basic.deselect_inventory_item()
 
 
 func select_inventory_item(item: InventoryItem) -> void:
-    if !is_instance_valid(_ctrl_inventory_grid_basic):
-        return
-    _ctrl_inventory_grid_basic.select_inventory_item(item)
+       if !is_instance_valid(_ctrl_inventory_grid_basic):
+               return
+       _ctrl_inventory_grid_basic.select_inventory_item(item)
 
 
 func get_selected_inventory_item() -> InventoryItem:
-    if !is_instance_valid(_ctrl_inventory_grid_basic):
-        return null
-    return _ctrl_inventory_grid_basic.get_selected_inventory_item()
+       if !is_instance_valid(_ctrl_inventory_grid_basic):
+               return null
+       return _ctrl_inventory_grid_basic.get_selected_inventory_item()
 
 
 func get_selected_inventory_items() -> Array[InventoryItem]:
-    if !is_instance_valid(_ctrl_inventory_grid_basic):
-        return []
-    return _ctrl_inventory_grid_basic.get_selected_inventory_items()
-
+       if !is_instance_valid(_ctrl_inventory_grid_basic):
+               return []
+       return _ctrl_inventory_grid_basic.get_selected_inventory_items()