Skip to content

Commit

Permalink
Add settings tab to lang files.
Browse files Browse the repository at this point in the history
Add settings tab to lang files. Preparing for lightmap scale
  • Loading branch information
UnrealKaraulov committed Dec 13, 2023
1 parent 38fa5f6 commit 4e97fa8
Show file tree
Hide file tree
Showing 6 changed files with 149 additions and 27 deletions.
9 changes: 8 additions & 1 deletion cfg/language.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1181,4 +1181,11 @@ LANG_1180 = No entity selected
LANG_ERROR_TEXLEN = Warning: {} texture can not be readed.\n
LANG_FGD_BAD_OFFSET = ERROR: Expected 3 components in offset() property (line {}) in FGD {}\n
LANG_DUMP_TEX = Dump Textures
LANG_DUMP_TEX_DESC = Dump all loaded textures to .png files.
LANG_DUMP_TEX_DESC = Dump all loaded textures to .png files.
LANG_SETTINGS_GENERAL = General
LANG_SETTINGS_FGDPATH = FGD's path
LANG_SETTINGS_WADPATH = WAD's path
LANG_SETTINGS_OPTIMIZE = Optimizing
LANG_SETTINGS_LIMITS = Limits
LANG_SETTINGS_RENDER = Rendering
LANG_SETTINGS_CONTROL = Controls
29 changes: 18 additions & 11 deletions cfg/language_ru.ini
Original file line number Diff line number Diff line change
Expand Up @@ -708,7 +708,7 @@ LANG_0706 = прокрутка
LANG_0707 = Очистить
LANG_0708 = Автоматическая прокрутка
LANG_0709 = левая панель
LANG_0710 = Применить настройки
LANG_0710 = Применить
LANG_0711 = представление элемента
LANG_0712 = содержимое правой панели
LANG_0713 = Папка с игрой:
Expand All @@ -719,21 +719,21 @@ LANG_0717 = ##workdir
LANG_0718 = ...##workdir
LANG_0719 = Размер шрифта
LANG_0720 = %f пикселей
LANG_0721 = Уровни отмены
LANG_0722 = Подробное журналирование
LANG_0723 = Подробное журналирование нельзя отключить в РЕЖИМЕ ОТЛАДКИ
LANG_0721 = Уровней отмены
LANG_0722 = Подробные логи
LANG_0723 = Подробные логи нельзя отключить в РЕЖИМЕ ОТЛАДКИ
LANG_0724 = Создать резервную копию карты
LANG_0725 = Создает резервную копию файла BSP при первом сохранении.
LANG_0726 = Сохранять CRC карты
LANG_0727 = Изменять CRC оригинальной карты после редактирования.
LANG_0728 = Автоматический импорт файла объекта
LANG_0729 = Автоматически импортировать файл объекта при открытии карты.
LANG_0730 = Одинаковая директория для файла объекта
LANG_0731 = Использовать ту же директорию, что и файл BSP, для импорта и экспорта файла объекта.
LANG_0728 = Автоматический импорт .ent файла
LANG_0729 = Автоматически импортировать .ent файл объектов при открытии карты.
LANG_0730 = Экспортировать .ent в папку с картой
LANG_0731 = Использовать ту же директорию, что и файл BSP, для импорта и экспорта .ent файла.
LANG_0732 = Сохранять состояние окон
LANG_0733 = Сохранять положение и состояние окон.
LANG_0734 = Загружать пустой список по умолчанию
LANG_0735 = Если включено, загружать список настроек по умолчанию, если список пуст.
LANG_0734 = Загружать списки по умолчанию
LANG_0735 = Если включено, загружать список настроек сущностей по умолчанию, если список пуст.
LANG_0736 = (список примерных сущностей, пути res и т. д.)
LANG_0737 = Переместить камеру к первой сущности
LANG_0738 = Если включено, камера перемещается к первой сущности player_start/player_deathmatch/trigger_camera.
Expand Down Expand Up @@ -1180,4 +1180,11 @@ LANG_1180 = Ни одна сущность не выбрана
LANG_ERROR_TEXLEN = Предупреждение: не удалось прочитать текстуру {}\n
LANG_FGD_BAD_OFFSET = ОШИБКА: Ожидаемые 3 компонента в свойстве offset() (строка {}) в FGD {}\n
LANG_DUMP_TEX = Выгрузить текстуры
LANG_DUMP_TEX_DESC = Выгрузить все загруженные текстуры в файлы .png.
LANG_DUMP_TEX_DESC = Выгрузить все загруженные текстуры в файлы .png.
LANG_SETTINGS_GENERAL = Основные
LANG_SETTINGS_FGDPATH = Путь к .fgd
LANG_SETTINGS_WADPATH = Путь к .wad
LANG_SETTINGS_OPTIMIZE = Оптимизация
LANG_SETTINGS_LIMITS = Лимиты
LANG_SETTINGS_RENDER = Графика
LANG_SETTINGS_CONTROL = Управление
52 changes: 38 additions & 14 deletions src/editor/Gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5435,22 +5435,22 @@ void Gui::drawSettings()
static int fgdSelected = 0;


static const char* tab_titles[settings_tabs] = {
"General",
"FGDs",
"Asset Paths",
"Optimizing",
"Limits",
"Rendering",
"Controls"
std::string tab_titles[settings_tabs] = {
get_localized_string("LANG_SETTINGS_GENERAL"),
get_localized_string("LANG_SETTINGS_FGDPATH"),
get_localized_string("LANG_SETTINGS_WADPATH"),
get_localized_string("LANG_SETTINGS_OPTIMIZE"),
get_localized_string("LANG_SETTINGS_LIMITS"),
get_localized_string("LANG_SETTINGS_RENDER"),
get_localized_string("LANG_SETTINGS_CONTROL")
};

// left
ImGui::BeginChild(get_localized_string(LANG_0709).c_str(), ImVec2(150, 0), true);

for (int i = 0; i < settings_tabs; i++)
{
if (ImGui::Selectable(tab_titles[i], settingsTab == i))
if (ImGui::Selectable(tab_titles[i].c_str(), settingsTab == i))
settingsTab = i;
}

Expand All @@ -5473,7 +5473,7 @@ void Gui::drawSettings()
ImGui::BeginGroup();
float footerHeight = settingsTab <= 2 ? ImGui::GetFrameHeightWithSpacing() + 4.f : 0.f;
ImGui::BeginChild(get_localized_string(LANG_0711).c_str(), ImVec2(0, -footerHeight)); // Leave room for 1 line below us
ImGui::Text(tab_titles[settingsTab]);
ImGui::Text(tab_titles[settingsTab].c_str());
ImGui::Separator();

if (reloadSettings)
Expand Down Expand Up @@ -8067,7 +8067,7 @@ void Gui::drawFaceEditorWidget()
if (ImGui::Begin(get_localized_string(LANG_0870).c_str(), &showFaceEditWidget))
{
static float scaleX, scaleY, shiftX, shiftY;
static int lmSize[2];
static std::vector<std::array<int, 2>> lightmapSizes{};
static float rotateX, rotateY;
static bool lockRotate = true;
static int bestplane;
Expand Down Expand Up @@ -8170,10 +8170,19 @@ void Gui::drawFaceEditorWidget()
tmpStyles[i] = face.nStyles[i];
}

lightmapSizes.clear();

int lmSize[2];
GetFaceLightmapSize(map, faceIdx, lmSize);
lightmapSizes.push_back({ lmSize[0],lmSize[1] });


// show default values if not all faces share the same values
for (int i = 1; i < app->pickInfo.selectedFaces.size(); i++)
{
int faceIdx2 = app->pickInfo.selectedFaces[i];
GetFaceLightmapSize(map, faceIdx2, lmSize);
lightmapSizes.push_back({ lmSize[0],lmSize[1] });
BSPFACE32& face2 = map->faces[faceIdx2];
BSPTEXTUREINFO& texinfo2 = map->texinfos[face2.iTextureInfo];

Expand All @@ -8194,8 +8203,6 @@ void Gui::drawFaceEditorWidget()
}
}

GetFaceLightmapSize(map, faceIdx, lmSize);

for (int e = face.iFirstEdge; e < face.iFirstEdge + face.nEdges; e++)
{
int edgeIdx = map->surfedges[e];
Expand Down Expand Up @@ -8224,7 +8231,7 @@ void Gui::drawFaceEditorWidget()
ImGui::PushItemWidth(inputWidth);

if (app->pickInfo.selectedFaces.size() == 1)
ImGui::Text(fmt::format(fmt::runtime(get_localized_string(LANG_0422)), lmSize[0], lmSize[1], lmSize[0] * lmSize[1]).c_str());
ImGui::Text(fmt::format(fmt::runtime(get_localized_string(LANG_0422)), lightmapSizes[0][0], lightmapSizes[0][1], lightmapSizes[0][0] * lightmapSizes[0][1]).c_str());


ImGui::Text(get_localized_string(LANG_1169).c_str());
Expand Down Expand Up @@ -8554,6 +8561,23 @@ void Gui::drawFaceEditorWidget()
}

mapRenderer->updateFaceUVs(faceIdx);


if ((updatedFaceVec || scaledX || scaledY || shiftedX || shiftedY || stylesChanged
|| refreshSelectedFaces || updatedTexVec || mergeFaceVec))
{
for (int n = 0; n < app->pickInfo.selectedFaces.size(); n++)
{
int lmSize[2];
GetFaceLightmapSize(map, app->pickInfo.selectedFaces[n], lmSize);
if (lmSize[0] != lightmapSizes[n][0] ||
lmSize[1] != lightmapSizes[n][1])
{
print_log(PRINT_GREEN | PRINT_RED | PRINT_INTENSITY, "Warning need resize lightmap face {} from {}x{} to {}x{}\n",
app->pickInfo.selectedFaces[n], lightmapSizes[n][0], lightmapSizes[n][1], lmSize[0], lmSize[1]);
}
}
}
}

if (updatedFaceVec && app->pickInfo.selectedFaces.size() == 1)
Expand Down
2 changes: 2 additions & 0 deletions src/gl/primitives.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ struct lightmapVert
// last value scales the lightmap brightness
float luv[MAXLIGHTMAPS][3];

// color
float r, g, b, a;

vec3 pos;
};

Expand Down
79 changes: 79 additions & 0 deletions src/util/util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1568,3 +1568,82 @@ void FixupAllSystemPaths()
float floatRound(float f) {
return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1);
}


void scaleImage(const COLOR4 * inputImage, std::vector<COLOR4>& outputImage,
int inputWidth, int inputHeight, int outputWidth, int outputHeight) {
outputImage.resize(outputWidth * outputHeight);

float xScale = static_cast<float>(inputWidth) / outputWidth;
float yScale = static_cast<float>(inputHeight) / outputHeight;

for (int y = 0; y < outputHeight; y++) {
for (int x = 0; x < outputWidth; x++) {
float srcX = x * xScale;
float srcY = y * yScale;

int x1 = static_cast<int>(srcX);
int y1 = static_cast<int>(srcY);
int x2 = x1 + 1;
int y2 = y1 + 1;

float xWeight = srcX - x1;
float yWeight = srcY - y1;

COLOR4 topLeft = inputImage[y1 * inputWidth + x1];
COLOR4 topRight = inputImage[y1 * inputWidth + x2];
COLOR4 bottomLeft = inputImage[y2 * inputWidth + x1];
COLOR4 bottomRight = inputImage[y2 * inputWidth + x2];

COLOR4 interpolatedColor;
interpolatedColor.r = (1 - xWeight) * ((1 - yWeight) * topLeft.r + yWeight * bottomLeft.r)
+ xWeight * ((1 - yWeight) * topRight.r + yWeight * bottomRight.r);
interpolatedColor.g = (1 - xWeight) * ((1 - yWeight) * topLeft.g + yWeight * bottomLeft.g)
+ xWeight * ((1 - yWeight) * topRight.g + yWeight * bottomRight.g);
interpolatedColor.b = (1 - xWeight) * ((1 - yWeight) * topLeft.b + yWeight * bottomLeft.b)
+ xWeight * ((1 - yWeight) * topRight.b + yWeight * bottomRight.b);
interpolatedColor.a = (1 - xWeight) * ((1 - yWeight) * topLeft.a + yWeight * bottomLeft.a)
+ xWeight * ((1 - yWeight) * topRight.a + yWeight * bottomRight.a);

outputImage[y * outputWidth + x] = interpolatedColor;
}
}
}

void scaleImage(const COLOR3 * inputImage, std::vector<COLOR3>& outputImage,
int inputWidth, int inputHeight, int outputWidth, int outputHeight) {
outputImage.resize(outputWidth * outputHeight);

float xScale = static_cast<float>(inputWidth) / outputWidth;
float yScale = static_cast<float>(inputHeight) / outputHeight;

for (int y = 0; y < outputHeight; y++) {
for (int x = 0; x < outputWidth; x++) {
float srcX = x * xScale;
float srcY = y * yScale;

int x1 = static_cast<int>(srcX);
int y1 = static_cast<int>(srcY);
int x2 = x1 + 1;
int y2 = y1 + 1;

float xWeight = srcX - x1;
float yWeight = srcY - y1;

COLOR3 topLeft = inputImage[y1 * inputWidth + x1];
COLOR3 topRight = inputImage[y1 * inputWidth + x2];
COLOR3 bottomLeft = inputImage[y2 * inputWidth + x1];
COLOR3 bottomRight = inputImage[y2 * inputWidth + x2];

COLOR3 interpolatedColor;
interpolatedColor.r = (1 - xWeight) * ((1 - yWeight) * topLeft.r + yWeight * bottomLeft.r)
+ xWeight * ((1 - yWeight) * topRight.r + yWeight * bottomRight.r);
interpolatedColor.g = (1 - xWeight) * ((1 - yWeight) * topLeft.g + yWeight * bottomLeft.g)
+ xWeight * ((1 - yWeight) * topRight.g + yWeight * bottomRight.g);
interpolatedColor.b = (1 - xWeight) * ((1 - yWeight) * topLeft.b + yWeight * bottomLeft.b)
+ xWeight * ((1 - yWeight) * topRight.b + yWeight * bottomRight.b);

outputImage[y * outputWidth + x] = interpolatedColor;
}
}
}
5 changes: 4 additions & 1 deletion src/util/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,9 @@ int BoxOnPlaneSide(const vec3& emins, const vec3& emaxs, const BSPPLANE* p);
: \
BoxOnPlaneSide(( emins ), ( emaxs ), ( p )))


void scaleImage(const COLOR4* inputImage, std::vector<COLOR4>& outputImage,
int inputWidth, int inputHeight, int outputWidth, int outputHeight);
void scaleImage(const COLOR3* inputImage, std::vector<COLOR3>& outputImage,
int inputWidth, int inputHeight, int outputWidth, int outputHeight);

float floatRound(float f);

0 comments on commit 4e97fa8

Please sign in to comment.