- 3
- 0
- Версия MoonLoader
- .026-beta
Привет, помогите решить проблему. Уже неделю ломаю голову, что не так.
У меня есть окно imgui, в котором имеется 3 текстовых поля и 3 кнопки. По нажатию кнопки, соответствующее текстовое поле заменяется на поле для ввода, текст на кнопке с "Редактировать" заменяется на "Cохранить". По повторному нажатию инфа с поля для ввода сохраняется в буфер и в словарь(массив пар ключ-значение) пользователя. Повторяющийся код вынес в отдельную функцию.
Проблема в следующем: Сам функционал работает, но почему-то я не могу начать редактирование 2 поля, пока не запущу редактирование 1го, редактирование 3го пока не начну 2го, что требует редактирования 1го. С сохранением аналогично. Пока 1 не сохраню, не могу сохранять 2 и 3, пока не сохраню 2, не могу сохранить 3. Думал, что это может быть из-за того, что я вынес повторяющийся код в отдельную функцию, но нет.
У меня есть окно imgui, в котором имеется 3 текстовых поля и 3 кнопки. По нажатию кнопки, соответствующее текстовое поле заменяется на поле для ввода, текст на кнопке с "Редактировать" заменяется на "Cохранить". По повторному нажатию инфа с поля для ввода сохраняется в буфер и в словарь(массив пар ключ-значение) пользователя. Повторяющийся код вынес в отдельную функцию.
Проблема в следующем: Сам функционал работает, но почему-то я не могу начать редактирование 2 поля, пока не запущу редактирование 1го, редактирование 3го пока не начну 2го, что требует редактирования 1го. С сохранением аналогично. Пока 1 не сохраню, не могу сохранять 2 и 3, пока не сохраню 2, не могу сохранить 3. Думал, что это может быть из-за того, что я вынес повторяющийся код в отдельную функцию, но нет.
Скрипт:
require "lib.moonloader"
local keys = require "vkeys"
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.utf8
local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)
local officer_name = imgui.ImBuffer(256)
local officer_rang = imgui.ImBuffer(256)
local officer_mark = imgui.ImBuffer(256)
local is_nick_changed = imgui.ImBool(false)
local is_rang_changed = imgui.ImBool(false)
local is_mark_changed = imgui.ImBool(false)
local officer = {["Nick"] = "Nickname", ["ID"] = "234", ["Rang"] = "Лейтенант", ["Mark"] = "L-13"}
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
imgui.Process = true
officer_name.v = officer.Nick
officer_rang.v = officer.Rang
officer_mark.v = officer.Mark
while true do
wait(0)
if main_window_state.v == false then imgui.Process = false end
if isKeyJustPressed(VK_MENU) then cmd_imgui() end
end
end
function cmd_imgui()
main_window_state.v = not main_window_state.v
imgui.Process = main_window_state.v
end
function imgui.OnDrawFrame()
imgui.SetNextWindowSize(imgui.ImVec2(400, 200), imgui.Cond.Always)
local x, y = getScreenResolution()
imgui.SetNextWindowPos(imgui.ImVec2(x-200, y-300), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
imgui.Begin("Title", main_window_state)
DataField(u8"Имя и фамилия: ", is_nick_changed, officer_name, officer.Nick)
DataField(u8"Должность: ", is_rang_changed, officer_rang, officer.Rang)
DataField(u8"Маркировка: ", is_mark_changed, officer_mark, officer.Mark)
imgui.End()
end
function DataField(text, is_change_flag, boolField, officerData)
if is_change_flag.v then
imgui.InputText('', boolField)
imgui.SameLine()
if imgui.Button(u8'Сохранить', imgui.ImVec2(100, 18)) then
sampAddChatMessage(is_change_flag, -1)
is_change_flag.v = false
officerData = boolField.v
end
imgui.NewLine()
else
imgui.Text(text..officerData)
imgui.SameLine()
if imgui.Button(u8'Редактировать', imgui.ImVec2(100, 18)) then
sampAddChatMessage(is_change_flag, -1)
is_change_flag.v = true
end
imgui.NewLine()
end
end
Последнее редактирование: