--@name hud lib --@client --@owneronly enableHud(nil,true) function createWindow(name, x, y, w, h) return { name = name, x = x, y = y, w = w, h = h, draw = false, child = {}, dragging = false, dragOffset = {0, 0} } end local curx, cury = input.getCursorPos() local cursorpos = {curx, cury} local mousedown = false local lastmousedown = false timer.create("cursor", 0.01, 0, function() curx, cury = input.getCursorPos() cursorpos = {curx, cury} mousedown = input.isMouseDown(MOUSE.MOUSE1) end) local function isCursorOver(x, y, w, h) return cursorpos[1] > x and cursorpos[1] < x + w and cursorpos[2] > y and cursorpos[2] < y + h end function toggleWindow(window) window.draw = not window.draw input.enableCursor(window.draw) end function addChild(window, child) table.insert(window.child, child) end function createLabel(text, x, y) return { type = "label", text = text, x = x, y = y } end function createButton(text, x, y, w, h, onclick) return { type = "button", text = text, x = x, y = y, w = w, h = h, onclick = onclick } end function createEntry(x, y, w, h, text) return { type = "entry", x = x, y = y, w = w, h = h, text = text or "", active = false } end function createCheckbox(x, y, checked) return { type = "checkbox", x = x, y = y, checked = checked or false } end function createSlider(x, y, w, min, max, value) return { type = "slider", x = x, y = y, w = w, min = min, max = max, value = value or min } end function createDropdown(x, y, w, options, selected) return { type = "dropdown", x = x, y = y, w = w, options = options, selected = selected or 1, expanded = false } end hook.add("inputPressed", "entryInput", function(key) for _, window in pairs(windows or {}) do for _, child in ipairs(window.child) do if child.type == "entry" and child.active then if key == KEY.BACKSPACE then child.text = child.text:sub(1, -2) elseif key >= 32 and key <= 126 then child.text = child.text .. string.char(key) end end end end end) function drawWindow(window) if not window.draw then return end render.setColor(Color(80, 80, 80)) render.drawRect(window.x, window.y, window.w, window.h) for _, child in ipairs(window.child) do if child.type == "label" then render.drawSimpleText(window.x + child.x, window.y + child.y, child.text, 0, 1) elseif child.type == "button" then local hovered = isCursorOver(window.x + child.x, window.y + child.y, child.w, child.h) local color = hovered and Color(0, 180, 220) or Color(0, 150, 200) render.setColor(color) render.drawRect(window.x + child.x, window.y + child.y, child.w, child.h) render.setColor(Color(255, 255, 255)) render.drawSimpleText(window.x + child.x + child.w / 2, window.y + child.y + child.h / 2, child.text, 1, 1) if hovered and mousedown and not lastmousedown then child.onclick() end elseif child.type == "checkbox" then render.setColor(child.checked and Color(0, 255, 0) or Color(255, 0, 0)) render.drawRect(window.x + child.x, window.y + child.y, 15, 15) if isCursorOver(window.x + child.x, window.y + child.y, 15, 15) and mousedown and not lastmousedown then child.checked = not child.checked end elseif child.type == "slider" then render.setColor(Color(150, 150, 150)) render.drawRect(window.x + child.x, window.y + child.y, child.w, 5) local sliderPos = child.x + ((child.value - child.min) / (child.max - child.min)) * child.w render.setColor(Color(255, 255, 255)) render.drawRect(window.x + sliderPos - 5, window.y + child.y - 5, 10, 15) if isCursorOver(window.x + sliderPos - 5, window.y + child.y - 5, 10, 15) and mousedown then child.value = math.clamp(((cursorpos[1] - window.x - child.x) / child.w) * (child.max - child.min) + child.min, child.min, child.max) end elseif child.type == "dropdown" then render.setColor(Color(200, 200, 200)) render.drawRect(window.x + child.x, window.y + child.y, child.w, 20) render.setColor(Color(0, 0, 0)) render.drawSimpleText(window.x + child.x + 5, window.y + child.y + 5, child.options[child.selected], 0, 1) if isCursorOver(window.x + child.x, window.y + child.y, child.w, 20) and mousedown and not lastmousedown then child.expanded = not child.expanded end if child.expanded then for i, option in ipairs(child.options) do render.setColor(Color(180, 180, 180)) render.drawRect(window.x + child.x, window.y + child.y + 20 * i, child.w, 20) render.setColor(Color(0, 0, 0)) render.drawSimpleText(window.x + child.x + 5, window.y + child.y + 5 + 20 * i, option, 0, 1) if isCursorOver(window.x + child.x, window.y + child.y + 20 * i, child.w, 20) and mousedown then child.selected = i child.expanded = false end end end end end lastmousedown = mousedown end