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); } } } } }
public void RemoveMenu(MenuComponent menu) { menus.Remove(menu); menu.UnsubscribeToInput(input); }
public void AttachMenu(MenuComponent menu) { menu.container = this; menus.Insert(0, menu); menu.SubscribeToInput(input); }
public void AttachComponent(MenuComponent component) { component.parent = this; attachedComponents.Add(component); }
/// <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); } } }
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); }