HLFX.Ru Forum Страницы (4): « 1 [2] 3 4 »
Показать все 46 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Брызги воды как в Соусе (https://hlfx.ru/forum/showthread.php?threadid=1968)


Отправлено Ku2zoff 29-09-2009 в 05:40:

MadKing посмотри исходники дождя by BUzer. Там коментарии на русском. Дождь рисуется с помощью ТРИАпи, там есть круги на воде, посмотри как они сделаны, сделай свои, а потом присобачь к ним R_TempSprite, который будет всплеском.

Добавлено 29-09-2009 в 12:40:

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


Отправлено Дядя Миша 29-09-2009 в 06:59:

Цитата:
Пытаюсь в сабачить их юз в CBasePlayer::WaterMove

pev->origin видимо

__________________
My Projects: download page

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

Цитата:

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


Отправлено MadKing 29-09-2009 в 15:09:

Ku2zoff Дядя Миша подумаю - ща сделаю....
Ku2zoff , Это они где? В исходниках Paranoia? Да?

Добавлено 29-09-2009 в 19:09:

Немножко не понял, кто из них (файл rain.cpp) отвечает за реализацию кругов на воде....

C++ Source Code:
1
// falling to water?
2
int contents = gEngfuncs.PM_PointContents( pmtrace.endpos, NULL );
3
if (contents == CONTENTS_WATER)
4
{
5
  int waterEntity = gEngfuncs.PM_WaterEntity( pmtrace.endpos );
6
  if ( waterEntity > 0 )
7
  {
8
    cl_entity_t *pwater = gEngfuncs.GetEntityByIndex( waterEntity );
9
    if ( pwater && ( pwater->model != NULL ) )
10
    {
11
      deathHeight = pwater->curstate.maxs[2];
12
    }
13
    else
14
    {
15
      gEngfuncs.Con_Printf("Rain error: can't get water entity\n");
16
      continue;
17
    }
18
  }
19
  else
20
  {
21
    gEngfuncs.Con_Printf("Rain error: water is not func_water entity\n");
22
    continue;
23
  }
24
}
25
else
26
{
27
  deathHeight = pmtrace.endpos[2];
28
}
- это вааще здесь?


Отправлено Дядя Миша 29-09-2009 в 18:00:

MadKing зачем писать что ты опытный кодер, если не понимаешь элементарных вещей?

__________________
My Projects: download page

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

Цитата:

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


Отправлено MadKing 30-09-2009 в 01:32:

Дядя Миша я уже говорил, что ТриАПИ я раньше не занимался.
Оружие, монстры, impulse коды - это да, на это у меня опыт есть, а вот на модинг движка - только чайник я..
Ты мне скажи это здесь или не здесь?

Добавлено 30-09-2009 в 05:16:

Не, я просто хочу понять....

C++ Source Code:
1
void WaterLandingEffect(cl_drip *drip)
2
{
3
  if (fxcounter >= MAXFX)
4
  {
5
    gEngfuncs.Con_Printf( "Rain error: FX limit overflow!\n" );
6
    return;
7
  }
8
  cl_rainfx *newFX = g_fxArray.Allocate();
9
  if (!newFX)
10
  {
11
    gEngfuncs.Con_Printf( "Rain error: failed to allocate FX object!\n");
12
    return;
13
  }
14
  newFX->alpha = gEngfuncs.pfnRandomFloat(0.6, 0.9);
15
  VectorCopy(drip->origin, newFX->origin);
16
  newFX->origin[2] = drip->minHeight; // correct position
17
 
18
  newFX->birthTime = gEngfuncs.GetClientTime();
19
  newFX->life = gEngfuncs.pfnRandomFloat(0.7, 1);
20
  fxcounter++;
21
}

Вот это -
C++ Source Code:
if (fxcounter >= MAXFX)
{
  gEngfuncs.Con_Printf( "Rain error: FX limit overflow!\n" );
  return;
}
- понятно, проверка на превышение лимита эффектов.
C++ Source Code:
1
cl_rainfx *newFX = g_fxArray.Allocate();
2
if (!newFX)
3
{
4
  gEngfuncs.Con_Printf( "Rain error: failed to allocate FX object!\n");
5
  return;
6
}
- Эт я понял - выделение памяти под ФиКс и проверка.

C++ Source Code:
newFX->alpha = gEngfuncs.pfnRandomFloat(0.6, 0.9);
- прозрачность
C++ Source Code:
VectorCopy(drip->origin, newFX->origin);
newFX->origin[2] = drip->minHeight; // correct position
- определяем координаты, скопировав векторы.
C++ Source Code:
newFX->birthTime = gEngfuncs.GetClientTime();
newFX->life = gEngfuncs.pfnRandomFloat(0.7, 1);
fxcounter++;

_ Это я тоже понял.
Но мне нужен сам по себе newFX, наверное.
Поищу ещё в tri.cpp...

Добавлено 30-09-2009 в 05:22:

О! Функцию нашёл.
DrawFXObjects
Осталось добавить всё сопутствующее этой функции и куда нить присобачить.

Добавлено 30-09-2009 в 05:28:

Надоже, скомпилил!!!!
Осталось гденить это юзнуть ну а потом и дополнить эффектом брызг

Добавлено 30-09-2009 в 05:32:

Ан нет, главную то функцию забыл. 14 штук.


Отправлено SiPlus 30-09-2009 в 04:19:

Брызги можно и маппингом сделать, поставить над водой кучу триггеров (чтобы брызги были не в одном месте, а по всей воде), прикосновение к одному из них приводит к появлению 2-х спрайтов, один - круг, другой - всплеск.

А FX означает effects.


Отправлено MadKing 30-09-2009 в 08:34:

SiPlus , лучше кодом сделать тоже самое.

Добавлено 30-09-2009 в 12:34:

Всё скомпили, всё без ошибок, но, опять же, ни где не мелькают нужные функции. Куда надо вставить функции?


Отправлено MadKing 01-10-2009 в 01:38:

ЗЫ:Может Бузер не будет против и я просто перейду на паранойу???


Отправлено Ku2zoff 01-10-2009 в 02:46:

Цитата:
SiPlus писал:
Брызги можно и маппингом сделать, поставить над водой кучу триггеров (чтобы брызги были не в одном месте, а по всей воде), прикосновение к одному из них приводит к появлению 2-х спрайтов, один - круг, другой - всплеск.

Ндасс... А не проще ли заюзать спирит, там на карте locusdemo есть пример эффекта лучей света, проникающих через "дырки" в стене. Просто вместо лучей сделать всплески и звук добавить. Локус это конечно очень замудренная и непонятная система, но позволяет делать хорошие эффекты, без приложения больших усилий.


Отправлено MadKing 01-10-2009 в 04:43:

Цитата:
Ku2zoff писал:
А не проще ли заюзать спирит

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


Отправлено Дядя Миша 01-10-2009 в 18:40:

Бузер против не будет я думаю. Остальные вообще никакого разрешения не спрашивали.

__________________
My Projects: download page

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

Цитата:

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


Отправлено MadKing 03-10-2009 в 03:45:

Хорошо, попробую, перейду...
Тока у меня вроде с первого же раза, как я его скачал, потекли какие то ошибки. Не знаю, может я и со спиритом спутал...
Ну вообщем Try'ну.


Отправлено PomanoB 08-02-2011 в 19:10:

Извиняюсь за подъём темы, но у меня похожий вопрос.

Как определить момент, когда любая энтити ударяется о воду?
У воды SOLID_NOT стоит и Touch не срабатывает(

Единственно что приходит мне в голову - в StartFrame перебирать все энтити и проверять вода или нет, но это как-то фигово(

Может можно как-то похимичить с solid'ами ?


Отправлено fire64 08-02-2011 в 19:28:

PomanoB, а если каждый кадр проверять pev->waterlevel ?

Или же через

UTIL_PointContents( Vector origin ) == CONTENTS_WATER

Правда если объект не точечный, то лучше использовать UTIL_WaterLevel

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено PomanoB 08-02-2011 в 20:03:

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

И разве pev->waterlevel работает для не игроков?


Временная зона GMT. Текущее время 12:16. Страницы (4): « 1 [2] 3 4 »
Показать все 46 сообщений этой темы на одной странице

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