HLFX.Ru Forum Страницы (264): « Первая ... « 146 147 148 149 [150] 151 152 153 154 » ... Последняя »
Показать все 3960 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено ncuxonaT 23-04-2020 в 12:17:

Дядя Миша так я и запишу. Вопрос в том, как быть с текстурами. У одного материала цвет задан числами, а у другого - текстурой. Нужно как-то выбирать


Отправлено Дядя Миша 23-04-2020 в 12:30:

Да сама система эта порочная числа-текстуры. Отсюда и всё дерьмо.
Я бы сделал через убер-шейдеры с #ifdef к примеру.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ncuxonaT 23-04-2020 в 12:34:

Дядя Миша понимаю, что порочная, но не вижу альтернативы. #ifdef не подходит, луч может попасть в любой материал, нужно иметь доступ ко всем сразу


Отправлено Дядя Миша 23-04-2020 в 12:58:

Так что ты надеешься услышать? Без условия очевидно не обойтись.
Ну хочешь - нагенерь мини-текстур в один цвет, засунь их на место диффузок, сравни как быстрее. Проиндексируй эти цвета, чёб не дублировать эти 16-пиксельные текстуры с одинаковым цветом.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ncuxonaT 23-04-2020 в 13:15:

Дядя Миша надеялся услышать что-то типа "эээ, не делай через условия, это убьет перформанс, делай через минитекстуры, это будет быстро и универсально". Ну или наоборот


Отправлено Ku2zoff 23-04-2020 в 13:52:

Цитата:
Дядя Миша писал:
Если декаль нанести на край стены, то она будет висеть в воздухе.

Ну это можно каким-нибудь образом поправить. Например, не накладывать декаль на край, а сдвигать её подальше, чтобы она полностью была на стене. Не очень изящно, зато не будет резать глаза. Кстати, вчера научил декали ходить через чейнджлевел. Сейв/рестор им я давно уже сделал, писал выше. В общем, осталось красиво причесать код, и он будет вполне юзабелен.
Не будет лениво - сделаю апдейт для самого Инвазиона, с фиксом декалей и мп3 плеера. Надо хоть когда-нибудь выложить свою работу на моддб. Заодно будет масштабная тестовая площадка. Инвазион - немаленький мод.


Отправлено Дядя Миша 23-04-2020 в 14:57:

Цитата:
ncuxonaT писал:
надеялся услышать что-то типа

мини-текстурки тормозить точно не будут. А убьют ли условия перфоманс зависит от поколения железа. Да и условия-то разные бывают. Я код не видел, почём я знаю.

Цитата:
Ku2zoff писал:
Ну это можно каким-нибудь образом поправить

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 26-04-2020 в 16:32:

Есть ли способ определить на сервере, стоит игра на паузе или нет? На клиенте есть ref_params_s->paused. На сервере в глобалсах ничего подобного нет. Пока что мне не пришло в голову ничего умнее, чем нагородить дурацкий огород:

C++ Source Code:
1
DLL_GLOBAL ULONG		g_ulPostFrameCount;
2
 
3
void PlayerPreThink( edict_t *pEntity )
4
{
5
  entvars_t *pev = &pEntity->v;
6
  CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEntity);
7
 
8
  if (pPlayer)
9
    pPlayer->PreThink( );
10
 
11
  if (g_ulPostFrameCount > g_ulFrameCount) // StartFrame не вызывается, g_ulFrameCount не растёт, игра на паузе
12
    ALERT(at_console, "Paused\n");
13
}
14
 
15
void PlayerPostThink( edict_t *pEntity )
16
{
17
  entvars_t *pev = &pEntity->v;
18
  CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEntity);
19
 
20
  if (pPlayer)
21
    pPlayer->PostThink( );
22
 
23
  g_ulPostFrameCount++;
24
}
25
 
26
void StartFrame( void )
27
{
28
  if ( g_pGameRules )
29
    g_pGameRules->Think();
30
 
31
  if ( g_fGameOver )
32
    return;
33
 
34
  gpGlobals->teamplay = teamplay.value;
35
  g_ulFrameCount++;
36
 
37
  g_ulPostFrameCount = g_ulFrameCount;
38
}


Добавлено 26-04-2020 в 23:32:

Вот, немного дописал. Пауза детектится через две секунды, чтобы не было случайных срабатываний из-за рассинхрона. Учитывает игровой фпс, кстати.
C++ Source Code:
float flSecond = 0.96 / gpGlobals->frametime;
 
if (g_ulPostFrameCount > g_ulFrameCount + int(flSecond * 2.0))
  ALERT(at_console, "Paused\n");


Отправлено Дядя Миша 26-04-2020 в 18:13:

gpGlobals->frametime == 0.0

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 26-04-2020 в 18:16:

Дядя Миша неа. Не работает, я пробовал. Даже на паузе фреймтайм равен 0.016xxxx при 60 фпс. Может быть это потому что стим версия?


Отправлено Дядя Миша 26-04-2020 в 18:37:

А не, в халфе на сервере фреймтайм по идее будет всегда валидным.
Ну тогда чуть сложнее

C++ Source Code:
1
static float oldtime;
2
if( gpGlobals->time == oldtime )
3
{
4
  // paused
5
}
6
oldtime = gpGlobals->time;


Добавлено 26-04-2020 в 21:37:

Проверять в CmdStart

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 26-04-2020 в 18:37:

Спасибо за подсказку. Теперь серверный фмод в инвазионе имеет паузу:

C++ Source Code:
1
#include "music.h"
2
 
3
float oldtime;
4
 
5
void PlayerPostThink( edict_t *pEntity )
6
{
7
  entvars_t *pev = &pEntity->v;
8
  CBasePlayer *pPlayer = (CBasePlayer *)GET_PRIVATE(pEntity);
9
 
10
  if (pPlayer)
11
    pPlayer->PostThink( );
12
 
13
  g_MusicPlayer.SetVolume();
14
 
15
  if (gpGlobals->time == oldtime)
16
    g_MusicPlayer.Pause(TRUE);
17
 
18
  oldtime = gpGlobals->time;
19
}
20
 
21
void StartFrame( void )
22
{
23
  if ( g_pGameRules )
24
    g_pGameRules->Think();
25
 
26
  if ( g_fGameOver )
27
    return;
28
 
29
  gpGlobals->teamplay = CVAR_GET_FLOAT("teamplay");
30
  g_iSkillLevel = CVAR_GET_FLOAT("skill");
31
  g_ulFrameCount++;
32
 
33
  if (gpGlobals->time != oldtime)
34
    g_MusicPlayer.Pause(FALSE);
35
}

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


Отправлено Дядя Миша 26-04-2020 в 20:34:

Ku2zoff эх, ты бы лутьше декалям клиппинг сделал

__________________
My Projects: download page

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

Цитата:

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


Отправлено Ku2zoff 27-04-2020 в 06:54:

Дядя Миша ну дык собираюсь. Уже неплохо оптимизировал саму структуру spritedecal_s, чтобы как можно меньше параметров писать в клиентский сейв, вынул функции работы с декалями из gHUD.m_Particules в отдельный класс CDecalManager, избавился от нагромождения iIndex, iIndexNew, oldindex и кучи лишних циклов, перебирающих несколько раз декали по этим индексам... По сути, уже всё довольно неплохо: сохраняются, загружаются, переходят через уровни. Осталось сделать статик-декали, которые накладывает маппер. Ну и обрезку на краях брашей.

Добавлено 27-04-2020 в 13:54:

Правда, насчёт статик-декалей не всё так однозначно. Для них надо ещё как-то нарисовать спрайты.


Отправлено Дядя Миша 27-04-2020 в 08:51:

Кстати говоря, то что фмод делает паузу с лагом в полсекунды, обусловлено размером его выходного буффера, хотя это и не совсем корректно.
Ну вообщем посмотри, там где-то этот буффер будет задан как 500-600 милисекунд. Меньше ста ставить не рекомендую.

__________________
My Projects: download page

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

Цитата:

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


Временная зона GMT. Текущее время 01:14. Страницы (264): « Первая ... « 146 147 148 149 [150] 151 152 153 154 » ... Последняя »
Показать все 3960 сообщений этой темы на одной странице

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