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=3446)
Отправлено ONeiLL 29-05-2012 в 16:49:
Помогите немного( а может и много )
Я вот сегодня утром быстренько наклепал код
C++ Source Code:
1 | void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd ) |
3 | if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER ) |
4 | || POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) |
7 | // Ищем растояние между vecSrc и vecEnd |
8 | float x = vecEnd.x - vecSrc.x; |
9 | float y = vecEnd.y - vecSrc.y; |
10 | float z = vecEnd.z - vecSrc.z; |
11 | float len = sqrt( x * x + y * y + z * z ); |
14 | Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 ); |
18 | UTIL_Ricochet( vecTemp, 1 ); // Только не смейтесь =) |
19 | // За место этого надо рисовать брызги |
23 | if( POINT_CONTENTS( vecTemp ) == POINT_CONTENTS( vecEnd ) ) |
24 | FireBulletsWater( vecSrc, vecTemp ); |
26 | FireBulletsWater( vecTemp, vecEnd ); |
Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды (находит правильно, и даёт ошибку не больше чем на 0.5 юнита). Но у меня всегда были проблемы с эффектами, и я не могу до конца доделать 
Подскажите, как лутше всё организовать, как отрисовать эти самые брызги и т.д. Можно всё расказать на словах, не обязательно на коде
Отправлено XaeroX 29-05-2012 в 16:54:
TE_STREAKSPLASH
Отправлено ONeiLL 29-05-2012 в 17:25:
// coord coord coord (start position)
// coord coord coord (direction vector)
// byte (color)
// short (count)
// short (base speed)
// short (ramdon velocity)
Смущают две последние строчки, как это:
базовая скорость и рандомная скорость ????
Добавлено 29-05-2012 в 20:25:
C++ Source Code:
1 | void UTIL_Splash( const Vector &position, const Vector &direction, short count, short speed, short randspeed ) |
3 | MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, position ); |
5 | WRITE_BYTE( TE_STREAK_SPLASH ); |
7 | WRITE_COORD( position.x ); |
8 | WRITE_COORD( position.y ); |
9 | WRITE_COORD( position.z ); |
11 | WRITE_COORD( direction.x ); |
12 | WRITE_COORD( direction.y ); |
13 | WRITE_COORD( direction.z ); |
22 | WRITE_SHORT( randspeed ); |
Но при вызове эта шняга кидает такое:
BAD: 73:svc_bad
Host_Error: CL_ParseServerMessage: Illegible server message - svc_ba
Отправлено Дядя Миша 29-05-2012 в 17:53:
Цитата:
ONeiLL писал:
Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды
не BSP. Просто бинарным 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 29-05-2012 в 17:55:
А какая разница?
Отправлено XaeroX 29-05-2012 в 17:57:
Цитата:
ONeiLL писал:
// byte (color)
Написано же - цвет это ОДИН байт. Зачем ты целых три шлёшь?
В данном случае это индекс из палитры. Индекс синего не помню, но он там точно есть, я юзал когда-то.
Отправлено ONeiLL 29-05-2012 в 18:38:
Эх, криво получается, я наверно лутше напишу сам этот эффект, опираясь на тутор от кутузова
Добавлено 29-05-2012 в 21:38:
З.Ы спасибо Хавку, что напомнил мне про это =)
Отправлено ONeiLL 30-05-2012 в 07:12:
Ладно, вроде получилась, у кого есть подходящие спрайты?
Отправлено Lev 30-05-2012 в 09:36:
Может в хл2 есть
Отправлено ONeiLL 30-05-2012 в 09:51:
Я искал, нашол, но мне нужен анимированый, а с такими вещами как фотошоп и т.д я не дружу 
Отправлено Lev 30-05-2012 в 09:52:
А ты на обычном хл сдк делаешь или на спирите?
Отправлено ONeiLL 30-05-2012 в 09:55:
Обычный
Отправлено Lev 30-05-2012 в 10:02:
А с фанк ватер твой способ определения работает?
Отправлено ONeiLL 30-05-2012 в 10:06:
да
Добавлено 30-05-2012 в 13:06:
Только лутше зделать по другому, вот так:
C++ Source Code:
1 | void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd ) |
3 | if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER ) |
4 | || ( POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) ) |
7 | // Ищем растояние между vecSrc и vecEnd |
8 | float x = vecEnd.x - vecSrc.x; |
9 | float y = vecEnd.y - vecSrc.y; |
10 | float z = vecEnd.z - vecSrc.z; |
11 | float len = sqrt( x * x + y * y + z * z ); |
14 | Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 ); |
22 | if( POINT_CONTENTS( vecTemp ) != POINT_CONTENTS( vecSrc ) ) |
23 | FireBulletsWater( vecSrc, vecTemp ); |
25 | FireBulletsWater( vecTemp, vecEnd ); |
Отправлено Lev 30-05-2012 в 10:22:
У меня есть один убогий спрайт - вот