--[[ This example shows how to create a basic custom GUI. The GUI will appear top right of your in game screen. --]] if SERVER then return end -- we don't want server to run GUI code. local modPath = ... -- our main frame where we will put our custom GUI local frame = GUI.Frame(GUI.RectTransform(Vector2(1, 1)), nil) frame.CanBeFocused = false -- menu frame local menu = GUI.Frame(GUI.RectTransform(Vector2(1, 1), frame.RectTransform, GUI.Anchor.Center), nil) menu.CanBeFocused = false menu.Visible = false -- put a button that goes behind the menu content, so we can close it when we click outside local closeButton = GUI.Button(GUI.RectTransform(Vector2(1, 1), menu.RectTransform, GUI.Anchor.Center), "", GUI.Alignment.Center, nil) closeButton.OnClicked = function () menu.Visible = not menu.Visible end -- a button top right of our screen to open a sub-frame menu local button = GUI.Button(GUI.RectTransform(Vector2(0.2, 0.2), frame.RectTransform, GUI.Anchor.TopRight), "Custom GUI Example", GUI.Alignment.Center, "GUIButtonSmall") button.RectTransform.AbsoluteOffset = Point(25, 200) button.OnClicked = function () menu.Visible = not menu.Visible end local menuContent = GUI.Frame(GUI.RectTransform(Vector2(0.4, 0.6), menu.RectTransform, GUI.Anchor.Center)) local menuList = GUI.ListBox(GUI.RectTransform(Vector2(1, 1), menuContent.RectTransform, GUI.Anchor.BottomCenter)) GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.05), menuList.Content.RectTransform), "This is a sample text!", nil, nil, GUI.Alignment.Center) for i = 1, 10, 1 do local coloredText = GUI.TextBlock(GUI.RectTransform(Vector2(1, 0.025), menuList.Content.RectTransform), "This is some colored text!", nil, nil, GUI.Alignment.Center) coloredText.TextColor = Color(math.random(0, 255), math.random(0, 255), math.random(0, 255)) end local textBox = GUI.TextBox(GUI.RectTransform(Vector2(1, 0.2), menuList.Content.RectTransform), "This is a text box") textBox.OnTextChangedDelegate = function (textBox) print(textBox.Text) end local tickBox = GUI.TickBox(GUI.RectTransform(Vector2(1, 0.2), menuList.Content.RectTransform), "This is a tick box") tickBox.Selected = true tickBox.OnSelected = function () print(tickBox.Selected) end local numberInput = GUI.NumberInput(GUI.RectTransform(Vector2(1, 0.1), menuList.Content.RectTransform), NumberType.Float) numberInput.MinValueFloat = 0 numberInput.MaxValueFloat = 1000 numberInput.valueStep = 1 numberInput.OnValueChanged = function () print(numberInput.FloatValue) end local scrollBar = GUI.ScrollBar(GUI.RectTransform(Vector2(1, 0.1), menuList.Content.RectTransform), 0.1, nil, "GUISlider") scrollBar.Range = Vector2(0, 100) scrollBar.BarScrollValue = 50 scrollBar.OnMoved = function () print(scrollBar.BarScrollValue) end local someButton = GUI.Button(GUI.RectTransform(Vector2(1, 0.1), menuList.Content.RectTransform), "This is a button", GUI.Alignment.Center, "GUIButtonSmall") someButton.OnClicked = function () print("button") end local dropDown = GUI.DropDown(GUI.RectTransform(Vector2(1, 0.05), menuList.Content.RectTransform), "This is a dropdown", 3, nil, false) dropDown.AddItem("First Item", 0) dropDown.AddItem("Second Item", 1) dropDown.AddItem("Third Item", 2) dropDown.OnSelected = function (guiComponent, object) print(object) end local multiDropDown = GUI.DropDown(GUI.RectTransform(Vector2(1, 0.05), menuList.Content.RectTransform), "This is a multi-dropdown", 3, nil, true) multiDropDown.AddItem("First Item", 0) multiDropDown.AddItem("Second Item", 1) multiDropDown.AddItem("Third Item", 2) multiDropDown.OnSelected = function (guiComponent, object) for value in multiDropDown.SelectedDataMultiple do print(value) end end local imageFrame = GUI.Frame(GUI.RectTransform(Point(65, 65), menuList.Content.RectTransform), "GUITextBox") imageFrame.RectTransform.MinSize = Point(0, 65) local sprite = ItemPrefab.GetItemPrefab("bandage").InventoryIcon local image = GUI.Image(GUI.RectTransform(Vector2(1, 1), imageFrame.RectTransform, GUI.Anchor.Center), sprite) image.ToolTip = "Bandages are pretty cool" local customImageFrame = GUI.Frame(GUI.RectTransform(Point(128, 128), menuList.Content.RectTransform), "GUITextBox") customImageFrame.RectTransform.MinSize = Point(138, 138) --local customSprite = Sprite(modPath .. "/luasmall.png") GUI.Image(GUI.RectTransform(Point(65, 65), customImageFrame.RectTransform, GUI.Anchor.Center), customSprite) Hook.Patch("Barotrauma.GameScreen", "AddToGUIUpdateList", function() frame.AddToGUIUpdateList() end) Hook.Patch("Barotrauma.SubEditorScreen", "AddToGUIUpdateList", function() frame.AddToGUIUpdateList() end)