как закрыть вкладку?

RICJS29_JSJA

Участник
Автор темы
77
2
Версия MoonLoader
Другое
1711491087001.png

Ну вот к примеру Инструменты нажимаю и все. закрываеться только когда скрипт перезагружаю
 

RICJS29_JSJA

Участник
Автор темы
77
2
то, что относится к вопросу
Lua:
  if tab == 1 then
    if imgui.Button(u8'Перезагрузить скрипт') then
    showCursor(false)
    sampAddChatMessage(tag ..' Перезагружается...', -1)
    thisScript():reload()
    end
  if imgui.Button(u8'Выключить скрипт') then
    showCursor(false)
    sampAddChatMessage(tag ..' Выключен. Приятной игры')
    thisScript():unload()
    end
  end
 

Scratchwroom

Участник
107
13
Lua:
  if tab == 1 then
    if imgui.Button(u8'Перезагрузить скрипт') then
    showCursor(false)
    sampAddChatMessage(tag ..' Перезагружается...', -1)
    thisScript():reload()
    end
  if imgui.Button(u8'Выключить скрипт') then
    showCursor(false)
    sampAddChatMessage(tag ..' Выключен. Приятной игры')
    thisScript():unload()
    end
  end
Это относится вообще к перезагрузке скрипта а не к закрытию окна имгуи))

Скинь ссылку на скрипт может чем помогу
 
  • Клоун
Реакции: Fott

RICJS29_JSJA

Участник
Автор темы
77
2
Тогда полностью код скрипта
Lua:
require 'lib.moonloader'

local imgui = require 'imgui'
local key = require 'vkeys'
local rkeys = require 'rkeys'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local main_window_state = imgui.ImBool(false)
local secondary_window_state = imgui.ImBool(false)
local eblandary_window_state = imgui.ImBool(false)
local pidaratry_window_state = imgui.ImBool(false)

local inicfg = require 'inicfg'

local cfg = inicfg.load({
    main = {   
        rang = '',
        frac = ''
    },
}, "swatscript")
--
local text = imgui.ImBuffer(tostring(cfg.main.rang), 256)
local text2 = imgui.ImBuffer(tostring(cfg.main.frac), 256)

local tab = 0

local sw, sh = getScreenResolution()
local tag = '{808080}[SWAT SCRIPT]{ffffff}:'

local strings = [[Бомба с дистанционным управлением
Бомба с дистанционным управлением если {008000}[Удачно]{ffffff}
Бомба с дистанционным управлением если {008000}[Нашел осн.заряд]{ffffff}
Бомба с дистанционным управлением если {ff0000}[Не нашел осн.заряд]{ffffff}
Бомба с дистанционным управлением если {ff0000}[Неудачно]{ffffff}
]]
---меню

function imgui.OnDrawFrame()

  if not main_window_state.v and not secondary_window_state.v and not eblandary_window_state.v and not pidaratry_window_state.v then
    imgui.Process = false
  end
  if main_window_state.v then
  imgui.SetNextWindowSize(imgui.ImVec2(500, 300), imgui.Cond.FirstUseEver)
  imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))

  imgui.Begin(u8'SWAT SCRIPT | Главное меню | Версия: 1.00', main_window_state,  imgui.WindowFlags.NoResize)
  imgui.CenterText(u8'Скрипт для SWAT | Автор: Marcus_Kransov | Server: Underground')
  imgui.Separator()
    imgui.Text('')
  imgui.SetCursorPos(imgui.ImVec2(150,50))
  if imgui.Button(u8'Помощь по скрипту', imgui.ImVec2(200, 30)) then
    secondary_window_state.v = true
  end
  imgui.SetCursorPos(imgui.ImVec2(150,84))
  if imgui.Button(u8'Настройки скрипта', imgui.ImVec2(200, 30)) then
    pidaratry_window_state.v = true
  end
  imgui.Separator()
  if imgui.Button(u8'Инструменты') then tab = 1 end
  imgui.SameLine()
  if imgui.Button(u8'Полезная информация') then tab = 2 end

  if tab == 1 then
    if imgui.Button(u8'Перезагрузить скрипт') then
    showCursor(false)
    sampAddChatMessage(tag ..' Перезагружается...', -1)
    thisScript():reload()
    end
  if imgui.Button(u8'Выключить скрипт') then
    showCursor(false)
    sampAddChatMessage(tag ..' Выключен. Приятной игры')
    thisScript():unload()
    end
  end
  if tab == 2 then
    imgui.CenterText(u8'Текст копируется при нажатии. вставить в браузер')
  if imgui.Button(u8'ЕКП') then
    setClipboardText("https://samp-rp.online/threads/edinyj-kodeks-pravonarushenij.2497691/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Единый кодекс правонарушений')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'ФП') then
    setClipboardText("https://samp-rp.online/threads/federalnoe-postanovlenie-fp.2531396/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Федеральное постановление')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'ОПГО') then
    setClipboardText("https://samp-rp.online/threads/obschee-polozhenie-dlja-gosudarstvennyx-organizacij-opgo.2501534/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Общее положение гос.структур')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'Конституция') then
    setClipboardText("https://samp-rp.online/threads/konstitucija.2487411/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Конституция')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'Рейтинг SAPD') then
    setClipboardText("https://samp-rp.online/threads/sistema-rejtingov-sapd.2532118/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'система рейтинга SAPD')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'FAQ') then
    setClipboardText("https://samp-rp.online/threads/faq.2490746/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'FAQ')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'BadCops') then
    setClipboardText("https://samp-rp.online/threads/pravila-bad-cops.2507848/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Правила BadCops')
    imgui.EndTooltip()
  end
  if imgui.Button(u8'Похищения/Теракты') then
    setClipboardText("https://samp-rp.online/threads/pravila-poxischenij-i-teraktov.2481228/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Правила похищений & терактов')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'Федеральные законы') then
    setClipboardText("https://samp-rp.online/forums/federalnye-zakony.1848/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Федеральные законы')
    imgui.EndTooltip()
  end
imgui.SameLine()
  if imgui.Button(u8'Форум') then
    setClipboardText("https://samp-rp.online/")
  end
imgui.SameLine()
  imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
    imgui.BeginTooltip()
    imgui.Text(u8'Форум SAMP RP')
    imgui.EndTooltip()
  end
end
  imgui.End()
  end
  if secondary_window_state.v then
    imgui.SetNextWindowSize(imgui.ImVec2(300, 300), imgui.Cond.FirstUseEver)
  imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))

    imgui.Begin(u8'SWAT SCRIPT | Команды скрипта', secondary_window_state, imgui.WindowFlags.NoResize)
    if imgui.CollapsingHeader(u8'/swt') then
      imgui.TextWrapped(u8'Описание: открыть/закрыть меню\nИспользование: /swt')
  end
    if imgui.CollapsingHeader(u8'/bmb') then
    imgui.TextWrapped(u8'Описание: Открыть меню с разм. бомбы\nИспользование: /bmb')
  end
    if imgui.CollapsingHeader(u8'/pmp') then
    imgui.TextWrapped(u8'Описание: Первая мед. помощь\nИспользование: /pmp')
  end
    if imgui.CollapsingHeader(u8'/bal') then
    imgui.TextWrapped(u8'Описание: Одеть балаклаву\nИспользование: /bal')
  end
    if imgui.CollapsingHeader(u8'/otm') then
    imgui.TextWrapped(u8'Описание: Отмычка\nИспользование: /otm')
  end
    if imgui.CollapsingHeader(u8'/c2') then
    imgui.TextWrapped(u8'Описание: Взрывчатка\nИспользование: /c2')
  end
    if imgui.CollapsingHeader(u8'/showudo') then
    imgui.TextWrapped(u8'Описание: Удостоверение\nИспользование: /showudo\nВыведет: "' .. nick .. ' | ' .. cfg.main.rang .. ' | ' .. cfg.main.frac .. '"')
  end
    if imgui.CollapsingHeader(u8'/prp') then
    imgui.TextWrapped(u8'Описание: Зачитать права задержанному\nИспользование: /prp')
  end
    if imgui.CollapsingHeader(u8'/geat') then
    imgui.TextWrapped(u8'Описание: Ест грибы до 50 сытости\nИспользование: /geat')
  end
    if imgui.CollapsingHeader(u8'/gheal') then
    imgui.TextWrapped(u8'Описание: /grib heal\nИспользование: /gheal')
    end
    if imgui.Button(u8'Бинды скрипта', imgui.ImVec2(300, 30)) then
      eblandary_window_state.v = true
    end
    imgui.End()
  end
  if eblandary_window_state.v then
    imgui.SetNextWindowSize(imgui.ImVec2(410, 200), imgui.Cond.FirstUseEver)
  imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))

    imgui.Begin(u8'SWAT SCRIPT | Бинды скрипта', eblandary_window_state, imgui.WindowFlags.NoResize)
    imgui.Text(u8'Alt + 1 - Балаклава | Alt + 3 - Требования | L - Открыть/Закрыть авто\nB + 7 - Вкл. Body Cam | B + 8 - Состояние Body Cam | B + 9 - Выкл.\n', -1)
    imgui.End()
  end
  if pidaratry_window_state.v then
    imgui.SetNextWindowSize(imgui.ImVec2(410, 80), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))

    imgui.Begin(u8'SWAT SCRIPT | Настройки скрипта', pidaratry_window_state, imgui.WindowFlags.NoResize)
  if imgui.InputText(u8'Введите Ранг', text) then
      cfg.main.rang = text.v
      inicfg.save(cfg, 'swatscript.ini')
  end
  imgui.SameLine()
    imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
      imgui.BeginTooltip()
      imgui.Text(u8'Введите ваш ранг в организации')
      imgui.EndTooltip()
  end
  if imgui.InputText(u8'Ваша организация', text2) then
    cfg.main.frac = text2.v
    inicfg.save(cfg, 'swatscript.ini')
  end
  imgui.SameLine()
    imgui.TextDisabled('(?)')
  if imgui.IsItemHovered() then
      imgui.BeginTooltip()
      imgui.Text(u8'Введите организацию в которой состоите (на ENG)')
      imgui.EndTooltip()
  end
    imgui.End()
  end
end
---------------------------------------------------------------------

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end

imgui.Process = false

    sampAddChatMessage(tag ..' Загружен, активация: /swt', 0xFFFFFF)

    _, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    nick = sampGetPlayerNickname(id)

    ---
    sampRegisterChatCommand('swt', cmd_swt)
    sampRegisterChatCommand('tst', cmd_tst)
    sampRegisterChatCommand('showudo', cmd_showudo)
    --
    sampRegisterChatCommand('bmb', cmd_bmb)
    sampRegisterChatCommand('pmp', cmd_pmp)
    sampRegisterChatCommand('bal', cmd_bal)
    sampRegisterChatCommand('otm', cmd_otm)
    sampRegisterChatCommand('c2', cmd_c2)
    sampRegisterChatCommand('pre', cmd_pre)
    sampRegisterChatCommand('geat', cmd_geat)
    sampRegisterChatCommand('gheal', cmd_gheal)

  while true do
    wait(0)

local result, button, list, input = sampHasDialogRespond(12)
if result then
  if button == 1 and list == 0 then
    sampSendChat('/me достал из подсумка складную отвертку и саперные щипчики')
  wait(2000)
    sampSendChat('/me осмотрел бомбу')
  wait(2000)
    sampSendChat('/do Определил тип взрывного устройства "Бомба с дистанционным управлением"')
  wait(2000)
    sampSendChat('/do Корпус бомбы держится на четырёх болтах.')
  wait(2000)
    sampSendChat('/me положил сапёрные щипчики рядом с собой')
  wait(2000)
    sampSendChat('/me открутил четыре болта на бомбе, положил отвёртку на пол')
  wait(2000)
    sampSendChat('/me двумя руками вскрыл корпус бомбы, осмотрел бомбу')
  wait(2000)
    sampSendChat('/try нашёл детонатор') end
  if button == 1 and list == 1 then
    sampSendChat('/me внимательно изучил провода ведущие к детонатору')
  wait(2000)
    sampSendChat('/me отрезал нужный провод')
  wait(2000)
    sampSendChat('/me аккуратно перевернул бомбу другой стороной')
  wait(2000)
    sampSendChat('/try нашёл основной заряд') end
  if button == 1 and list == 2 then
    sampSendChat('/me отсоединил заряд')
    wait(2000)
    sampSendChat('/do Бомба обезврежена')
    wait(2000)
    sampSendChat('/me убрал сапёрные щипчики и отвёртку в ящик')
  end
  if button == 1 and list == 3 then
    sampSendChat('/try нашёл основной заряд')
  end
  if button == 1 and list == 4 then
    sampSendChat('/me осмотрел бомбу')
  wait(1000)
    sampSendChat('/try нашёл детонатор') end
end

-----Бинды на клавишу
    if wasKeyPressed(VK_L) and not sampIsChatInputActive() and not sampIsDialogActive() then
    sampSendChat("/lock")
    end
    if isKeyDown(VK_MENU) and isKeyJustPressed(VK_3) then
      sampSendChat('/s Никому не двигаться! работает SWAT')
      wait(1000)
      sampSendChat('/b /anim 3 7')
    end
    if isKeyDown(VK_MENU) and isKeyJustPressed(VK_1) then
      sampSendChat('/do На голове надета балаклава, на руках тактические перчатки.')
      wait(1000)
      sampSendChat('/do Опознавательные знаки отсутствуют . Распознать личность невозможно.')
    end
    if isKeyDown(VK_B) and isKeyJustPressed(VK_O) then
      sampSendChat('/me нажал на кнопку на нагрудной камере «Body Cam G-101» и включил запись.')
    end
    if isKeyDown(VK_B) and isKeyJustPressed(VK_O) then
      sampSendChat('/do Нагрудная камера «Body Cam G-101» ведет запись с передачей на SD-карту.')
       wait(1000)
      sampSendChat('/time')
    end
    if isKeyDown(VK_B) and isKeyJustPressed(VK_O) then
      sampSendChat('/me нажал на кнопку на нагрудной камере и выключил запись.')
    end
  end
end

-------Команды
function cmd_tst(arg)
  sampSendChat('/b ' .. nick .. ' | ' .. u8:decode(cfg.main.rang) .. ' | ' .. cfg.main.frac .. '.')
end
function cmd_swt(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end
function cmd_bmb(arg)
    sampShowDialog(12, 'SWAT SCRIPT | Разминирование бомбы', strings, 'Выбрать', 'Закрыть', 2)
end
function cmd_pmp(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/me осмотрел рану')
      wait(1000)
      sampSendChat('/do в левом подсумке жгут')
      wait(1000)
      sampSendChat('/me достал жгут, затем наложил его')
      wait(1000)
      sampSendChat('/do Кровотечение остановлено')
      wait(1000)
      sampSendChat('/me достал спирт, брызнул на рану')
      wait(1000)
      sampSendChat('/me достал бинт, наложил асептическую повязку')
  end, arg)
end
function cmd_bal(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/me достал из кармана балаклаву, натянул на голову')
      wait(1000)
      sampSendChat('/do На голове балаклава, на руках перчатки. Личность опознать невозможно.')
      wait(1000)
      sampSendChat('/clist 32')
    end, arg)
end
function cmd_otm(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/me достал из подсумка универсальный набор отмычек, осмотрел замок')
      wait(1000)
      sampSendChat('/do Определил тип замка, и осмотрел внимательнее')
      wait(1000)
      sampSendChat('/me подносит отмычку к замку')
      wait(1000)
      sampSendChat('/do Отмычка в руке.')
      wait(1000)
      sampSendChat('/me провернул манипуляцию с замком после чего тот открылся')
      wait(1000)
      sampSendChat('/do Замок успешно открыт.')
      wait(1000)
      sampSendChat('/todo Готово, можем входить*придерживая ручку двери.')
    end, arg)
 
end
function cmd_c2(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/me достал из подсумка взрывчатку C2')
      wait(1000)
      sampSendChat('/do Взрывчатка в руках')
      wait(1000)
      sampSendChat('/me установил взрывчатку на дверь, взвёл таймер на взрывчатке')
      wait(1000)
      sampSendChat('/do Взрывчатка активирована')
      wait(1000)
      sampSendChat('/do Взрыв произошёл успешно, Дверь открыта.')
  end, arg)
end
function cmd_showudo(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/do В заднем кармане штанов лежит удостоверение')
    wait(1000)
      sampSendChat('/todo Подождите секунду*сунув руку в карман')
    wait(1000)
      sampSendChat('/me правой рукой вытащил удостоверение из штанов')
    wait(1000)
      sampSendChat('/do В удостоверении написано: ' .. nick .. ' | ' .. u8:decode(cfg.main.rang) .. ' | ' .. cfg.main.frac .. '.')
  end, arg)
end
function cmd_pre(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('Вы вправе не отвечать на вопросы без присутствия своего адвоката.')
    wait(1500)
      sampSendChat('Все сказанное вами будет использовано против вас в суде.')
    wait(1500)
      sampSendChat('По вашей просьбе вам предоставят государственного защитника.')
    wait(1500)
      sampSendChat('Вам ясны ваши права?')
  end, arg)
end
function cmd_geat(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/grib eat')
    wait(1000)
      sampSendChat('/grib eat')
    wait(1000)
      sampSendChat('/grib eat')
    wait(1000)
      sampSendChat('/grib eat')
    wait(1000)
      sampSendChat('/grib eat')
  end, arg)
end
function cmd_gheal(arg)
  lua_thread.create(
    function(arg)
      sampSendChat('/grib heal')
    end, arg)
end
------------------------------------------------------------------------------------------------------------------------------------
function theme()
  imgui.SwitchContext()
  local style                      = imgui.GetStyle()
  local colors                     = style.Colors
  local clr                        = imgui.Col
  local ImVec4                     = imgui.ImVec4
  local ImVec2                     = imgui.ImVec2

  style.WindowPadding              = ImVec2(8, 8)
  style.WindowRounding             = 5.0
  style.ChildWindowRounding        = 5.0
  style.FramePadding               = ImVec2(2, 2)
  style.FrameRounding              = 5.0
  style.ItemSpacing                = ImVec2(5, 5)
  style.ItemInnerSpacing           = ImVec2(5, 5)
  style.TouchExtraPadding          = ImVec2(0, 0)
  style.IndentSpacing              = 5.0
  style.ScrollbarSize              = 13.0
  style.ScrollbarRounding          = 5.0
  style.GrabMinSize                = 20.0
  style.GrabRounding               = 5.0
  style.WindowTitleAlign           = ImVec2(0.5, 0.5)

  colors[clr.Text]                 = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.TextDisabled]         = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.WindowBg]             = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.ChildWindowBg]        = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.PopupBg]              = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.Border]               = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.BorderShadow]         = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.FrameBg]              = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.FrameBgHovered]       = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.FrameBgActive]        = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.TitleBg]              = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.TitleBgCollapsed]     = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.TitleBgActive]        = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.MenuBarBg]            = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.ScrollbarBg]          = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.ScrollbarGrab]        = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.ScrollbarGrabHovered] = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.ScrollbarGrabActive]  = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.ComboBg]              = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.CheckMark]            = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.SliderGrab]           = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.SliderGrabActive]     = ImVec4(1.00, 1.00, 1.00, 1.00)
  colors[clr.Button]               = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.ButtonHovered]        = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.ButtonActive]         = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.Header]               = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.HeaderHovered]        = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.HeaderActive]         = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.ResizeGrip]           = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.ResizeGripHovered]    = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.ResizeGripActive]     = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.CloseButton]          = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.CloseButtonHovered]   = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.CloseButtonActive]    = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.PlotLines]            = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.PlotLinesHovered]     = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.PlotHistogram]        = ImVec4(0.13, 0.13, 0.13, 1.00)
  colors[clr.PlotHistogramHovered] = ImVec4(0.20, 0.20, 0.20, 1.00)
  colors[clr.TextSelectedBg]       = ImVec4(0.05, 0.05, 0.05, 1.00)
  colors[clr.ModalWindowDarkening] = ImVec4(1.00, 1.00, 1.00, 1.00)
end
theme()

function imgui.CenterText(text)
  local width = imgui.GetWindowWidth()
  local size = imgui.CalcTextSize(text)
  imgui.SetCursorPosX(width / 2 - size.x / 2)
  imgui.Text(text)
end