コード例 #1
0
ファイル: MenuInventory.cs プロジェクト: dionvc/factorygame
        public override void HandleInput(InputManager input)
        {
            if (accessedEntity.surface == null || accessingPlayer.surface == null)
            {
                MenuComponent bubbleTest = parent;
                while (bubbleTest.parent != null)
                {
                    bubbleTest = bubbleTest.parent;
                }
                input.menuContainer.RemoveMenu(bubbleTest);
            }
            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;
            }
            Vector2f pos = new Vector2f((position + origin).X, (origin + position).Y);

            if (mouse)
            {
                bool anyCollision = false;
                for (int i = 0; i < inventory.Count; i++)
                {
                    bool collided = BoundingBox.CheckPointMenuCollision(mousePos.X, mousePos.Y, frameBox, pos + new Vector2f((i * 32) % (int)size.X, ((i * 32) / (int)size.X) * 32));
                    if (collided)
                    {
                        anyCollision    = true;
                        hoveredIndex    = i;
                        hoveredPosition = mousePos;
                        if (input.GetMouseClicked(InputBindings.primary, false))
                        {
                            if (accessingPlayer.heldItem != null && inventory[i] != null && ReferenceEquals(accessingPlayer.heldItem.item, inventory[i].item)) //attempt to combine
                            {
                                input.GetMouseClicked(InputBindings.primary, true);
                                int total = inventory[i].count + accessingPlayer.heldItem.count;
                                if (total <= inventory[i].item.maxStack)
                                {
                                    inventory[i].Add(accessingPlayer.heldItem.count);
                                    accessingPlayer.heldItem = null;
                                }
                                else
                                {
                                    inventory[i].SetCount(inventory[i].item.maxStack);
                                    accessingPlayer.heldItem.SetCount(total - inventory[i].item.maxStack);
                                }
                            }
                            else if (accessingPlayer.heldItem != null && allowInsertion) //swap item
                            {
                                input.GetMouseClicked(InputBindings.primary, true);
                                ItemStack temp = inventory[i];
                                inventory[i]             = accessingPlayer.heldItem;
                                accessingPlayer.heldItem = temp;
                            }
                            else if (accessingPlayer.heldItem == null)
                            {
                                input.GetMouseClicked(InputBindings.primary, true);
                                accessingPlayer.heldItem = inventory[i];
                                inventory[i]             = null;
                            }
                        }
                    }
                }
                if (anyCollision == false)
                {
                    hoveredIndex = -1;
                }
            }
            if (mouse && input.GetMouseClicked(InputBindings.secondary, true))
            {
                for (int i = 0; i < inventory.Count; i++)
                {
                    bool collided = BoundingBox.CheckPointMenuCollision(mousePos.X, mousePos.Y, frameBox, pos + new Vector2f((i * 32) % (int)size.X, ((i * 32) / (int)size.X) * 32));
                    if (collided)
                    {
                        if (accessingPlayer.heldItem != null && inventory[i] == null)
                        {
                            int half = accessingPlayer.heldItem.count / 2;
                            inventory[i] = new ItemStack(accessingPlayer.heldItem.item, half);
                            accessingPlayer.heldItem.Subtract(half);
                        }
                        else if (inventory[i] != null && accessingPlayer.heldItem == null)
                        {
                            int half = inventory[i].count / 2;
                            inventory[i].Subtract(half);
                            accessingPlayer.heldItem = new ItemStack(inventory[i].item, half);
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: MenuContainer.cs プロジェクト: dionvc/factorygame
 public void RemoveMenu(MenuComponent menu)
 {
     menus.Remove(menu);
     menu.UnsubscribeToInput(input);
 }
コード例 #3
0
ファイル: MenuContainer.cs プロジェクト: dionvc/factorygame
 public void AttachMenu(MenuComponent menu)
 {
     menu.container = this;
     menus.Insert(0, menu);
     menu.SubscribeToInput(input);
 }
コード例 #4
0
ファイル: MenuComponent.cs プロジェクト: dionvc/factorygame
 public void AttachComponent(MenuComponent component)
 {
     component.parent = this;
     attachedComponents.Add(component);
 }
コード例 #5
0
ファイル: MenuComponent.cs プロジェクト: dionvc/factorygame
        /// <summary>
        /// Position the component relative to another component
        /// </summary>
        /// <param name="component"></param>
        public void SetInitialPosition(MenuComponent component)
        {
            relativeComponent = component;
            Vector2i      origin = new Vector2i(0, 0);
            MenuComponent bubble = component;

            while (bubble != null)
            {
                origin += bubble.position;
                bubble  = bubble.parent;
            }
            Vector2i thisOrigin = new Vector2i(0, 0);

            bubble = this.parent;
            while (bubble != null)
            {
                thisOrigin += bubble.position;
                bubble      = bubble.parent;
            }
            Vector2i relativeToThis = origin - thisOrigin;

            if (pivot3 == "inside")
            {
                position = new Vector2i(relativeToThis.X + component.size.X / 2 - size.X / 2, relativeToThis.Y + component.size.Y / 2 - size.Y / 2);
                if (pivot1 == "top" || pivot2 == "top")
                {
                    position += new Vector2i(0, size.Y + margin - component.size.Y / 2);
                }
                if (pivot1 == "bottom" || pivot2 == "bottom")
                {
                    position += new Vector2i(0, component.size.Y / 2 - size.Y - margin);
                }
                if (pivot1 == "left" || pivot2 == "left")
                {
                    position += new Vector2i(margin + size.X - component.size.X / 2, 0);
                }
                if (pivot1 == "right" || pivot2 == "right")
                {
                    position += new Vector2i(component.size.X / 2 - size.X - margin, 0);
                }
            }
            else
            {
                position = new Vector2i(relativeToThis.X + component.size.X / 2 - size.X / 2, relativeToThis.Y + component.size.Y / 2 - size.Y / 2);
                if (pivot1 == "top" || pivot2 == "top")
                {
                    position += new Vector2i(0, -size.Y - margin - component.size.Y / 2);
                }
                if (pivot1 == "bottom" || pivot2 == "bottom")
                {
                    position += new Vector2i(0, component.size.Y / 2 + margin + size.Y / 2);
                }
                if (pivot1 == "left" || pivot2 == "left")
                {
                    position += new Vector2i(-size.X - component.size.X / 2 - margin, 0);
                }
                if (pivot1 == "right" || pivot2 == "right")
                {
                    position += new Vector2i(component.size.X / 2 + margin + size.X / 2, 0);
                }
            }
        }
コード例 #6
0
ファイル: MenuFactory.cs プロジェクト: dionvc/factorygame
        public MenuComponent CreatePlayerProgressBar(Camera camera, Player player, string tag, Color color, MenuComponent relativeComponent)
        {
            MenuProgressBar progressBar = new MenuProgressBar(new Vector2i(512, 16), new FloatRect(0, 0, 32, 32), new FloatRect(0, 0, 32, 32), player.GetProgress, color);

            progressBar.tag = tag;
            if (relativeComponent == null)
            {
                progressBar.SetPivots("center", "bottom", "inside", 8);
                progressBar.SetInitialPosition(camera.GetGUIView());
            }
            progressBar.hideWhenEmpty = true;
            progressBar.hideWhenFull  = true;
            menuContainer.AttachMenu(progressBar);
            return(progressBar);
        }