Jump to content
Korean Random

Браузер. CEF. Flash


Go to solution Solved by SoprachevAK,

Recommended Posts

Эх, в танках поддерживаются charSet'ы только unicode и utf-8, которые не позволяют закодировать произвольные массив байт

А кто нибудь знает, как до DAAPI реализовывалась связь Python->Flash ?

Link to comment
Short link
Share on other sites

Posted (edited)

К чему я пришел:

1. Из питона во флеш через DAAPI передаю Array (из uint, но во флеше они нетипизированные) 

 

2. Через глобальную нативную функцию Vector превращаю массив в типизированный вектор

 

3. Записываю Vector в ByteArray через нативный сериализатор AMF3

 

4. Обрезаю заголовки формата и получаю точные байтики которые хотел передать. 
 

 

Этот костыль в 5 раз быстрее чем пустой цикл на длину массива. И в 10 раз быстрее чем декодинг из Base64. 
 

 

 

Моего процессора всё равно хватает только на 250-300 кбайт png файла. Дальше основное ядро забивается и игра начинает лагать. В идеале можно вынести в Worker, которые во флеше есть, но хз как в танковом. Быстрее не станет, но лагать будет только виджет, а танки не будут. 
 

 

(конечно правильно было бы через d3d, но я не готов)

Edited by SoprachevAK
  • Upvote 1
Link to comment
Short link
Share on other sites

Woker'ов в танках судя по всему нет, либо нужно как то с бОльшими правами запускать, может через ViewSettings какие нибудь хитрые

ERROR: [Scaleform] ReferenceError: Error #1065: Variable Worker is not defined.

Link to comment
Short link
Share on other sites

10 часов назад, SkepticalFox сказал:

@SoprachevAK да просто используй dx overlay

Да по хорошему да, но как то совсем не просто

Там тоже будут некоторые проблемы, в плане что оно будет поверх всего интерфейса, и скорее всего даже курсора.

Скорее всего пока оставлю как есть, в крайнем случае можно с потерями сжимать. Упираюсь то именно в трансфер во флеш 

Link to comment
Short link
Share on other sites

Posted (edited)

А есть где нибудь актуальные примеры по добавлению флешки в боевой интерфейс? 
Вроде бы он уже тоже на AS3 и как будто бы должно быть как с ангаром app.loadView(SFViewLoadParams(...)), а потом во флеше extends AbstractView и addChild. Но как то не работает. 

Посмотрел Полироидовский флеш, там всякие его common либы с абстрактными BattleDisplayable и инжекторами, которые динамически регистрируют компоненты уже из флеша. Оно только так и работает, или можно попроще?

 

______

UPD: Всё сильно проще, ровно как и с ангаром. Просто я импортировал ангарные зависимости)

Edited by SoprachevAK
  • Upvote 1
Link to comment
Short link
Share on other sites

Знаете какого цвета эта цифра 5?
– Абсолютно белая с 50% прозрачности


А знаете почему она выглядит серой?
– А потому что CEF отдаёт картинку в PRGBA, а OBS её юзают как RGBA

У меня в моде будет корректно)

image.png

  • Upvote 1
Link to comment
Short link
Share on other sites

Оказалось что Python тоже медленный язык, и просто так пройтись по всем пикселям картинки, и каждый цвет RGB поделить на прозрачность и умножить на 255 тоже очень медленная операция, а numpy весит 100мб 

 

На этом я пошел попробовал скомпилить c++ на винду из под не винды, ничего не вышло, вернулся к питону. 

Заменил функцию на сишную, которую вызываю через ctypes, вроде бы быстро, а работает или нет узнаем когда сервера включат после обновы. 

  • Upvote 1
Link to comment
Short link
Share on other sites

  • Solution

Ну как то так.
Будем считать что отображение виджетов доделано. 

Поддерживается:

  • Добавление виджетов по URL и из локальных файлов
  • DevTools для открытых виджетов (нужно прописывать в конфиге и перезапускать игру)
  • Изменение размера в двух режимах, зависит от мета тега страницы
    • Произвольное изменение высоты/ширины
    • Изменение ширины, а высота подстраивается под высоту страницы
  • Блокировка виджета – не даёт его случайно сдвинуть, делает прозрачным для кликов
  • Перезагрузка страницы с отключенным кешем страницы
  • Минимизация виджета –  виджет всё ещё выполняется, но не отправляется на клиент (почти не тратит ресурсов компа)
  • Возможно накликать разные размеры/позиции для боя и ангара
  • Виджеты сохраняются при перезапуске игры
  • LocalStorage сохраняется между сессиями

 

https://github.com/WOT-STAT/cef-widget


Следующий шаг – Data Provider, который будет через WebSocket расшаривать для виджетов какие нибудь данные по типу результатов боя. Будет отдельным модом и встроенным в этот


image.thumb.png.7d193976eef512c5ac83bcd540c6d23f.png

  • Upvote 5
Link to comment
Short link
Share on other sites

2 часа назад, Pbody_iwnl сказал:

Это гениально! А ещё это упростит жизнь для некоторых стримеров. Моё почтение 

Ну для стримеров сомнительно, у них и OBS есть, а вот игрокам да
Я сейчас ещё делаю DataProvider и WidgetSDK для JS, чтоб данные из игры в виджеты гнать

  • Upvote 2
Link to comment
Short link
Share on other sites

  • 3 weeks later...
19.07.2024 в 08:12, SkepticalFox сказал:

@SoprachevAK да просто используй dx overlay

В идеале конечно как клиентский CEF делать: кормить CEFу хендл на текстуру Scaleform, но максимально нетривиально в исполнении.

  • Upvote 2
Link to comment
Short link
Share on other sites

15 часов назад, Mixaill сказал:

В идеале конечно как клиентский CEF делать: кормить CEFу хендл на текстуру Scaleform, но максимально нетривиально в исполнении.

Ну это определённо было бы идеально, но учитывая, что Scaleform живёт в нативной части движка, это действительно будет сложнее, чем я готов
..так ещё и на винде

Link to comment
Short link
Share on other sites

Попробовал ещё один способ передать байты во флеш – через URL запрос к локальному http серверу
Забавно, что Loader.load(new URLRequest(url)) память утекает, а URLLoader.load(new URLRequest(url)) |> Loader.loadBytes() всё норм
Но ничего не работает, байты доходят, но дальше обработка занимает больше одного кадра, и успевает придти следующих кадр и честно говоря дебажить это энтузиазма не осталось

В завершения скажу, что глобально CEF модом – эксперимент скорее неудачный, несмотря на то, что что то из него получилось

Link to comment
Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...