/// <summary> /// Creates a grid container filled with slot buttons loaded from an inventory template /// </summary> public void CreateInventory(Inventory inventory) { Columns = inventory.Columns; IndexedSlots = new List <Slots>(inventory.SlotMasks); foreach (var slot in IndexedSlots) { var newButton = new InventoryButton(slot); if (slot == Slots.NONE) { //TODO: Re-enable when godot grid container maintains grid with invisible elements //newbutton.Visible = false; } else { // Store slot button and give it the default onpress behavior for empty elements newButton.GetChild <Button>("Button").OnPressed += AddToInventory; InventorySlots.Add(slot, newButton); } if (SlotNames.ContainsKey(slot)) { var button = newButton.GetChild <Button>("Button"); button.Text = button.ToolTip = SlotNames[slot]; } AddChild(newButton); } }
/// <summary> /// Adds the item we have equipped to the slot texture and prepares the slot button for removal /// </summary> /// <param name="message"></param> public void AddToSlot(ServerInventoryMessage message) { InventoryButton button = InventorySlots[message.Inventoryslot]; var entity = IoCManager.Resolve <IEntityManager>().GetEntity(message.EntityUid); button.EntityUid = message.EntityUid; var container = button.GetChild("CenterContainer"); button.GetChild <Button>("Button").OnPressed += RemoveFromInventory; button.GetChild <Button>("Button").OnPressed -= AddToInventory; //Gets entity sprite and assigns it to button texture if (entity.TryGetComponent(out IconComponent sprite)) { var tex = sprite.Icon.Default; var rect = button.GetChild("CenterContainer").GetChild <TextureRect>("TextureRect"); if (tex != null) { rect.Texture = tex; rect.Scale = new Vector2(Math.Min(CalculateMinimumSize().X, 32) / tex.Height, Math.Min(CalculateMinimumSize().Y, 32) / tex.Height); } else { throw new NotImplementedException(); } } }
/// <summary> /// Creates a grid container filled with slot buttons loaded from an inventory template /// </summary> /// <param name="TemplateName"></param> public void CreateInventory(string TemplateName) { Type type = AppDomain.CurrentDomain.GetAssemblyByName("Content.Shared").GetType("Content.Shared.GameObjects." + TemplateName); Inventory inventory = (Inventory)Activator.CreateInstance(type); elements_x = inventory.Columns; GridContainer = (GridContainer)Contents.GetChild("PanelContainer").GetChild("CenterContainer").GetChild("GridContainer"); GridContainer.Columns = elements_x; IndexedSlots = new List <Slots>(inventory.SlotMasks); foreach (Slots slot in IndexedSlots) { InventoryButton newbutton = new InventoryButton(slot); if (slot == Slots.NONE) { //TODO: Re-enable when godot grid container maintains grid with invisible elements //newbutton.Visible = false; } else { //Store slot button and give it the default onpress behavior for empty elements newbutton.GetChild <Button>("Button").OnPressed += AddToInventory; InventorySlots.Add(slot, newbutton); } if (SlotNames.ContainsKey(slot)) { newbutton.GetChild <Button>("Button").Text = SlotNames[slot]; } GridContainer.AddChild(newbutton); } }
/// <summary> /// Remove element from the UI and update its button to blank texture and prepare for insertion again /// </summary> /// <param name="message"></param> public void RemoveFromSlot(ServerInventoryMessage message) { InventoryButton button = InventorySlots[message.Inventoryslot]; button.GetChild("CenterContainer").GetChild <TextureRect>("TextureRect").Texture = null; button.EntityUid = EntityUid.Invalid; button.GetChild <Button>("Button").OnPressed -= RemoveFromInventory; button.GetChild <Button>("Button").OnPressed += AddToInventory; }