Esempio n. 1
0
            /// <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);
                }
            }
Esempio n. 2
0
            /// <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();
                    }
                }
            }
Esempio n. 3
0
            /// <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);
                }
            }
Esempio n. 4
0
            /// <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;
            }