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

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

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

Особенности

  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.7a
  * Обновлён RenderStage Controller (улучшен перехват отрисовки стандартного интерфейса);
  * Исправлены баги в JassAPI (некорректная конвертация real <=> float);
  * Исправлены баги в функциях CtrlSetDepth и CtrlSetAngle;
  * Исправлены слайдеры и чекбоксы в карте-примере;
  * Добавлены описания .exe и .dll файлов.

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
  * Первая стабильная версия.


Просмотров: 17 133



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


Tumart #51 - 2 года назад 0
ENAleksey, такой вопрос в будущем будет ли возможность вывода текста на любом языке. И все эти функции в мультиплеере надо через GetLocalPlayer юзать?
ENAleksey #52 - 2 года назад (отредактировано ) 0
будет ли возможность вывода текста на любом языке
Она уже есть, но только внутри самой библиотеки. Единственная проблема - корректное получение информации из jass'овской строки. Я постараюсь поскорее избавиться от неё, тем более разработчик YDWE уже предложил мне вариант реализации, но я пока еще не знаю, будет ли он работать.
И все эти функции в мультиплеере надо через GetLocalPlayer юзать?
По идее да, но я пока ещё не пробовал запускать игру с модом в сетевом режиме.
Tumart #53 - 2 года назад 0
ENAleksey, кстати после переустановки варика выскакивает такое сообщение и путь выбрать не предлагает. И можно еще сделать чтоб в два и более окна можно было запускать.
Исправил путь в реестре на нужный. Перезапускал несколько раз,теперь карта не запускается.
ENAleksey #54 - 2 года назад 0
Tumart, спасибо, что сообщили о проблеме, в следующей версии сделаю проверку на существование файла war3.exe при каждом запуске RenderEdge, если не найден - повторный вывод окошка выбора пути.
Tumart:
Исправил путь в реестре на нужный. Перезапускал несколько раз,теперь карта не запускается.
Надпись в углу появляется при запуске? Вы как-либо изменяли карту? Прикрепите, пожалуйста, скриншот редактора реестра по пути HKEY_CURRENT_USER\SOFTWARE\RenderEdge и напишите корректный путь к папке с варкрафтом.
Tumart:
И можно еще сделать чтоб в два и более окна можно было запускать.
Сделаю в следующей версии.
Tumart #55 - 2 года назад 0
ENAleksey, надпись появляется. Карту не изменял. Путь прописан корректно.
ENAleksey #56 - 2 года назад 0
Tumart, скиньте, пожалуйста, файл RenderEdge.txt из папки с модом (либо из папки с варкрафтом: не помню точно, в какой версии сделал создание лога в папке с RenderEdge).
И как вы запускаете карту? Из редактора?
Tumart #57 - 2 года назад 0
Запускаю через RenderEdge.exe
ENAleksey #58 - 2 года назад (отредактировано ) 0
Tumart, ошибок в логе никаких не вижу, разве что не всегда отображается версия RenderEdge, но в остальном всё в порядке.
Попробуйте создать новую карту, в которой вызываются две функции: CtrlCreateInstance() и GetTriggerKey(), предварительно скопировав все нативки себе в карту, и посмотрите, запустится ли она. Если нет, то попробуйте отключать их по одной, пока не запустится.
ENAleksey #59 - 2 года назад 0

Два небольших опроса

  • Нужно ли добавить функцию, приостанавливающую текущий поток, аналогичную Sleep(float ms) в c++?
Опрос: Добавить Sleep(real ms)?

Всего проголосовали: 17
  • Нужно ли добавить функцию, которая будет срабатывать при отрисовке каждого кадра?
Опрос: Добавить TriggerRegisterFrameUpdateEvent(trigger trig)?

Всего проголосовали: 17
Пока сам не знаю, будет ли от них польза. Высказывайте своё мнение, нужно добавлять данные функции или же нет? Так же предлагайте свои варианты, что ещё можно реализовать?
Кет #60 - 2 года назад 0
FrameUpdateEvent можно использовать для динамической отрисовки чего-либо, это круто!
Tumart #61 - 2 года назад 0
Еще бы неплохо было добавить функцию динамической смены модели курсора например native void SetMouseCursorIco(string s). А так обе фунции за. Да и вообще чем больше функционала тем лучше.
ENAleksey #62 - 2 года назад (отредактировано ) 2
добавить функцию динамической смены модели курсора
Обязательно сделаю, я уже добавлял функцию скрытия курсора, единственной проблемой было то, что для определения того, что рендерится именно курсор, я использовал кастомную модель с пятью вершинами вместо четырёх. Если не получится реализовать отлов отрисовки стандартного курсора, то придётся использовать кастомную модель, импортированную в RenderEdge.mpq и заменяющую прежнюю модель. Но, уверен, можно будет обойтись и без этого.
Барин #63 - 2 года назад 0
Возможно ли убрать ограничение вара на 64 фпс?
koloff #64 - 2 года назад (отредактировано ) 3
Живут же люди, мне, блин, стабильно, что бы, хотя бы 24 кадра в секунду, при записи выдавало, не добиться. А тут, 64 кадра не устраивает=(
Tumart #65 - 2 года назад 0
ENAleksey, еще бы в основной версии пригодились бы функции полного скрытия интерфейса, а также возможность регулировать размер, расположение и частичное или полное скрытие миникарты. Например чтобы можно было сделать форму миникарты круглой, и зум юзать, чтоб миникарта например показывалась не полностью, а в зависимости от месторасположения определенного юнита(в некоей области). И если возможно сделать сейв систему в которую можно записывать\считывать данные в мультиплеере. Также не плохо было бы сделать подключение доп архивов, чтоб можно было не волноваться за размер карты на подобие .mix с той только разницей, если возможно чтоб в редакторе отображались модели, иконки и т.д из архива.
ENAleksey #66 - 2 года назад 1
функции полного скрытия интерфейса, а также возможность регулировать размер, расположение и частичное или полное скрытие миникарты
Сделаю.
Tumart:
Например чтобы можно было сделать форму миникарты круглой, и зум юзать, чтоб миникарта например показывалась не полностью, а в зависимости от месторасположения определенного юнита(в некоей области).
А это уже любой пользователь сможет сделать самостоятельно, используя GUI систему. Мне же придётся только добавить доступ к динамической текстуре, отображающей определенную область вокруг заданной точки на карте.
Tumart:
И если возможно сделать сейв систему в которую можно записывать\считывать данные в мультиплеере.
Это я делать не буду, так как систему загрузки и сохранения для мультиплеера можно сделать самостоятельно, без использования сторонних расширений.
Tumart:
Также не плохо было бы сделать подключение доп архивов, чтоб можно было не волноваться за размер карты на подобие .mix с той только разницей, если возможно чтоб в редакторе отображались модели, иконки и т.д из архива.
Тоже сделаю, а вот возможность подгрузки дополнительного контента из .mpq в редактор карт я сделаю только после того, как возьмусь за модификацию World Editor.
Tumart #67 - 2 года назад 0
ENAleksey, а вот не давно вопрос был "Можно ли снять ограничение на размер карты", вы говорили что попробуете сделать это в JNGP. Было бы интересно узнать результат.
ENAleksey #68 - 2 года назад 1
Tumart, даже не пробовал, так как уверен, что это невозможно:
Если не сделали фикс на большее увеличения размера карты, значит на то есть какая-то причина.
Да и поважнее дела были.
ENAleksey #69 - 2 года назад (отредактировано ) 8
такой вопрос в будущем будет ли возможность вывода текста на любом языке
Она уже есть, но только внутри самой библиотеки. Единственная проблема - корректное получение информации из jass'овской строки
Готово. Строка jass представлена в UTF-8 кодировке, я добавил функцию конвертации массива символов из UTF-8 в ASCII, теперь можно без проблем получить jass строку на исходном языке, а не только на английском.
Сейчас буду добавлять поддержку TTF формата шрифтов. Огромное спасибо пользователю d.m.k с сайта gamedev.ru за предоставленный пример использования FreeType, это позволит мне быстрее реализовать загрузчик TTF шрифтов и новый визуализатор текста для GUI системы.
После этого можно будет переходить ко второму этапу работы над RenderEdge - добавлять HDR Rendering и пост-эффекты.
прикреплены файлы
Vitalik8 #70 - 2 года назад -3
Сделай, возможность изменять иконку мини карты во время игры
И кстати если можешь увеличь количество игроков с 12 на 24 или больше
Mexaz #71 - 2 года назад 5
Vitalik8:
И кстати если можешь увеличь количество игроков с 12 на 24 или больше
И вот как это относится к рендерингу? Но, если надо больше игроков, то в этих ваших интернетах полно других движков, некоторые из которых предоставляют возможность подключения до 10к игроков одновременно.
Vitalik8 #72 - 2 года назад -1
Тогда добавь возможность считывать время реальное
Условие юнит находится на суша/мелководье/глубоководье
ELB359 #73 - 2 года назад 0
Карта, при открытии в редакторе, пустая, а в игре вообще нельзя запустить. При этом установилось все нормально, надпись есть.
ENAleksey #74 - 2 года назад 0
ELB359, в смысле пустая? Возможно произошёл сбой при скачивании карты, попробуйте скачать заново.
ELB359 #75 - 2 года назад 0
ENAleksey, пробовал, но еще попробую. И нативки использовать тоже не получается.
ENAleksey, извиняюсь, теперь все вижу, видимо сам где-то затупил)
ENAleksey #76 - 2 года назад (отредактировано ) 4

Новости

Реализовал загрузчик .ttf шрифтов, правда, только системных (по умолчанию использую Consolas). Загружать из файлов тоже можно, но только не со всеми это проходит успешно. Например, после загрузки стандартного шрифта варкрафта FRIZQT__.TTF, он оказывается пустым, а при загрузке других шрифтов варкрафта игра вообще вылетает. Постараюсь решить эту проблему в будущем.


Также добавил поддержку многострочного текста (при ограничении ширины) и форматирования (регистр не имеет значения):
  • Переход на новую строку - "|n";
  • Смена цвета текста - "|cAARRGGBB";
  • Полужирный шрифт - "|b";
  • Курсив - "|i";
  • Сброс к стандартному цвету текста, обычному шрифту - "|r".
Осталось реализовать выравнивание текста (справа / по центру / по всей ширине) и корректное вращение многострочного текста.
прикреплены файлы
ENAleksey #77 - 2 года назад (отредактировано ) 13

Обновление 0.1.0a

Возможны вылеты во время загрузки карты!
  • Реализовано корректное получение информации из jass строки (поддержка всех языков, а не только английского);
  • Изменено название функции 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 после переустановки Warcraft по другому пути;
  • Добавлена поддержка TTF шрифтов (FreeType);
  • Добавлена поддержка многострочного текста и форматирования ("|n" (на новую строку), "|cAARRGGBB" (изменить цвет), "|b" (полужирный шрифт), "|i" (наклонный шрифт), "|r" (сброс к стандартному цвету текста и обычному шрифту));
  • Уменьшена задержка отдачи приказов юнитам в одиночной игре;
  • Добавлен логотип проекта;
  • Уменьшен размер RenderEdge.mpq;
  • Улучшен debug log.
native void CtrlSetText(int id, string text, bool bWrap) // bWrap: если текст заходит за пределы ширины, заданной при создании элемента GUI, то происходит переход на новую строку
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 GUISetFont(string name, int size) // Устанавливает шрифт для всех текстовых элементов GUI (по умолчанию используется "Consolas" с размером 13)


Полноценный Widescreen fix!

У меня только что получилось реализовать фикс для широкоформатных мониторов, теперь экран не выглядит растянутым на мониторах с отношением сторон равным 16:9!
Сейчас буду дорабатывать фикс, например, нужно немного отдалить камеру и добавить поддержку любого отношения сторон монитора (16:10, 21:9), динамическую подстройку под текущий размер окна.
прикреплены файлы
AlakFrost #78 - 2 года назад 2
Наконец в 4к поиграю на варике.
GF RaiseD #79 - 2 года назад 2
Там не камеру отдалять нужно, а гуи нормальный.
Это сообщение удалено
ENAleksey #81 - 2 года назад (отредактировано ) 0
Кстати, только что с Ильёй (darkowlom) доработали фикс, теперь игра адекватно себя ведёт при изменении размера окна. Осталось ещё немного протестировать его, чтобы убедиться, что всё будет работать при любом разрешении экрана, выбранном в игре, и при любом разрешении монитора.
GF RaiseD:
Там не камеру отдалять нужно, а гуи нормальный.
С этим будет посложнее, но будем стараться переделать на нормальный, не растянутый.
ENAleksey #82 - 2 года назад (отредактировано ) 14

Обновление v0.1.0a (без изменения версии)

Скачать RenderEdge.dll (ссылка на скачививание в комментарии #77 обновлена).
  • Реализована поддержка широкоформатных мониторов;
Скриншоты игры при разных отношениях сторон:
прикреплены файлы
GF RaiseD #83 - 2 года назад (отредактировано ) 3
Охохо. Warcraft 3 Unofficial Patch...

Это бы доработать, и разместить отдельным модулем.
Bornikkeny #84 - 2 года назад 1
Вот бы насильно заставить установить этот патч во все Варкрафты. Мил стал бы чуточку лучше.
Кет #85 - 2 года назад 0
давайте его близзам отошлём
Bornikkeny #86 - 2 года назад 0
Кет:
давайте его близзам отошлём
c Cat'a петиция!
Vitalik8 #87 - 1 год назад 0
Можешь сделать что б когда открывается меню паузы кнопки пассивными ставали
EfReeZe #88 - 1 год назад 0
ENAleksey, как же ты хорош - пойду протестирую))
Если одним словом оценивать - удобно. Разве что проблема с отображением заставки главного меню в нижней части экрана.
darkowlom #89 - 1 год назад 0
EfReeZe, уже пофикшено
Arctide #90 - 1 год назад 0
ENAleksey, проблемка, как решить?
прикреплены файлы
darkowlom #91 - 1 год назад 2
TripleKor, установи распространяемый пакет майкрософт содержащий библиотеку, название не вспомню, но по запросу библиотеки найдешь
ENAleksey #92 - 1 год назад 0
Arctide #93 - 1 год назад (отредактировано ) 0
darkowlom, спасибо, помогла установка обновления винды, ибо на висту x86 - VS 2015 не ставится :c
ScorpioT1000 #94 - 1 год назад 6
TripleKor, попробуй на win 98))00нолик
Кристофер #95 - 1 год назад 0
Такое предложение - сделать возможность в редакторе выделять несколько элементов. Экспорт/Удаление/Копирование станет гораздо быстрее.
Melissa #96 - 1 год назад (отредактировано ) 0
Скачать RenderEdge.
Нельзя ли поддержку 32-биток добавить? Ибо не все компьютеры, на которых играют в Warcraft 3 имеют 4+ ГБ оперативки
И да, у меня две оси ХР и 7 обе 32, так что хрю хрю.
прикреплены файлы
ENAleksey #97 - 1 год назад (отредактировано ) 0
Melissa, 32-битные поддерживаются, а вот XP - нет. Чтобы RenderEdge работал на XP, нужно просто пересобрать .exe с соответствующим параметром совместимости, вроде всё хорошо, игра начинает запускаться, но .dll не внедряется. Возможно я использую какие-то несовместимые с XP функции в методе InjectDLL, позже буду разбираться.
Такое предложение - сделать возможность в редакторе выделять несколько элементов. Экспорт/Удаление/Копирование станет гораздо быстрее.
Выделение каких элементов, GUI? Всё это можно реализовать самостоятельно с помощью функций, которые уже существуют.
Melissa #98 - 1 год назад 0
ENAleksey, Понятно.
А возможно сделать чтобы камера не возвращалась к стандартной после использования inset/delete или колёсика? или это уже реализовано?
ENAleksey #99 - 1 год назад 0
Melissa, в смысле?) Она всегда стандартная, я её никак не изменял.
Melissa #100 - 1 год назад (отредактировано ) 0
ENAleksey, я про:
Когда нажимаешь insert/delete или pageup/pagedown - ты поворачиваешь камеру в игре. Но стоит отпустить кнопки - камера возвращается к нормальной. Убрать бы это возвращение, перенести на клавишу какую,что ли..