HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть I
Страницы (241): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Ну штож, новый механизм уже вполне себе вырисовывается. Для простоты и удобства я сделал его частью механизма сейв-рестора. Точнее говоря от сейв-рестора там только табличка глобальных деклараций, ну которая DECLARE_DATA_DESC(); Но дело в том, что эта табличка сама-по себе не обязывает хранить в ней непременно данные для сериализации. Это просто такая универсальная табличка, где можно хранить всё что угодно, а различать по выставленным флагам.

Сейчас, для примера, чтобы передать на клиент оригин и углы, не надо больше ничего копировать в AddToFullPack, не надо сортировать строчки в delta.lst и не надо писать ответный код на клиенте (для entity_state_t разумеется, а для кастомной дельты, как в Сорсе - надо). Достаточно просто добавить в DATADESC вот такие штуки:

DEFINE_DELTA( m_vecAbsOrigin, FIELD_POSITION_VECTOR ),
DEFINE_DELTA( m_vecAbsAngles, FIELD_ANGLES ),

и всё. Не надо по особому помечать переменные, создавать новые таблицы, подключать какие-то каллбэки для прокси и прочую чертовщинку. Я полагаю это самый оптимальный вариант. Разумеется это автоматически учитывает наследие классов и посылает для каждого класса всё объявленное, ну собсно, как и с сейвами.

Добавлено 09-09-2019 в 19:41:

Больше скажу. Этот механизм позволяет даже передавать указатели на функции по сети.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 183470

Старое сообщение 09-09-2019 16:41
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Этот механизм позволяет даже передавать указатели на функции по сети.

Ну што ж, несмотря на утрату delta.lst и возможности сортировать в ней строчки, нашему Мастеру будет чем заняться!

__________________

Сообщить модератору | | IP: Записан
Сообщение: 183471

Старое сообщение 09-09-2019 16:43
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Вот вам для примера как тот же оригин посылается в сорсе:

Сперва он объявляется хитрым образом:

C++ Source Code:
CNetworkVector( m_vecOrigin );

Причём для разных типов данных - свои названия. Для углов к примеру CNetworkQAngle, есть еще какие-то CNetworkVectorForDerived, CNetworkVar, CNetworkHandle (для EHANDLE). Затем нам надо создать новую таблицу, специально для передаваемых переменных.
C++ Source Code:
1
// This table encodes the CBaseEntity data.
2
IMPLEMENT_SERVERCLASS_ST_NOBASE( CBaseEntity, DT_BaseEntity )
3
SendPropDataTable( "AnimTimeMustBeFirst", 0, &REFERENCE_SEND_TABLE(DT_AnimTimeMustBeFirst), SendProxy_ClientSideAnimation ),
4
SendPropInt			(SENDINFO(m_flSimulationTime),	SIMULATION_TIME_WINDOW_BITS, SPROP_UNSIGNED|SPROP_CHANGES_OFTEN|SPROP_ENCODED_AGAINST_TICKCOUNT, SendProxy_SimulationTime),
5
 
6
SendPropVector	(SENDINFO(m_vecOrigin), -1,  SPROP_NOSCALE|SPROP_CHANGES_OFTEN, 0.0f, HIGH_DEFAULT, SendProxy_Origin ),

Вот это вот DT_BaseEntity тоже надо объявить, чёб движок мог его к себе утянуть и проанализировать. Дальше тут как видите еще и куча флажков-подсказок, типа меняется часто, не скейлить. Как будет всего этого мало, есть еще каллбэк SendProxy_Origin. Ну впрочем можно и без него.
Дальше интереснее. На клиенте m_vecOrigin объявлен как самый обычный Vector. А рядом -
C++ Source Code:
CInterpolatedVar< Vector >		m_iv_vecOrigin;

Но не всё так просто. Вот на клиенте ответная табличка:
C++ Source Code:
1
BEGIN_RECV_TABLE_NOBASE(C_BaseEntity, DT_BaseEntity)
2
RecvPropDataTable( "AnimTimeMustBeFirst", 0, 0, &REFERENCE_RECV_TABLE(DT_AnimTimeMustBeFirst) ),
3
RecvPropInt( RECVINFO(m_flSimulationTime), 0, RecvProxy_SimulationTime ),
4
 
5
RecvPropVector( RECVINFO_NAME( m_vecNetworkOrigin, m_vecOrigin ) ),

Дальше нам надо в конструкторе связать интерполятор с переменной:
C++ Source Code:
AddVar( &m_vecOrigin, &m_iv_vecOrigin, LATCH_SIMULATION_VAR );

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 183472

Старое сообщение 09-09-2019 17:00
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Зачем кому-то в сети указатель на функцию в чужой памяти?

Сообщить модератору | | IP: Записан
Сообщение: 183475

Старое сообщение 09-09-2019 19:09
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Для предихтинга жеж. Хотя хз. Может и не понадобится.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 183476

Старое сообщение 09-09-2019 19:51
-
thambs
мразь конченная

Дата регистрации: Mar 2006
Проживает: -
Сообщений: 6417

Рейтинг



Дядя Миша

Цитата:
указатель на функцию в чужой памяти

Это вообще законно? Вплане, не потенциальное UB?

__________________
http://www.moddb.com/mods/monorail-quest

Отредактировано thambs 09-09-2019 в 22:23

Сообщить модератору | | IP: Записан
Сообщение: 183480

Старое сообщение 09-09-2019 22:14
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



thambs
Разыменуешь — бида. Но сравнивать-то с адресами из той же памяти можно без последствий.

Сообщить модератору | | IP: Записан
Сообщение: 183481

Старое сообщение 10-09-2019 05:00
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



А кто сказал, что я буду посылать по сети именно указатель? Это вы сами придумали. Указатель сперва превращается в уникальное имя Class::Function, потом это имя добавляется в общий пул строк, который автоматически синхронизируется по сети, потом я посылаю идентификатор этой строки два байта, принимаю на клиенте, превращаю обратно в строку и по строке ищу указатель на функцию.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 183483

Старое сообщение 10-09-2019 06:03
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
А кто сказал, что я буду посылать по сети именно указатель?

Потому что это очень свежая и оригинальная идея. До такого никто в мире не додумался, а ты бы реализовал!

__________________

Сообщить модератору | | IP: Записан
Сообщение: 183484

Старое сообщение 10-09-2019 06:05
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Цитата:
Дядя Миша писал:
Больше скажу. Этот механизм позволяет даже передавать указатели на функции по сети.

Сообщить модератору | | IP: Записан
Сообщение: 183486

Старое сообщение 10-09-2019 08:20
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 183488

Старое сообщение 10-09-2019 08:44
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34529
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
движку он не нужен.

Клиентская часть? Всякие хардкодед-мессаги для восстановления всяких разных скринфейдов?

__________________

Сообщить модератору | | IP: Записан
Сообщение: 183489

Старое сообщение 10-09-2019 08:47
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



Дядя Миша
Ну прям микродвижок, навроде микроядра ОС.

Сообщить модератору | | IP: Записан
Сообщение: 183491

Старое сообщение 10-09-2019 08:57
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12901
Возраст: 32

Рейтинг



nemyax
При том не кроссплатформенный

Я так понимаю, Дядя Миша из Ксаша решил сделать первый квейк.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | | IP: Записан
Сообщение: 183492

Старое сообщение 10-09-2019 08:59
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4137

Рейтинг



FiEctro
Первый квейк кокрастоке клиент-серверный монолитный.

Сообщить модератору | | IP: Записан
Сообщение: 183493

Старое сообщение 10-09-2019 09:02
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 16:51. Новая тема    Ответить
Страницы (241): « Первая ... « 5 6 7 8 [9] 10 11 12 13 » ... Последняя »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть I
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024