[RenderEdge] Основная версия

» опубликован

Актуальная версия v0.2.6a

Особенности

  1. Система отрисовки пользовательского интерфейса:
    • (+) Основная система;
    • (+) Управление при помощи Jass функций;
    • (+) Поддержка многострочного текста с форматированием;
    • (+) Поддержка .ttf формата шрифтов;
  1. Постобработка:
    • (-) HDR Rendering;
    • (-) Пост-эффекты;
    • (-) Управление при помощи Jass функций;
  1. Улучшенное освещение:
    • (-) Попиксельное освещение;
    • (-) Поддержка .dds/.blp2 формата текстур для .mdx/.mdl моделей;
    • (-) Поддержка пользовательских шейдеров;
    • (-) Генерация кубических карт окружения;
    • (-) Shadow Mapping;
    • (-) Поддержка карт нормалей;
  1. Совместимость:
    • (+) Поддержка Direct3D8;
    • (+) Поддержка Direct3D9;
    • (+) Поддержка широкоформатных мониторов;
  1. Прочее:
    • (+) Уменьшение задержки между приказами в игре;
    • (+) Запуск более одного экземпляра war3.exe одновременно.

Скриншоты

Custom Natives

» Дополнительные константы
// TriggerRegisterMouseEvent & TriggerRegisterKeyEvent
constant integer MB_Left = 0
constant integer MB_Middle = 1
constant integer MB_Right = 2
constant integer MB_X1 = 3
constant integer MB_X2 = 4
constant integer KEY_Any = -1
constant integer EVENT_Down = 0
constant integer EVENT_Up = 1

// CtrlSetAnchor & SetPortrait
constant integer ANCHOR_TOPLEFT = 0
constant integer ANCHOR_TOP = 1
constant integer ANCHOR_TOPRIGHT = 2
constant integer ANCHOR_LEFT = 3
constant integer ANCHOR_CENTER = 4
constant integer ANCHOR_RIGHT = 5
constant integer ANCHOR_BOTTOMLEFT = 6
constant integer ANCHOR_BOTTOM = 7
constant integer ANCHOR_BOTTOMRIGHT = 8
» Mouse API
native int GetMouseX() // Возвращает положение курсора в экранных координатах
native int GetMouseY()
native int GetMouseXRelative()
native int GetMouseYRelative()
native float GetMouseTerrainX() // Возвращает проекцию позиции курсора на ландшафт
native float GetMouseTerrainY()
native float GetMouseTerrainZ()
native bool IsMouseOverUI() // Находится ли курсор над стандартным интерфейсом или нет?
native void BlockMouse(bool bBlock) // Блокирует входные сообщения от мыши (перемещение, нажатия), передаваемые в игру
native int GetWheelDelta() // Возвращает направление/скорость вращения колёсика мыши (положительное значение указывает на то, что колесо вращается вперед)
native void SetMousePos(int x, int y) // Устанавливает положение курсора
native void TriggerRegisterMouseWheelEvent(trigger trig) // Триггер срабатывает при прокрутки колёсика мыши
native void TriggerRegisterMouseMoveEvent(trigger trig) // Триггер срабатывает при перемещении курсора
native void TriggerRegisterMouseEvent(trigger trig, int iButton, int state) // Триггер срабатывает при нажатии (state == 0) / отпуске (state == 1) кнопки iButton (поставьте iButton == -1, чтобы отлавливать все кнопки мыши)
» Keyboard API
native int GetTriggerKey() // Возвращает последнюю нажатую клавишу
native bool IsKeyDown(int iKey) // Нажата ли клавиша?
native void TriggerRegisterKeyEvent(trigger trig, int iKey, int state) // Триггер срабатывает при нажатии (state == 0) / отпуске (state == 1) клавиши iKey (поставьте iKey == -1, чтобы отлавливать любые клавиши)
» Window API
native int GetWindowWidth() // Возвращает ширину экрана в полноэкранном режиме, либо ширину окна в оконном
native int GetWindowHeight()
native int GetWindowX() // Возвращает координаты окна
native int GetWindowY()
native void TriggerRegisterWindowResizeEvent(trigger trig) // Триггер срабатывает при изменении размера окна
» GUI API
native void CtrlNew(int id, int offsetX, int offsetY, int width, int height) // Создаёт новый экземпляр элемента GUI (id >= 0)
native void CtrlSetText(int id, string text, bool bWrap) // bWrap: если текст заходит за пределы ширины, заданной при создании элемента GUI, то происходит переход на новую строку
native void CtrlSetColor(int id, int argb) // Красит элемент GUI в заданный цвет
native void CtrlSetAnchor(int id, int parentId, int anchor) // Выравнивание элемента. Установите parentId = -1, чтобы выравнивание шло относительно всего окна
native void CtrlSetTexture(int id, string filename) // Устанавливает текстуру элемента
native void CtrlSetSize(int id, int width, int height) // Устанавливает размер элемента. Функция не изменяет ширину или высоту, если установить соответствующий аргумент равным -1;
native void CtrlSetPosition(int id, int offsetX, int offsetY) // Устанавливает позицию элемента
native void CtrlShow(int id, bool isShow) // Показывает (true) / скрывает (false) элемент GUI
native void CtrlSetDepth(int id, float fDepth) // Определяет порядок поиска элементов GUI функцией CtrlGetFromMousePoint. Чем значение fDepth меньше, тем элемент расположен ближе к экрану (1.0 по умолчанию)
native void CtrlSetAngle(int id, float fAngle) // Устанавливает угол поворота элемента GUI (в радианах)
native int CtrlGetWidth(int id)
native int CtrlGetHeight(int id) // Используется, чтобы узнать высоту элемента GUI после применения функции CtrlSetText с аргументом "bWrap" == true
native int CtrlGetFromPoint(int x, int y) // Возвращает элемент, расположенный по заданным координатам (если такого нет, возвращает -1)
native bool CtrlIsText(int id) // Является ли элемент GUI текстом?
native void CtrlSetFont(int id, string fontName, int size) // Устанавливает шрифт для указанного элемента GUI (по умолчанию используется "Consolas" с размером 13)
native void GUILoadFont(string fileName) // Загружает шрифт по указанному пути в память
» Misc API
native float GetFPS() // Возвращает количество кадров в секунду
native float GetDeltaTime() // Возвращает количество времени, затрачиваемое на отрисовку одного кадра (в секундах)
native int COLOR_ARGB(int a, int r, int g, int b) // Переводит цвет из ARGB формата в шестнадцатеричное значение
native void EnableVsync(bool bEnable) // Включает/выключает вертикальную синхронизацию
native void TriggerRegisterFrameUpdateEvent(trigger trig) // Триггер срабатывает каждый кадр
native bool IsGamePaused() // Находится ли игра на паузе?
native void SetBlackBorders(float upper, float bottom) // Изменяет расположение чёрных границ по оси y (значения находятся в промежутке от 0.0 до 0.6). Значения по умолчанию - upper = -0.02, bottom = 0.13.
native void SetPortrait(int anchor, int x, int y, int width, int height) // Устанавливает расположение и ширину портрета в пикселях. Выравнивание идёт относительно всего окна.
» Lighting API
N/A
» Post-processing API
N/A

Установка


Требования:

  • Архив можно извлечь в любое место;
  • При первом запуске нужно указать расположение war3.exe;
  • Индикатором того, что мод был успешно запущен, является надпись "RenderEdge" с текущей версией мода в левом верхнем углу экрана;
  • Для запуска в режиме отладки измените значение параметра "Debug" на "1" (HKEY_CURRENT_USER\SOFTWARE\RenderEdge);
  • Для подключения RenderEdge к Jass New Gen Pack (exp. 2) скачайте и замените файл wehack.lua в папке с JNGP (заменяет вкладку с RtC). Либо отредактируйте его самостоятельно:
» wehack.lua
Пример того, как выглядит wehack.lua после редактирования
-- # begin RenderEdge #
RenderEdgePath = grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "InstallPath")
haveRenderEdge = grim.exists(RenderEdgePath .. "\\RenderEdge.exe")

function toggleRenderEdgeDebug(checked)
    if checked then
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 1)
	else
		grim.setregdword("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug", 0)
	end
end

if haveRenderEdge then
	RenderEdgeMenu = wehack.addmenu("RenderEdge")
	RenderEdgeEnabled = TogMenuEntry:New(RenderEdgeMenu, "Run with RenderEdge", nil, true)
	RenderEdgeDebug = TogMenuEntry:New(RenderEdgeMenu, "Debug Mode", 
	    function(self) toggleRenderEdgeDebug(self.checked) end, false)
	if grim.getregpair("HKEY_CURRENT_USER\\Software\\RenderEdge", "Debug") == 1 then
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 1)
	else
		wehack.checkmenuentry(RenderEdgeMenu, RenderEdgeDebug, 0)
	end
end
-- # end RenderEdge #

function testmap(cmdline)
	if haveRenderEdge and RenderEdgeEnabled.checked then
		local pos = string.find(cmdline, ".exe")
		cmdline = string.sub(cmdline, 5 + pos)
		cmdline = RenderEdgePath .. "\\RenderEdge.exe " .. cmdline
	end
	
	if wh_opengl.checked then
		cmdline = cmdline .. " -opengl"
	end
	if wh_window.checked then
		cmdline = cmdline .. " -window"
	end
	wehack.execprocess(cmdline)
end

Примеры

Карта написана на vJass и содержит демонстрацию использования всех функций RenderEdge. Карта обновляется каждый раз, при выпуске новой версии RenderEdge.
Особенности карты:
  • Система пользовательского интерфейса (виджеты: Label, Button, Dragbox, Checkbox, Horizontal Slider);
  • Редактирование стандартного интерфейса;
  • Система управления камерой.

Список изменений

v0.2.6a
  * Убран лимит на размер 512p в .blp тексурах (спасибо Karaulov`у);
  * Добавлена новая native функция CtrlSetZOrder (порядок отрисовки элементов интерфейса);
  * Добавлена новая native функция EnableAnisoFiltering (возможность установить анизотропную фильтрацию текстур);
  * Добавлена новая native функция HideInterface;
  * Добавлены новые native функции: EditMinimap, EditCommandBarButton, EditHeroBarButton, EditItemBarButton, EditMinimapButton и EditUpperButtonBarButton;
  * Изменено название функций SetPortrait и SetBlackBorders на EditPortrait и EditBlackBorders;
  * Исправлено большое количество багов в RenderEdge_loader.dll и RenderEdge.exe;
  * Исправлен некорректный перенос строки при использовании символа "|n" во wrapped тексте;
  * Исправлено большое количество багов в GUI-системе (например, баг с функцией CtrlSetTexture при перезапуске карты);
  * Оптимизирована GUI-система. Некоторые функции переписаны с нуля;
  * Оптимизированы менеджеры шрифтов и текстур;
  * Обновлены detours.lib и libjpeg.lib до последней версии;
  * Улучшен и оптимизирован debug log.

v0.2.5a
  * Добавлена новая native функция GUILoadFont;
  * Добавлена новая native функция CtrlSetFont;
  * Удалена функция GUISetFont;
  * Исправлены вылеты при установке некоторых шрифтов (например, "Times New Roman");
  * Исправлена высота однострочного текста;

v0.2.4a
  * Добавлена новая native функция SetPortrait;
  * Функция CtrlSetSize теперь не изменяет ширину или высоту, если вы установите соответствующий аргумент равным -1;
  * Изменено имя функции CtrlSetAlignment на CtrlSetAnchor;
  * Изменён способ исправления ширины полосок здоровья;
  * Исправлено выравнивание динамических элементов по отношению к другим элементам пользовательского интерфейса;
  * Исправлена высота wrapped текста;
  * Исправлена высота wrapped текста при динамическом изменении ширины;
  * Исправлены проблемы с безопасностью. Если жирный, курсивный или полужирный курсивный шрифт недоступен, используется обычный шрифт.

v0.2.3b
  * Исправлено выравнивание относительно других элементов интерфейса.

v0.2.3a
  * Добавлена новая native функция CtrlSetSize;
  * добавлена новая native функция CtrlSetAlignment;
  * Функции CtrlSetPosition и CtrlNew теперь принимают offsetX и offsetY вместо x и y;
  * Удалена функция CtrlSetRect.

v0.2.2a
  * Добавлена новая native функция IsGamePaused;
  * Добавлена новая native функция SetBlackBorders;
  * Обновлен Jass API, исправлены некоторые баги связанные с пользовательскими нативными функциями;
  * Исправлены нативные функции, которые принимают аргументы тира boolean;
  * Исправлено повторное добавление триггеров функциями TriggerRegister#Event после перезапуска карты;
  * Функция EnableVsync теперь работает без необходимости сворачивать игру;
  * Исправлена ошибка, при которой новые элементы GUI не имели зеленой текстуры по умолчанию;
  * Улучшен debug log. Лог файл очищается, если размер превышает 100 КБ.

v0.2.1b
  * Исправлены вылеты при вызове функций CtrlSetText, CtrlSetTexture и GUISetFont (проблема с конвертацией UTF-8 в ASCII);
  * Удалено нестабильное нововведение из предыдущей версии: "Убрано стандартное ограничение минимальной дистанции камеры до цели";
  * Обновлён FreeType до версии 2.8;
  * Обновлён RenderEdge_loader.dll. Теперь он ищет RenderEdge_exp.dll, если не нашёл, то запускает RenderEdge.dll;
  * Добавлен счётчик памяти, используемой варкрафтом;
  * Оптимизация GUI системы;
  * Оптимизация Widescreen fix;
  * Оптимизация debug log. Система отладки переписана с нуля.

v0.2.1a
  * Обновлён Widescreen Fix. Вертикальный угол обзора больше не зависит от ширины экрана;
  * Снято ограничение на максимальный FPS, теперь он может подниматься выше 64 с выключенным vsync (спасибо Karaulov'у);
  * Убрано стандартное ограничение минимальной дистанции камеры до цели (было 100.0, теперь можно установить до 0.01);
  * Использование более точного формата буфера глубины, если поддерживается. Используйте SetCameraField(ConvertCameraField(7), value, time), чтобы изменить ближнюю плоскость отсечения камеры (100.0 по умолчанию);
  * Добавлена новая native функция TriggerRegisterFrameUpdateEvent. Триггер срабатывает каждый кадр (задержка меньше 0.001 секунд);
  * Добавлена новая native функция EnableVsync (включено по умолчанию);
  * Добавлены новые native функции GetWindowX и GetWindowY;
  * Добавлены новые native функции GetMouseXRelative и GetMouseYRelative;
  * Функции GetMouseX и GetMouseY теперь возвращают координаты без отсечения границами окна;
  * Изменено название функции FPS на GetFPS;
  * Изменено название функции DeltaTime на GetDeltaTime;
  * Функция GetDeltaTime теперь возвращает секунды вместо миллисекунд;
  * Улучшен debug log. Лог файл очищается при превышении размера в 1 MB.

v0.2.0a
  * Поддержка Direct3D9;
  * Блокировка функции CtrlGetFromPoint, если игра на паузе;
  * Показ GUI только после загрузки карты;
  * Исправлен баг, связанный с тем, что ширина и высота текстур были перепутаны;
  * Исправлен слишком большой угол обзора при использовании Widescreen Fix;
  * Исправлена проблема, связанная с тем, что невозможно было запустить приложение с первой попытки;
  * Обновлён FreeType до версии 2.7;
  * Запуск более одного экземпляра war3.exe одновременно;
  * Оптимизация RenderEdge.dll;
  * Исправлены проблемы безопасности;
  * Обновлено лого проекта, и добавлен значок приложения;
  * Улучшен debug log;

v0.1.0a
  * Реализована поддержка широкоформатных мониторов;
  * Реализовано корректное получение информации из jass строки (поддержка всех языков, а не только английского);
  * Добавлена поддержка TTF шрифтов, используя FreeType (https://www.freetype.org/);
  * Добавлена поддержка многострочного текста и форматирования ("|n" (на новую строку), "|cAARRGGBB" (изменить цвет), "|b" (полужирный шрифт), "|i" (наклонный шрифт), "|r" (сброс к стандартному цвету текста и обычному шрифту));
  * Уменьшена задержка отдачи приказов юнитам в одиночной игре;
  * Исправлена проблема, связанная с невозможностью запустить RenderEdge после переустановки Warcraft по другому пути;
  * Изменено название функции CtrlCreateInstance на CtrlNew;
  * Изменена функция CtrlSetText(int id, bool autoResize, string text) на CtrlSetText(int id, string text, bool bWrap);
  * Изменена функция CtrlGetFromMousePoint() на CtrlGetFromPoint(int x, int y);
  * Добавлена новая native функция GUISetFont;
  * Добавлена новая native функция CtrlIsText;
  * Функция IsMouseOverUI теперь работает корректно;
  * Удалена функция CtrlSetSolidColor, вместо этого используйте белую текстуру ("Textures\\white.blp") и функцию CtrlSetColor(int argb);
  * Добавлен логотип проекта;
  * Уменьшен размер RenderEdge.mpq;
  * Улучшен debug log.

v0.0.3a
  * Реализовано чтение настроек из реестра;
  * Добавлены функции CtrlGetHeight и CtrlGetWidth для получения ширины элемента GUI после применения функции CtrlSetText с аргументом "autoResize" == true;
  * Исправлено растягивание полосок здоровья на широкоформатных экранах;
  * Отключена функция EnableDebug, теперь включение режима отладки осуществляется из редактора реестра;
  * Улучшена совместимость с JNGP;
  * Улучшен debug log.

v0.0.2b
  * Исправлена проблема, при которой не получалось запустить мод с первого раза;
  * Улучшен debug log.

v0.0.2a
  * Исправлена ошибка с загрузкой RenderEdge.mpq, теперь мод можно без проблем размещать в любой папке;
  * Исправлен баг в функции CtrlSetText, при котором все элементы GUI, использующие текстуру шрифта, имели одинаковый текст;
  * Изменена функция CtrlSetText - убран аргумент "argb", отвечающий за цвет создаваемого текста, вместо этого используйте функцию CtrlSetColor (текст по умолчанию белый);
  * Изменена функция CtrlSetDepth - тип аргумента "depth" изменён на real;
  * Добавлена новая native функция CtrlSetAngle;
  * Удалена функция CtrlSetCallback.

v0.0.1a
  * Первая стабильная версия.


Просмотров: 14 253



» Лучшие комментарии


Dam3w #301 - 2 недели назад 0
Я конечно извиняюсь, но как это установить вваркарфт, чтобы все карты были с таким инетрфейсом, и в реплеях в том числе? Я запускаю, в варике появляется надпись, как описано выше, запускаю карту - все по старому.
quq_CCCP #302 - 2 недели назад 0
Есть два способа - один это лаунчер или микс, второй мемхак из карты, в первом случаи распростроняется на все карты, во втором на конкретную карту, это больше для разработчиков карт чем для простых пользователей.