Редактирование движка X-Ray - Страница 136 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

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


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

1 час назад, Winsor сказал:

... UIItemInfo.cpp.

Знаю.

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

броня CUIOutfitParams

Поиском в 1.0007rc1 такой класс не найден.

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

xr_3da\xrGame\ui\UIOutfitParams.cpp

===

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

Изменено пользователем Winsor

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

 

@Winsor так 

11 часов назад, Winsor сказал:

CUIOutfitParams

или

8 часов назад, Winsor сказал:

UIOutfitParams

?

Ладно, отбой...

Я уже понял, что ничего конкретного я не увижу. Всем спасибо....

Посильно ли чайнику вставить раскачку из "раскачки ЛА для тч 1.0006" в огсешные xrcore, xrgame и xrnetserver?

В 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: для оружия, откуда брать боеприпасы для зарядки\перезарядки - это где-то в базовом классе прописано или раскидано по разным классам. Где конкретно ?

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

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

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

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

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

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

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

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

Войти

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

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

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