Jump to content
Korean Random
wotunion

Кастомизируемые текстовые поля в окне боевого интерфейса

Опрос  

20 members have voted

You do not have permission to vote in this poll, or see the poll results. Please sign in or register to vote in this poll.

Recommended Posts

вместо interval так подойдет?

Да, E_STAT_LOADED - самое оно.

Я замержил пока то, что есть, а то уже тяжело на мобилке открывается. :)

Share this post


Link to post

Short link
Share on other sites

Рабочий вариант в ночном билде.

 

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

 

Еще в этом варианте добавлю личные макросы и макросы статистики для текущего игрока

  • Upvote 3

Share this post


Link to post

Short link
Share on other sites
Спасибо, неплохая штука получилась.

 

UPD. Допускается подстановка глобальных макросов, личных макросов, макросов статистики для текущего игрока

Сделал пулл

Не за что)

Чего только стоит Ваша помощь с холдерами глубокой ночью)

Edited by wotunion

Share this post


Link to post

Short link
Share on other sites

Спасибо, неплохая штука получилась.

В продолжение развития полей.

 

1. Уже реализовал логику обновляемых полей по событию, указанному для конкретного поля в конфиге

2. Сделал глобальные макросы с шансами на победу, отдельно статик, и отдельно - динамический (тоже нужна отложенная инициализация до Defines.E_STAT_LOADED)

3. Сделал поле с шансами на победу и влючил его обновление (обновляются только поля, где, разрешено && прописано событие:

"test": {                "enabled": true,                "isUpdateable": true,                 "updateEvent": "ON_VECHICLE_DESTROYED",
Прописал вызов в нужном месте:

 

PlayersPanel

m_dead_noticed[uid] = true;                        //Logger.add("dead: " + uid);                        BIChances.UpdateBIChances();                        BattleLabels.UpdateBattleLabels("ON_VECHICLE_DESTROYED");
Все отлично работает, НО, только при первом обновлении, в данном случае, после первого фрага обновляется, после второго и дальше - уже нет.

 

Выяснил и подтвердил через лог, что строка, где есть макрос, кэшируется после первого вызова Macros.Format и при повторном вызове отдается кэш

 

Macros.as

if (cached_value !== undefined)            {                //Logger.add("cached: " + cached_value);                return cached_value;            }
Есть такой вопрос, можно ли, чтобы не изобретать велосипедов

 

вот здесь

if (isStaticMacro)            {                if (pname != null && pname != "")                {                    if (options != null)                    {                        //Logger.add("add to cache: " + format + " => " + res);                        player_cache[format] = res;                    }                }                else                {                       //==ЗДЕСЬ                    m_macros_cache_global[format] = res;                }            }
или здесь
if (cached_value !== undefined) //ЗДЕСЬ            {                //Logger.add("cached: " + cached_value);                return cached_value;            }
сделать проверку через какую-нибудь функцию на наличие в строке макроса, который в списке макросов, которые не должны кэшироваться, извините за тавтологию, и если да, то не выполнять его кеширование ?

 

//Обещаю ничего не поломать)

 

Еще есть кривой вариант(рабочий) - При каждом вызове Macros.Format именно для обновляемого поля, подставлять ей (функции) нужную строку (formats), но дописывать к ней каждый раз уникальные неотображаемые в htmText символы (спрятать в тег, например, текущее время) при выполнении обновления поля

 

Кривой вариант четко работает, задачу по обману кэша выполняет на отлично)

 

Вот, здесь уже макрос на динамический шанс на победу, находящийся в обновляемом поле, отлично работает и обновляется (подставляется текущее время в тег html):

... .f.htmlText  = ... + Macros.Format(Config.config.myPlayerName, BattleLabels._BattleLabels.formats[BattleLabels._BattleLabels.UpdateableTextFieldsIndexes[i]].formats + "<body class='" + my_date.getTime() + "'>") + "</p>");
post-27262-0-51000800-1460251176_thumb.png Edited by wotunion
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Макросы, которые отдают значение через функцию не кешируются.

Share this post


Link to post

Short link
Share on other sites

 

 

"isUpdateable": true, "updateEvent": "ON_VECHICLE_DESTROYED",

Может достаточно только:

"updateEvent": "ON_VECHICLE_DESTROYED"

Если не надо обновлять, то писать:

"updateEvent": ""

Share this post


Link to post

Short link
Share on other sites

Макросы, которые отдают значение через функцию не кешируются.

Это да, я проверил, но мне тогда нужно предварительный парсинг строки formats делать на наличие нужных макросов, подставлять его значение и потом уже делать Macros.Format, будет ли это оптимально

Так сделать?

 

Типа

private function GetMacrosData(formats: String)): string

...

обработка formats

запрос значений макросов из списка

...

return formats с подстановленными значениями маросов из списка

 

И подставлять уже в Macros.Format, который доделает оставшиеся макросы, если они есть?

 

upd. Macros.getGlobalValue - это оно?

.

upd. Оно, проверил

 

Но все равно процент однородности строки formats после подстановки нужных значений с использованием Macros.getGlobalValue (live шанс или там хп будет менятся) будет ничтожно мал или равен 0, поэтому с Macros.Format кэширование все равно не будет работать, а получается делается уже 2 вызова по макросам вместо одного.

 

Может вариант с текущем временем?

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

 

 

 

Не думаю, что будут просадки по производительности, если конечно не делать 100500 обновляемы полей с таким же кол-вом некэшируемых макросов (не говорим сейчас о хп, там всегда много обновлений, и они и так динамические)

 

 

Могу кинуть в пулл для теста полностью такой рабочий вариант с двумя глоб. макросами

 

Кстати, BIChances.as можно будет удалить

 

{{winstatic}} и {{winlive}}

Может достаточно только:

"updateEvent": "ON_VECHICLE_DESTROYED"
Если не надо обновлять, то писать:

"updateEvent": ""
Можно и так, неплохо Edited by wotunion

Share this post


Link to post

Short link
Share on other sites

Это да, я проверил, но мне тогда нужно предварительный парсинг строки formats делать на наличие нужных макросов, подставлять его значение и потом уже делать Macros.Format, будет ли это оптимально

Так сделать?

Не так. Macros.Format() сам все сделает.

 

Проще показать на примерах:

 

Вот это статический макрос:

 

// {{cellsize}}
m_globals["cellsize"] = Math.round(Config.mapSize / 10);

 

А это - динамический

 

// {{my-frags}}
m_globals["my-frags"] = function(o:Object) { return isNaN(Macros.s_my_frags) || Macros.s_my_frags == 0 ? NaN : Macros.s_my_frags; }

 

Динамические не кешируются.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Не так. Macros.Format() сам все сделает.

 

Проще показать на примерах:

 

Вот это статический макрос:

 

// {{cellsize}}m_globals["cellsize"] = Math.round(Config.mapSize / 10);
А это - динамический

// {{my-frags}}m_globals["my-frags"] = function(o:Object) { return isNaN(Macros.s_my_frags) || Macros.s_my_frags == 0 ? NaN : Macros.s_my_frags; }
Динамические не кешируются.
Все понял, не дошло сразу, там же return есть, спасибо! Edited by wotunion

Share this post


Link to post

Short link
Share on other sites

 

 

Кстати, BIChances.as можно будет удалить
ага, а заодно и totalHP перенести бы в экстра поля. а то на данный момент я так и не придумал вариант использования:) 

Share this post


Link to post

Short link
Share on other sites

ага, а заодно и totalHP перенести бы в экстра поля. а то на данный момент я так и не придумал вариант использования:)

 

Оно вроде на питоне, тоже дин.макрос нужен типа {{hpally}} {{hpenemy}} Edited by wotunion

Share this post


Link to post

Short link
Share on other sites

 

 

Оно вроде на питоне, тоже дин.макрос нужен типа {{hpally}} {{hpenemy}}

и эти же макросы только в процентах, чтоб можно было рисовать 

Share this post


Link to post

Short link
Share on other sites

 

 

и эти же макросы только в процентах, чтоб можно было рисовать 
и разность hp тоже абсолютная и в процентах

Share this post


Link to post

Short link
Share on other sites

и разность hp тоже абсолютная и в процентах

заодно и нормализацию бы прикрутить для графического отображения:) два дня идею вынашиваю))

Share this post


Link to post

Short link
Share on other sites
Проще показать на примерах: Вот это статический макрос: // {{cellsize}}m_globals["cellsize"] = Math.round(Config.mapSize / 10); А это - динамический // {{my-frags}}m_globals["my-frags"] = function(o:Object) { return isNaN(Macros.s_my_frags) || Macros.s_my_frags == 0 ? NaN : Macros.s_my_frags; } Динамические не кешируются.

 

 

Что я не так делаю

 

m_globals["winstatic"] = function(o:Object) { return "Test"; }

 

 

MacrosFormat 

 

отдает текстом {{winstatic}}

 

даже {{my-frags}} отдает текстом "{{my-frags}}"

 

 

m_globals["winstatic"] = "Test";

 

отдает нормально, но это не динамический

 

 

 

Нужно ли что-то писать в options Macros.Format

Edited by wotunion
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Нужно ли что-то писать в options Macros.Format

Да, нужно опции передавать. Можно просто {}

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Да, нужно опции передавать. Можно просто {}
 

Да, причина была в этом, но не проявлялась на стат. макросах


 

 

а, нужно опции передавать. Можно просто {}
 

 

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

спс.


 

 

заодно и нормализацию бы прикрутить для графического отображения:) два дня идею вынашиваю))
 

Поподробнее плз

Share this post


Link to post

Short link
Share on other sites

 

 

Поподробнее плз
:norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300 

Share this post


Link to post

Short link
Share on other sites
:norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300 

Для значений, у которых есть фиксированный максимум это не сложно сделать.

Share this post


Link to post

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.

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.

×