Перейти к контенту

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


Рекомендуемые сообщения

У нас наверное разные 1.0007

xr_3da\xrGame\ui\UIOutfitParams.cpp

===

хотя, да. возможно это уже мое расширение. Но тем не менее - это не отменяет того факта что все задается через конфиг. изучайте исходники - там указан xml файл, с которого все загружается. дальше - по конкретным элементам смотрите координаты.

Изменено пользователем Winsor
Ссылка на комментарий

@Winsor если уж взялся помогать, так не стесняйся, покажи этот UIOutfitParams.cpp или ссылку на него дай. Может это и поможет вопрошающему. А то, как сам вопросы задавать, так это пожалуйста, помогите люди сами мы не местные, а как другим помочь, так не, мое.

 

Ссылка на комментарий
В 14.12.2017 в 23:23, dsh сказал:

как другим помочь, так не, мое

не понятна агрессия по данному поводу, да ладно. Там где я могу - там я помогаю. содержимое данного класса не относиться к вопросу, тем более у меня переписаны и другие классы вывода информации для итемов, т.е. человек не сможет использовать "мой" класс без остальных изменений в классе CUIItemInfo. На свои вопросы, я к сожалению, так же не всегда получаю ответы, приходится разбираться самому.

Вот Вам класс.

https://drive.google.com/file/d/1-zIzxMqteZvmsd-2rkOlT58HLEnP4_Wc/view?usp=sharing
https://drive.google.com/file/d/1FnpLY4ysZYzn-FAGqa9EC-1omwuhv3yX/view?usp=sharing

Помог?

Суть моего поста была в том что абсолютно не важен класс, либо еще что - вся разметка UI находится в конфигах игры. и движком элементы UI не сдвигаются. если человек не захотел, банально, посмотреть на содержимое

void CUIItemInfo::Init(LPCSTR xml_name) и увидеть что нет там сдвигов - хоть давай я ему исходники своего класса - хоть не давай - ну не поможет.

В 15.12.2017 в 07:50, Earth2Space сказал:

@Winsor так 

или

?

UIOutfitParams - так называется файл, где описан класс CUIOutfitParams

 

В 15.12.2017 в 15:44, AndreySol сказал:

конкретного я не увижу

ну куда уж конкретнее.... Движок не делает сдвиг элементов UI , вся разметка описана в конфигах xml. Вы не можете конфиг найти? или каким образом определяется тип итема?

Изменено пользователем Winsor
Ссылка на комментарий
6 часов назад, Winsor сказал:

Движок не делает сдвиг элементов UI , вся разметка описана в конфигах xml.

Продемонстрируйте мне конкретный конфиг, в котором прописано, что при отображении описания аптечки текст описания должен выводится сразу от верхнего края окна описания, а при отображении описания пистолета - текст должен быть смещен на N кол-во пикселей, для того чтоб выше текста уместились индикаторы параметров ствола.

 

В том самом CUIItemInfo::Init имеем:

if(uiXml.NavigateToNode("descr_list",0)) <--- это и есть тот самый конфиг UI-контрола описания предметов, выделенных кликом в инвентаре ?
{
  UIWpnParams = xr_new<CUIWpnParams>();
  UIArtefactParams = xr_new<CUIArtefactParams>();
  UIWpnParams->InitFromXml (uiXml);
  UIArtefactParams->InitFromXml (uiXml);
  
  UIDesc = xr_new<CUIScrollView>();
  AttachChild (UIDesc);
  UIDesc->SetAutoDelete (true);
  m_desc_info.bShowDescrText = !!uiXml.ReadAttribInt("descr_list",0,"only_text_info", 1);
  xml_init.InitScrollView (uiXml, "descr_list", 0, UIDesc);
  xml_init.InitFont (uiXml, "descr_list:font", 0, m_desc_info.uDescClr, m_desc_info.pDescFont);
}

в  CUIItemInfo::InitItem:

if(UIDesc)
{
	UIDesc->Clear(); VERIFY (0==UIDesc->GetSize());

	TryAddWpnInfo (pInvItem->object().cNameSect());
	TryAddArtefactInfo (pInvItem->object().cNameSect());

	if(m_desc_info.bShowDescrText)
	{
		CUIStatic* pItem = xr_new<CUIStatic>();
        pItem->SetTextColor (m_desc_info.uDescClr);
        pItem->SetFont (m_desc_info.pDescFont);
        pItem->SetWidth (UIDesc->GetDesiredChildWidth());
        pItem->SetTextComplexMode (true);
        pItem->SetText (*pInvItem->ItemDescription());
        pItem->AdjustHeightToText ();
      	UIDesc->AddWindow (pItem, true);
    }
  
  	UIDesc->ScrollToBegin();
}

В конфиге "config\ui\inventory_item.xml"(конкретно для инвентаря) смотрим:

 <descr_list x="12" y="223" width="298" height="140" always_show_scroll="0" left_ident="16">
   <font font="letterica16" r="240" g="217" b="182"/>
</descr_list>

Ну ткните уже меня носом, где в этих строках учитывается, какой предмет мы кликнули и как должно выбираться смещение текста описания, если кликнули оружие или артефакт, с учетом того, что для стволов и артов - разное кол-во индикаторов ?

Ссылка на комментарий
43 минуты назад, AndreySol сказал:

UIDesc = xr_new<CUIScrollView>();

UIDesc - CScrollView - располагает элементы друг под другом.

 

45 минут назад, AndreySol сказал:

TryAddWpnInfo (pInvItem->object().cNameSect());

TryAddArtefactInfo (pInvItem->object().cNameSect());

CUIStatic* pItem = xr_new<CUIStatic>();
UIDesc->AddWindow (pItem, true);

Сначала добавляются параметры оружия, если можно, потом параметры артефакта, потом описание. Они все располагаются друг под другом.

 

Учет предмета, на котором кликнули, внутри TryAddWpnInfo и TryAddArtefactInfo. Смещение внутри CUIScrollView.

Разное количество индикаторов внутри CUIWpnParams и CUIArtefactParams.

 

Ссылка на комментарий
32 минуты назад, abramcumner сказал:

CScrollView - располагает элементы друг под другом.

Ага...

Добавил у себя(1.0007rc1) индикаторы для брони - сделал по образу и подобию оружейных. Все нормально, за исключением - при клике на бронике, текст описания налагается поверх индикаторов. Что я мог скопипастить из оружейных классов\ui-конфигов не так ? Уже неделю заглядываю в код и никак не соображу, чем добавленный мной код не гож движку...

Цитата

Смещение внутри CUIScrollView

Подскажите, в какой именно ф-ции ? Смотрел там уже ранее, не увидел. Здравой логикой понимаю(или надеюсь ?), что метод смещения должен быть универсален и не зависеть от того, что добавлено - т.е. в коде класса CUIScrollView не должно быть каких-то прямых проверок, что добавлено что-то связанное именно с CUIWpnParams или CUIArtefactParams ?

Ссылка на комментарий

@AndreySol может ты как-нибудь не так добавляешь? В скроллвью добавляется статик. Это статик является как бы строкой. Все статики, которые будут добавляться в этот скроллвью позже, будут всегда отображаться под ним.

 

Может ты статик с текстом не добавляешь в этот скроллвью, а аттачишь к родителю?

Изменено пользователем dsh
Ссылка на комментарий
20 минут назад, dsh сказал:

может ты как-нибудь не так добавляешь?

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

Ссылка на комментарий
2 часа назад, AndreySol сказал:

Подскажите, в какой именно ф-ции ? Смотрел там уже ранее, не увидел. Здравой логикой понимаю(или надеюсь ?), что метод смещения должен быть универсален и не зависеть от того, что добавлено - т.е. в коде класса CUIScrollView не должно быть каких-то прямых проверок, что добавлено что-то связанное именно с CUIWpnParams или CUIArtefactParams ?

Да, все так и есть - никаких проверок на CUIWpnParams или CUIArtefactParams. Просто перебор всех добавленных элементов и расстановка. Метод void CUIScrollView::RecalcSize()

    if(GetVertFlip()){
        for(WINDOW_LIST::reverse_iterator it = m_pad->GetChildWndList().rbegin(); m_pad->GetChildWndList().rend() != it; ++it)
        {
            (*it)->SetWndPos        (item_pos);
            item_pos.y                += (*it)->GetWndSize().y;
            item_pos.y                += m_vertInterval;
            ...
        }

Что-то ты не так скопипастил или в xml не тот размер прописал. Как написал @dsh, надо обязательно вызвать AddWindow для твоего индикатора, только тогда он добавится именно в список и сдвинет остальные элементы.

Изменено пользователем abramcumner
Ссылка на комментарий
1 час назад, abramcumner сказал:

или в xml не тот размер прописал

Во, оно!

Забыл после копи-пасты сам размер окна изменить. Тут кстати еще с толку сбило, что в движке все-же не по-русски сделано - когда грузишь в UI-контрол к примеру текст, который вылазит за вертикальный размер, вместо обрезания по границе контрола текст отобразится полностью.Так бы увидел, что не все индикаторы видны - уже бы давно исправил.

 

  • Сочувствую 1
Ссылка на комментарий

Два вопроса:

1). в xr_src\xrCore\_color.h

IC SelfRef lerp(SelfCRef c1, SelfCRef c2, T t)
{
	T invt = 1.f-t;
	r = c1.r*invt + c2.r*t;
	g = c1.g*invt + c2.g*t;
	b = c1.b*invt + c2.b*t;
	a = c1.a*invt + c2.a*t;
	return *this;
}

Пример использования:

void CUIProgressBar::UpdateProgressBar()
{
	..........................
	if(m_bUseColor)
	{
		Fcolor curr;
		curr.lerp(m_minColor,m_maxColor,fCurrentLength);
		m_UIProgressItem.GetStaticItem()->SetColor(curr);
	}
}

Что делает эта ф-ция? Если я правильно понял - это уменьшение яркости полоски прогресса при приближении к мин. значению ?

 

2). А что это ?

  UI()->PushScissor(rect);
  m_UIBackgroundItem.Draw();
  UI()->PopScissor();

В чем смысл ?

Изменено пользователем AndreySol
Ссылка на комментарий

@AndreySol насколько я вижу, не то, что бы уменьшение яркости, в как бы переход первого цвета во второй. Т.е. на примере полоски, постепенный переход из зеленого в красный по мере уменьшении полоски.

 

  • Спасибо 1
Ссылка на комментарий
В 18.12.2017 в 23:43, AndreySol сказал:

который вылазит за вертикальный размер, вместо обрезания по границе контрола текст отобразится полностью

За это отвечает отдельный параметр в конфиге xml - complex_mode для текста в статике (либо выводить в одну строчку либо по ширине контрола переносить строки). Есть еще попытка поддерживать нормальный wordwrap через EElipsisPosition - но в 1.0007 код закомменчен - разработчики не доделали. 

Ссылка на комментарий

Подскажите, кто в курсе для ТЧ 1.0007rc1: для оружия, откуда брать боеприпасы для зарядки\перезарядки - это где-то в базовом классе прописано или раскидано по разным классам. Где конкретно ?

Добавлено НаноБот,

Ты во обще про что? Патроны прописаны в m_pAmmo, и ещё в других проперти, смотри исходники, Weapon.h.

Ссылка на комментарий

Столкнулся с одним багом. В классе CExplosive метод UpdateCL вызывается не каждый фрейм, через раз, т.е. работает как метод shedule_Update, в результате свет не гаснет через m_fExplodeDurationMax. Так и не понял почему, метод виртуальный и вызывается из нескольких точек. Вызываться должен вроде из модуля xr_object.cpp

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

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

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...