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

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


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

Концептуальные вопросы:

Я, потренировавшись на компиляторе, решил потихоньку пилить многопоточность в игре... Суть такая  - разбить всё, что можно делать параллельно, на кусочки, "работы".

Многопоточность в игре есть. Изучил? А прикинул что и на какие кусочки будешь разбивать, ну кроме того, что аи в один поток, рендер в 5 потоков и все залетает?

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

 

Код поскипан, идеи кода не понял: передается объект работы, рабочая функция и параметры - зачем?

Есть классический кондовый вариант:

struct IWork
{
  virtual ~IWork();
  virtual void Do() = 0;
};

struct Work1 : public IWork
{
  Work1(...){}
  //нужные параметры

  virtual void Do()
  {
    //делаешь то, что нужно
  }
}

//где-то в коде
auto work = new Work1(...);
mng.AddWork(work);

//где-то в другом потоке вызывается work->Do();
Или так:

auto workLambda = [/*захватываешь что нужно*/] () -> void { /*делаешь что нужно*/ };
mng.AddWork(workLambda);

//где-то в другом потоке вызывается workLambda();
Причем это вообще не главное - тебе надо как-то в вызывающем коде дождаться завершения и получить результаты из твоей "работы".

Хочешь почитай цикл статей:

Асинхронность: назад в будущее

Асинхронность 2: телепортация сквозь порталы

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

@abramcumner,

 

 

Изучил?

По тому и делаю, что там ГГ какое то, два основных потока, которые, по большому счёту, работают друг за другом.

 

 

 

вызывающем коде дождаться завершения

Я не хочу так делать, это скорей к компилю... Вызывающий код добавляет работу в очередь и идёт дальше.

		volatile long iterator = 0;
		MultiThread::MultiThreadWork2([&](volatile float& prog)
		{
			float	p_cost = 1.0f / float(mu_models().size());
			Interlocked_for(pos, iterator, mu_models().size())
			{
				calc_ogf(*mu_models()[pos]);
				export_geometry(*mu_models()[pos]);
				prog = pos*p_cost;
			}
		});

Я не про такое говорю (когда надо ждать завершения).

 

 

Есть классический кондовый вариант:

У меня и так сделано подобным образом.

Я же не спросил, как мне ВСЁ это сделать, я уже сделал, но стало любопытно как сделать лучше.

 

 

 

TBB

OpenMP ещё, смотрел уже. Но там нигде нет кнопки "Автоматически распараллелить на 100% без добавления жуков" :D

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

Кто нибудь мне объяснит как работают инклюды? Почему спавн секции не инклюдятся ни откуда кроме сустема? Кто разгадает эту тайну мадридского двора - тому пачку китикета.

  • Не нравится 1
Ссылка на комментарий

@Карлан, ну у тебя же исходники есть...

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

То есть типа только один уровень вложенности инклудов.

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

Havok_Physics_and_Havok_Animation_SDKs_5.5.0_6652.zip 223 мб.

 

Нашел, уже даже не помню где, движок Хавка 5.5, есть  в доступе открытом, а вот где бы найти 5 версию - глухо.

andreyholkin.gif

rod_cccp.gif

 

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

@abramcumner, я в них мало что смыслю, я далеко не программист, поэтому прошу помощи. Ну а смотри, глянь в тот же stalkers.ltx или monsters.ltx, там инклуды же работают, во многих модах в items.ltx подключают новые секции, и они тоже все работают, тут что не так может быть?  

Добавлено RayTwitty,

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

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

Как реализуется разрушение стекл?У меня есть модель я на неё назначаю шейдер window и получаю полноценное стекло с разрушением или как?

Добавлено RayTwitty,

Разбить стекло на полики - дальше двиг все сделает сам.

Добавлено RayTwitty,

в редакторе разбить*

nikita_nz1986.gif
9JX0t72.jpg
XqgE6.png

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

upd:
Ох :facepalm: , это какой-то идиотизм, сейчас попробовал просто заинклудить и все заработало. Вопрос закрываю.

Изменено пользователем Карлан
  • Согласен 1
Ссылка на комментарий

http://www.amk-team.ru/forum/index.php?showtopic=10339&p=910493
Дополнил FAQ описанием классов: matrix, CTime, CALifeSimulator, CSE_Abstract, CSE_ALifeObject, а также оконными классами: CUIWindow, CUIStatic, CUIListWnd, CUIComboBox, CUITrackBar. Таким образом, описаны практически все скриптовые правки, за исключением пространства level и колбеков.

Однако есть пару пробелов в FAQ - в частности методы класса matrix и метод use_ai_locations класса CSE_ALifeObject.
Также, не на 100% уверен на счет описания методов класса CTime...

Если у кого-нибудь есть какая-нибудь инфа по этому материалу - прошу написать в теме :)

З.Ы. печально, что почти все правки делались без описания в коммите, и их назначение приходится искать практически везде по движку и геймдате OGSE.

Изменено пользователем Shadows
  • Спасибо 2
  • Нравится 1
Ссылка на комментарий

 

 

геймдате OGSE.

 

OGSE0693 gamedata весит 4 433 453 243 b. Я для себя отсеял не нужные db архивы, Жаль нет трафика, а то мог бы скинуть вам распаковку.

 

Shadows, а как дополнение скинул бы свою правленую папку bin, а то по вашему Репозиторию, не каждый может разобраться.

 

Хотя мне не нужно это, так как, я вхожу в число тех людей, которые не понимают, что и как это хавают. Ведь ваши правки движка, только вам понятны и единицам. Надо доводить и gamedata до полной интеграции с bin.

Добавлено RayTwitty,

"Жаль нет трафика, а то мог бы скинуть вам распаковку."

Скрипты ОГСЕ у меня итак есть, спасибо.

 

"Ведь ваши правки движка, только вам понятны и единицам."

Вот для того FAQ и создавался, чтобы всем было понятно.

  • Не согласен 1

andreyholkin.gif

rod_cccp.gif

 

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

Заинтересован правками от тов. Kolmogor-а. Попытался хоть както добиться визуализации слотов в игре, но так и не смог. Может кто разжует, что нужно сделать, кроме добавления их статиков в ui_invetory_new и ui_invetory_new_16

Добавлено RayTwitty,

Видимо стоит убрать "неточное" описание, ибо уже не первый раз спрашивают...

Скорее всего, слоты в движке не реализованы до конца. Поэтому в инвентаре не отображаются.

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

Тепло приветствую всех!

Искал помощи на многих форумах, но увы не помогли...) Ребята, подскажите, пожалуйста, возможно ли перенести настройки вида от 3го лица из Лост Альфы в оригинальные Тень Чернобыля и Зов Припяти? Если да, то как? Вероятно эти правки как-то завязаны на бинарниках. Но что, как, где и чем не знаю. И ещё, как заставить оружие висеть за спиной? Очень нужно. Пилю свой мод и хотел бы использовать данные наработки.

 

Заранее благодарю.

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

Shadows, не та ли dll от Kolmogor'a опубликована, с которой артефакты работают с инвенаря, а пояс служит контейнером?

Ребят! Нужна DLL от Kolmogor'a, реализуящая езду на авто в ЗП. Носом в XrEx не тыкать, нужна оринальная DLL.

Ребята, у меня просьбочка небольшая Давно от malandrius'a появилась заплатка, позволяющая обойтись без mp_ranks. Существует она только на 4 и 6 версиях игры (другие не нашёл). Так вот, может ли кто-то сделать тоже самое с моим файлом? Он от 1.005 патча (взял из мода ОГСЕ).

http://rghost.ru/11667531

Осталась эта DLL у кого-нть? Изменено пользователем Forser
Добавлено RayTwitty,

Она.

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

, закинь луа хелп обновленный на репо. Ты вроде тут один активный оттуда.

Добавлено RayTwitty,

Тот репо скоро примет ислам, поэтому не имеет смысла.

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

Я смотрю тут либу одну, для Task-Based Threading

https://github.com/RichieSams/FiberTaskingLib

там есть и книжка, и презентация с GDC

EA STL отпиливается легко(Сам уже отпилил)

Так же есть подобная либа в составе физикса (см. в исходниках)

P.S привел пример,что бы не изобретать велосипед(TBB уже предлагали)

 

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

@Tron,

Любопытно, "свой" аллокатор для каждого потока. Я тоже про это думал. Надо будет по изучать...

И всё равно не в ту степь :russian_ru:

Ответа на мой вопрос там нет...

 

Попробую описать обобщённо и отделить половину задачи.

Итак,

foo<int,float,bool>   ggg(123, 123.f, true); //Сие должно "разворачиваться" в такое ->


//типо template<typename...Args>
class foo
{
int arg_1;
float arg_2;
bool arg_3;

foo(int _arg_1, float _arg_2, bool _arg_3) : arg_1(_arg_1), arg_2(_arg_2), arg_3(_arg_3){};
};
template<typename Arg_1, typename Arg_2, typename Arg_3>
class foo
{
	Arg_1 arg_1;
	Arg_2 arg_2;
	Arg_3 arg_3;

	foo(Arg_1 _a1, Arg_2 _a2, Arg_3 _a3) : arg_1(_a1), arg_2(_a2), arg_3(_a3){};

};

 

 

http://habrahabr.ru/post/228031/ *ещё не весь хабр перекопал* в конце есть про "Defer", но только я бы хотел сделать более быстрый вызов, без туплей и подобного с последующей рекурсивной "распаковкой аргументов"

 

 

П.С. Порой полезно запилить свой велосипед, дабы научиться и сделать мопед ;)

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

В Унити скрипты на С# пишут. Хе-хе.

 

И когда же до меня дойдёт хотя бы часть написанного в том движке.

 

Завидую вам, тем кто шарит. Толи мать-природа меня обидила - нифига не понимаю. :wacko:

Добавлено RayTwitty,

Надо не с реализации техники начинать, а с чего-нибудь попроще и постепенно увеличивать сложность. Естественно, с наскоку что-то сложное новичок не сделает.

andreyholkin.gif

rod_cccp.gif

 

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...