Jump to content
Rolan

Редактирование движка X-Ray

Recommended Posts

lordmuzer    725

Это собственно отрисовка внитри игровых шрифтов.

В xray так устроено, что весь текст который игры хочет показать на экране, на самом деле сохраняется в объекте этого самого шрифта

И потом на рендеринге худа каждый объект шрифта выводит все надписи которые им "написали"

Share this post


Link to post
Share on other sites
AndreySol    100
24 минуты назад, lordmuzer сказал:

И потом на рендеринге худа каждый объект шрифта выводит все надписи которые им "написали"

Глядя на код, я было то же так подумал, но оказалось иначе. Я у себя решил добавить возможность использовать вновь добавленные шрифты без обязательной прописи их в движке. Получилось довольно элементарно:

xr_3da\xrGame\HUDManager.h

CGameFont*                InitializeCustomFont(LPCSTR section, u32 flags = 0);

xr_3da\xrGame\HUDManager.cpp

CGameFont* CFontManager::InitializeCustomFont(LPCSTR section, u32 flags)
{
    CGameFont* pFontAdd = NULL;
    InitializeFont(pFontAdd, section, flags);

    return pFontAdd;
}

xr_3da\xrGame\ui\UIXmlInit.cpp

Скрытый текст

 

bool CUIXmlInit::InitFont(CUIXml &xml_doc, LPCSTR path, int index, u32 &color, CGameFont *&pFnt)
{
    pFnt = NULL;
    color = GetColor(xml_doc, path, index, 0xff);

    shared_str font_name = xml_doc.ReadAttrib(path, index, "font", NULL);
    if(*font_name == NULL || xr_strlen(*font_name)<1)
    {
//        pFnt = NULL;
        return false;
    }

    if(*font_name)
    {
        if (!xr_strcmp(*font_name, ARIAL10_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontArial10Russian;
        }
        else if (!xr_strcmp(*font_name, ARIAL14_FONT_NAME))//"arial14"
        {
            pFnt = UI()->Font()->pFontArial14;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI19_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti19Russian;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI22_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti22Russian;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI32_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti32Russian;
        }
        else if(!xr_strcmp(*font_name, GRAFFITI50_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontGraffiti50Russian;
        }
        else if(!xr_strcmp(*font_name, MEDIUM_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontMedium;
        }
        else if(!xr_strcmp(*font_name, SMALL_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontStat;
        }
        else if(!xr_strcmp(*font_name, LETTERICA16_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontLetterica16Russian;
        }
        else if(!xr_strcmp(*font_name, LETTERICA18_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontLetterica18Russian;
        }
        else if(!xr_strcmp(*font_name, LETTERICA25_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontLetterica25;
        }
        else if(!xr_strcmp(*font_name, DI_FONT_NAME))
        {
            pFnt = UI()->Font()->pFontDI;
        }
        else
        {    // 
            pFnt = UI()->Font()->InitializeCustomFont(*font_name);
            if (!pFnt)
            {
                R_ASSERT3(0,"unknown font",*font_name);
                pFnt = NULL;
            }
        }
    }
    return true;
}

 

xr_3da\xrGame\ui\UIWindow_script.cpp

.....

CGameFont* GetFontCustom(LPCSTR section)
{return mngr().InitializeCustomFont(section);}

.....

def("GetFontCustom",            &GetFontCustom),

.....

Теперь просто указываем в xml-теге секцию шрифта из fonts.ltx, или в скриптовом вызове так же. Потестил - вроде все нормально. И как видно по коду, нигде m_all_fonts не задействован. Вот и хотел уточнить, на кой изначально инициализированные шрифты прогонялись через этот вектор и CFontManager::Render() ?

Share this post


Link to post
Share on other sites
lordmuzer    725

Оконная система это не весь движок.

Окна сами вызывают на своем шрифте OnRender(); потому и работают. Для UI этого будет достаточно.

Но сам движок выводит текст через OutI,Out и прочее - вот там важен этот цикл.

 

А сама идея интересная кстати.

Edited by lordmuzer
  • Полезно 1

Share this post


Link to post
Share on other sites
Graff46    418

Подскажите как поменять RGB баланс текстуры если текстура представлена как экземпляр класса CTexture ?


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Ересь    0

Гм, товарищи. Возникла такая нужда - сделать круглую миникарту. В ТЧ. А как - фиг его знает. Не подскажет тут кто-нибудь, как её круглой сделать. Что-то в двигле, в классе самой миникарты... Но что?

Share this post


Link to post
Share on other sites
lordmuzer    725

Хм, а разве тут нужно движок править?

В НА5 была уже круглая карта. Можно откуда взять конфиги для UI

  • Haha 1

Share this post


Link to post
Share on other sites
sto1en    374

В ТЧ круглую карту просто эмулируют. Сама карта - квадратная, а рамка поверх нее - круглая. И за счет ширины этой рамки прячут выступающие углы карты.

  • Thanks 1
  • Полезно 1

Do what thou wilt shall be the whole of the Law.

Share this post


Link to post
Share on other sites
lordmuzer    725

Да, так и есть. Но кроме довольно толстой рамки - проблемы не замечено.

Share this post


Link to post
Share on other sites
sto1en    374

Да проблем и не было никогда. Вариантов реализации за последнии лет восемь нарожали тонну)).

  • Thanks 1

Do what thou wilt shall be the whole of the Law.

Share this post


Link to post
Share on other sites
Ересь    0

@lordmuzer, нет, такая затычка мне не подходит. Рамка у меня тонкая очень, никак не перекроешь. Править надо именно двигло, кхе, там ведь всё. Ну по-крайней мере это нужно сделать в ЗП, чтобы она была квадратной(там даже вроде в самом классе параметр отдельный есть). Значит что? Аналогично надо сделать всё это дело через двигло и в ТЧ. Ну, разве что как-то по-другому, код то отличается во многом. Вот и пишу сюда, в эту тему. Может кто-то уже делал нормально, без вот этих вот "Ну не видно и ладно", или проблема была аналогичная - рамка слишком тонкая.

Share this post


Link to post
Share on other sites
lordmuzer    725

 

@Ересь требования как - не было ) 

могу прикрутить к ogsr если интересно

Edited by lordmuzer
  • Like 1

Share this post


Link to post
Share on other sites
Ересь    0

@lordmuzer, ну как же это. Прямым текстом написал:

8 часов назад, Ересь сказал:

Не подскажет тут кто-нибудь, как её круглой сделать.

 

Share this post


Link to post
Share on other sites
lordmuzer    725

Вот как сделать ее круглой - я подсказал.

Дальше уже хотелки )

Вопрос - движок ogsr подходит для задачи или нет? Под него сделать могу я. Но нужно что бы кто то проверял.

Share this post


Link to post
Share on other sites
Ересь    0

@lordmuzer, ну что значит хотелки.. Вы ж затычку подсказали. Гм, огср... Мне лишь код нужен, поэтому собирать, если вы хотите править исходники, не обязательно.

Edited by Ересь

Share this post


Link to post
Share on other sites
Ересь    0

@lordmuzer, поможете под ТЧ кодец заточить? Я пытался перенести класс минимапы полностью с ЗП, не получилось ничего. Игра запустилось, но карте было очень плохо.

Share this post


Link to post
Share on other sites
laki    319

Всем привет!

Ребята, очень нужна ваша профессиональная помощь! Движок ЗП. Нужно изменить цвет текста 100 советов. Или воткнуть возможность изменения цвета текста, но только для 100 советов, чтобы не затронуть другие надписи. Заранее спасибо!

Share this post


Link to post
Share on other sites
lordmuzer    725

@Ересь сделаю правку для ogsr и скину линку с изменениями.

Но сразу скажу - будет не супер скоро.

Share this post


Link to post
Share on other sites
laki    319

Всё отбой, помощь не нужна. Уже помогли.

Share this post


Link to post
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.


AMK-Team.ru

×
×
  • Create New...