コード例 #1
0
ファイル: MenuField.cs プロジェクト: dionvc/factorygame
        public override void HandleInput(InputManager input)
        {
            base.HandleInput(input);

            Vector2f      mousePos;
            bool          mouse  = input.GetMousePosition(out mousePos);
            Vector2i      origin = new Vector2i(0, 0);
            MenuComponent bubble = parent;

            while (bubble != null)
            {
                origin += bubble.position;
                bubble  = bubble.parent;
            }
            bool collided = BoundingBox.CheckPointMenuCollision(mousePos.X, mousePos.Y, collisionBox, new Vector2f((position + origin).X, (origin + position).Y));

            if (mouse && (fieldState == FieldState.Normal || fieldState == FieldState.Modified) && collided && input.GetMouseClicked(InputBindings.primary, true))
            {
                fieldState = FieldState.Focused;
            }
            if (fieldState == FieldState.Focused)
            {
                string updated;
                if (input.GetKeyPressed(InputBindings.backSpace, true))
                {
                    if (fieldValue.Length > 1)
                    {
                        fieldValue = fieldValue.Substring(0, fieldValue.Length - 1);
                        parseField(tag, fieldValue, out updated);
                        textField.SetText(updated);
                        fieldValue = updated;
                    }
                    else
                    {
                        fieldValue = "";
                        parseField(tag, fieldValue, out updated);
                        textField.SetText(fieldValue);
                        fieldValue = updated;
                    }
                }
                else
                {
                    string inputString = input.GetKeyString(true);
                    fieldValue = fieldValue + inputString;
                    if (inputString != "")
                    {
                        bool success = parseField.Invoke(tag, fieldValue, out updated);
                        textField.SetText(updated);
                        fieldValue = updated;
                    }
                }
            }
            if (fieldState == FieldState.Focused && !collided && input.GetMouseClickedIgnoreConsume(InputBindings.primary))
            {
                fieldState = FieldState.Modified;
            }
        }
コード例 #2
0
ファイル: MenuInventory.cs プロジェクト: dionvc/factorygame
        public override void Draw(RenderTexture gui, Vector2i origin, RenderStates guiState)
        {
            RectangleShape frame = new RectangleShape(new Vector2f(32, 32));

            frame.FillColor = Color.Red;
            Vector2f pos = new Vector2f((position + origin).X, (origin + position).Y);

            for (int i = 0; i < inventory.Count; i++)
            {
                frame.Position = pos + new Vector2f((i * 32) % (int)size.X, ((i * 32) / (int)size.X) * 32);
                gui.Draw(frame);
                if (inventory[i] != null)
                {
                    Sprite itemSprite = inventory[i].item.itemSprite.GetSprite();
                    itemSprite.Position = pos + new Vector2f((i * 32) % (int)size.X, (i * 32) / (int)size.X * 32);
                    itemCount.SetText(inventory[i].count.ToString());
                    itemCount.SetTextPosition("right", "bottom");
                    itemCount.SetRelativePosition(position + new Vector2i((i * 32) % (int)size.X - 16, (i * 32) / (int)size.X * 32));
                    gui.Draw(itemSprite);
                    itemCount.Draw(gui, origin, guiState);
                }
            }
            if (hoveredIndex != -1 && inventory[hoveredIndex] != null)
            {
                itemName.SetText(inventory[hoveredIndex].item.name);
                itemName.SetTextPosition("left", "center");
                RectangleShape backdrop = new RectangleShape(new Vector2f(itemName.size.X, itemName.size.Y));
                backdrop.FillColor = new Color(64, 64, 64, 208);
                backdrop.Position  = hoveredPosition;
                gui.Draw(backdrop);
                itemName.SetRelativePosition(new Vector2i((int)hoveredPosition.X, (int)hoveredPosition.Y));
                itemName.Draw(gui, new Vector2i(0, 0), guiState);
            }
            base.Draw(gui, origin, guiState);
        }
コード例 #3
0
ファイル: MenuListBox.cs プロジェクト: dionvc/factorygame
        /// <summary>
        /// A drop down menu implementation.  Very quick if you are selecting from a range of enums.
        /// </summary>
        /// <param name="relativePosition"></param>
        /// <param name="componentSize"></param>
        /// <param name="listHeaders"></param>
        /// <param name="listValues"></param>
        public MenuListBox(Vector2i componentSize, string[] listHeaders, int[] listValues, SelectionMethod applySelection, Font font, uint charSize, int lineSpacing, int initialValue)
        {
            Initialize(componentSize);
            this.listHeaders    = listHeaders;
            this.listValues     = listValues;
            this.applySelection = applySelection;
            this.lineSpacing    = lineSpacing;
            texts        = new MenuText[listHeaders.Length];
            selectedText = new MenuText(this.size, font, "", charSize, 0.6f);
            selectedText.SetRelativePosition(new Vector2i(0, -2));
            selectedValue = initialValue;
            selectedText.SetText(listHeaders[initialValue]);
            selectedText.SetTextPosition("left", "center");
            for (int i = 0; i < listHeaders.Length; i++)
            {
                texts[i] = new MenuText(this.size, font, listHeaders[i], charSize, 0.6f);
                AttachComponent(texts[i]);
                texts[i].SetText(listHeaders[i]);
                texts[i].SetTextPosition("left", "center");
                texts[i].SetRelativePosition(new Vector2i(0, (i + 1) * (lineSpacing + 1) - 2));
                attachedComponents.Clear();
            }
            dropdownBox  = new BoundingBox(new Vector2f(size.X, lineSpacing));
            collisionBox = new BoundingBox(size + new Vector2i(size.Y, 0));
            listboxState = ListBoxState.Normal;

            dropdownMainBox = CreateMenuGraphicArrayWithBorder(new FloatRect(96, 0, 96, 96), 10);
            dropdownArrow   = CreateMenuGraphic(new FloatRect(416, 0, 96, 96), new Vector2i(size.Y, size.Y));
        }
コード例 #4
0
ファイル: MenuListBox.cs プロジェクト: dionvc/factorygame
        public override void HandleInput(InputManager input)
        {
            base.HandleInput(input);
            //Computing absolute position to check collision
            Vector2f      mousePos;
            bool          mouse  = input.GetMousePosition(out mousePos);
            Vector2i      origin = new Vector2i(0, 0);
            MenuComponent bubble = parent;

            while (bubble != null)
            {
                origin += bubble.position;
                bubble  = bubble.parent;
            }
            Vector2f pos      = new Vector2f((position + origin).X, (origin + position).Y);
            bool     collided = BoundingBox.CheckPointMenuCollision(mousePos.X, mousePos.Y, collisionBox, pos);

            if (listboxState == ListBoxState.Normal && collided && input.GetMouseClicked(InputBindings.primary, true))
            {
                listboxState = ListBoxState.Focused;
                parent.PushComponentToFront(this);
                hoveredValue = selectedValue;
            }
            else if (listboxState == ListBoxState.Focused)
            {
                for (int i = 0; i < listHeaders.Length; i++)
                {
                    //check collision for each list header
                    if (BoundingBox.CheckPointMenuCollision(mousePos.X, mousePos.Y, dropdownBox, pos + new Vector2f(0, lineSpacing * (i + 1))))
                    {
                        hoveredValue = i;
                        collided     = true;
                    }
                }
                if (input.GetMouseClickedIgnoreConsume(InputBindings.primary))
                {
                    //don't process a click if it was on the listbox
                    if (collided)
                    {
                        input.GetMouseClicked(InputBindings.primary, true);
                    }
                    selectedValue = hoveredValue;
                    applySelection?.Invoke(tag, listValues[selectedValue]);
                    selectedText.SetText(listHeaders[selectedValue]);
                    listboxState = ListBoxState.Normal;
                }
            }
        }
コード例 #5
0
        public override void Draw(RenderTexture gui, Vector2i origin, RenderStates guiState)
        {
            RectangleShape frame = new RectangleShape(new Vector2f(32, 32));

            frame.FillColor = Color.Red;
            Vector2f pos = new Vector2f((position + origin).X, (origin + position).Y);

            for (int i = 0; i < allowedRecipes.Length; i++)
            {
                frame.Position = pos + new Vector2f((i * 32) % (int)size.X, ((i * 32) / (int)size.X) * 32);
                gui.Draw(frame);
                Sprite recipeSprite = allowedRecipes[i].recipeSprite.GetSprite();
                recipeSprite.Position = pos + new Vector2f((i * 32) % (int)size.X, (i * 32) / (int)size.X * 32);
                gui.Draw(recipeSprite);
            }
            if (hoveredIndex != -1)
            {
                recipeName.SetText(allowedRecipes[hoveredIndex].name);
                recipeName.SetTextPosition("left", "center");
                recipeName.SetRelativePosition(new Vector2i((int)hoveredPosition.X, (int)hoveredPosition.Y));
                recipeName.Draw(gui, new Vector2i(0, 0), guiState);
            }
            base.Draw(gui, origin, guiState);
        }