2024-01-14 00:30:09 -05:00
|
|
|
using Godot;
|
|
|
|
using GodotGridInventory.Code.Grid;
|
|
|
|
|
|
|
|
namespace GodotGridInventory.Code.UI;
|
|
|
|
|
|
|
|
public partial class InventoryGrid:Control
|
|
|
|
{
|
|
|
|
|
|
|
|
private Grid.InventoryGrid _inventoryGrid;
|
|
|
|
private InventoryController _inventoryController;
|
|
|
|
|
|
|
|
|
2024-01-14 15:51:07 -05:00
|
|
|
[Export] public Control GridContainer { get; set; }
|
|
|
|
[Export] public PackedScene GridSlotResource { get; set; }
|
2024-01-14 00:30:09 -05:00
|
|
|
|
|
|
|
public override void _Ready()
|
|
|
|
{
|
|
|
|
base._Ready();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void InitializeInventoryGrid(Grid.InventoryGrid inventoryGrid, InventoryController inventoryController)
|
|
|
|
{
|
|
|
|
_inventoryGrid = inventoryGrid;
|
|
|
|
_inventoryController = inventoryController;
|
|
|
|
|
|
|
|
for (var x = 0; x < _inventoryGrid.GridSize.X; x++)
|
|
|
|
{
|
|
|
|
for (var y = 0; y < _inventoryGrid.GridSize.Y; y++)
|
|
|
|
{
|
|
|
|
var cellPosition = new Vector2(x, y);
|
|
|
|
var cell = _inventoryGrid.GetCell(cellPosition);
|
2024-01-14 15:51:07 -05:00
|
|
|
var gridSlot = GridSlotResource.Instantiate() as Control;
|
2024-01-14 00:30:09 -05:00
|
|
|
gridSlot.Position = new Vector2(x * _inventoryController.CellSize, y * _inventoryController.CellSize);
|
2024-01-14 15:51:07 -05:00
|
|
|
gridSlot.Size = new Vector2(_inventoryController.CellSize-1, _inventoryController.CellSize-1);
|
2024-01-14 00:30:09 -05:00
|
|
|
GridContainer.AddChild(gridSlot);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-01-14 15:51:07 -05:00
|
|
|
public Vector2 ScreenCoordsToInventoryGridCoords(Vector2 cursorPos)
|
2024-01-14 00:30:09 -05:00
|
|
|
{
|
|
|
|
var x = Mathf.FloorToInt(cursorPos.X / _inventoryController.CellSize);
|
|
|
|
var y = Mathf.FloorToInt(cursorPos.Y / _inventoryController.CellSize);
|
|
|
|
return new Vector2(x, y);
|
|
|
|
}
|
|
|
|
|
2024-01-14 15:51:07 -05:00
|
|
|
public void AddItem(InventoryGridItem inventoryItemDragged, bool useScreenCoords = true)
|
2024-01-14 00:30:09 -05:00
|
|
|
{
|
2024-01-14 15:51:07 -05:00
|
|
|
if (useScreenCoords == false)
|
|
|
|
{
|
|
|
|
var result = _inventoryGrid.AddItem(inventoryItemDragged.Item.Id, inventoryItemDragged);
|
|
|
|
if(result!=null)
|
|
|
|
{
|
|
|
|
var parent = inventoryItemDragged.GetParent();
|
|
|
|
if(parent!=null)
|
|
|
|
parent.RemoveChild(inventoryItemDragged);
|
|
|
|
AddChild(inventoryItemDragged);
|
|
|
|
inventoryItemDragged.Position = (Vector2)result * _inventoryController.CellSize;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-01-14 00:30:09 -05:00
|
|
|
var cursorPos = GetGlobalMousePosition();
|
|
|
|
var gridCoords = ScreenCoordsToInventoryGridCoords(cursorPos);
|
2024-01-14 15:51:07 -05:00
|
|
|
if (_inventoryGrid.AddItem(inventoryItemDragged.Item.Id, inventoryItemDragged, gridCoords)!=null)
|
2024-01-14 00:30:09 -05:00
|
|
|
{
|
2024-01-14 15:51:07 -05:00
|
|
|
var parent = inventoryItemDragged.GetParent();
|
|
|
|
if(parent!=null)
|
|
|
|
parent.RemoveChild(inventoryItemDragged);
|
2024-01-14 00:30:09 -05:00
|
|
|
AddChild(inventoryItemDragged);
|
2024-01-14 15:51:07 -05:00
|
|
|
inventoryItemDragged.Position = gridCoords * _inventoryController.CellSize;
|
2024-01-14 00:30:09 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|