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:
2 | int contents = gEngfuncs.PM_PointContents( pmtrace.endpos, NULL ); |
3 | if (contents == CONTENTS_WATER) |
5 | int waterEntity = gEngfuncs.PM_WaterEntity( pmtrace.endpos ); |
8 | cl_entity_t *pwater = gEngfuncs.GetEntityByIndex( waterEntity ); |
9 | if ( pwater && ( pwater->model != NULL ) ) |
11 | deathHeight = pwater->curstate.maxs[2]; |
15 | gEngfuncs.Con_Printf("Rain error: can't get water entity\n"); |
21 | gEngfuncs.Con_Printf("Rain error: water is not func_water entity\n"); |
27 | deathHeight = pmtrace.endpos[2]; |
- это вааще здесь?
Отправлено Дядя Миша 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) |
3 | if (fxcounter >= MAXFX) |
5 | gEngfuncs.Con_Printf( "Rain error: FX limit overflow!\n" ); |
8 | cl_rainfx *newFX = g_fxArray.Allocate(); |
11 | gEngfuncs.Con_Printf( "Rain error: failed to allocate FX object!\n"); |
14 | newFX->alpha = gEngfuncs.pfnRandomFloat(0.6, 0.9); |
15 | VectorCopy(drip->origin, newFX->origin); |
16 | newFX->origin[2] = drip->minHeight; // correct position |
18 | newFX->birthTime = gEngfuncs.GetClientTime(); |
19 | newFX->life = gEngfuncs.pfnRandomFloat(0.7, 1); |
Вот это - C++ Source Code:
gEngfuncs.Con_Printf( "Rain error: FX limit overflow!\n" ); |
- понятно, проверка на превышение лимита эффектов.
C++ Source Code:
1 | cl_rainfx *newFX = g_fxArray.Allocate(); |
4 | gEngfuncs.Con_Printf( "Rain error: failed to allocate FX object!\n"); |
- Эт я понял - выделение памяти под ФиКс и проверка.
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); |
_ Это я тоже понял.
Но мне нужен сам по себе 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 работает для не игроков?