- 371
- 93
- Версия MoonLoader
- .026-beta
Здравствуйте, имеется скрипт с возможностью создавать вкладки(mimgui), а в этих вкладках можно создавать/удалять/включать инпуты для ренда объектов(добавляю модели и т.п). Столкнулся с резкой просадкой ФПС при активации рендера, чем больше активируешь, тем больше падает ФПС. Да, рендер на mimgui.
Сама проблема, как я понял, в циклах, но я не знаю как сделать по-другому, чтобы код и работал и был оптимизированее)) Подскажите, как же можно оптимизировать это дело?
Сама проблема, как я понял, в циклах, но я не знаю как сделать по-другому, чтобы код и работал и был оптимизированее)) Подскажите, как же можно оптимизировать это дело?
Lua:
local cfg = json(fileName):Load({
theme = 1,
state = false,
DATA = {
{
name = u8('Новая вкладка'),
data = {},
settings = {
color = {1, 1, 1, 1},
toggleLine = false,
toggle = false,
sizeText = 14
}
}
}
})
Lua:
local frameDrawList = imgui.OnFrame(
function() return true and not isPauseMenuActive() end,
function(self)
self.HideCursor = true
local DL = imgui.GetBackgroundDrawList()
local json = prepareJSON(cfg.DATA)
for _, tab in ipairs(cfg.DATA) do
for _, data in ipairs(tab.data) do
if data.bool then
if data.name ~= "" and data.model ~= "" and data.material ~= "" then -- Если инпуты не пустые
for k, v in pairs(getAllObjects()) do
if isObjectOnScreen(v) then
local success, objectId = pcall(sampGetObjectSampIdByHandle, v)
if success and objectId > 0 then
if getObjectModel(v) == tonumber(data.model) then -- Если модель объекта равна модели, которая в инпуте
local color = sampGetObjectMaterialColor(objectId, 0) -- Получаем цвет объекта
if color == tonumber(data.material) then -- Если полученный цвет объекта равен цвету в инпуте
local _, Ox, Oy, Oz = getObjectCoordinates(v) -- Получаем координаты этого объекта
local cX, cY = convert3DCoordsToScreen(Ox,Oy,Oz)
-- Рендерим на координаты цветного объекта
local colorVec4 = {tab.settings.color[1], tab.settings.color[2], tab.settings.color[3], tab.settings.color[4]}
local sizeText = tonumber(tab.settings.sizeText)
DL:AddTextFontPtr(font[30], sizeText, imgui.ImVec2(cX, cY), imgui.GetColorU32Vec4(colorVec4), data.name);
if tab.settings.toggleLine then
local mPx, mPy, mPz = getCharCoordinates(PLAYER_PED)
local CPx, CPy = convert3DCoordsToScreen(mPx,mPy,mPz)
DL:AddLine(imgui.ImVec2(CPx, CPy), imgui.ImVec2(cX, cY), imgui.GetColorU32Vec4(colorVec4), 1.5);
DL:AddCircleFilled(imgui.ImVec2(cX, cY), 3, imgui.GetColorU32Vec4(colorVec4));
end
end
end
end
end
end
end
end
end
end
end
)
Последнее редактирование: