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=3446)


Отправлено ONeiLL 29-05-2012 в 16:49:

Помогите немного( а может и много )

Я вот сегодня утром быстренько наклепал код

C++ Source Code:
1
void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd )
2
{
3
  if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER )
4
    || POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER )
5
  return;
6
 
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 );
12
 
13
  // Делим по полам
14
  Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 );
15
 
16
  if( len <= 1 )
17
  {
18
    UTIL_Ricochet( vecTemp, 1 );	// Только не смейтесь =)
19
    // За место этого надо рисовать брызги
20
  }
21
  else
22
  {
23
    if( POINT_CONTENTS( vecTemp ) == POINT_CONTENTS( vecEnd ) )
24
      FireBulletsWater( vecSrc, vecTemp );
25
    else
26
      FireBulletsWater( vecTemp, vecEnd );
27
  }
28
}


Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды (находит правильно, и даёт ошибку не больше чем на 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 )
2
{
3
  MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, position );
4
 
5
  WRITE_BYTE( TE_STREAK_SPLASH );
6
 
7
  WRITE_COORD( position.x );
8
  WRITE_COORD( position.y );
9
  WRITE_COORD( position.z );
10
 
11
  WRITE_COORD( direction.x );
12
  WRITE_COORD( direction.y );
13
  WRITE_COORD( direction.z );
14
 
15
  WRITE_BYTE( 0 );
16
  WRITE_BYTE( 0 );
17
  WRITE_BYTE( 100 );
18
 
19
  WRITE_SHORT( count );
20
 
21
  WRITE_SHORT( speed );
22
  WRITE_SHORT( randspeed );
23
 
24
  MESSAGE_END();
25
}


Но при вызове эта шняга кидает такое:

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 )
2
{
3
  if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER )
4
    || ( POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) )
5
  return;
6
 
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 );
12
 
13
  // Делим по полам
14
  Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 );
15
 
16
  if( len <= 1 )
17
  {
18
    // Рисуем =)
19
  }
20
  else
21
  {
22
    if( POINT_CONTENTS( vecTemp ) != POINT_CONTENTS( vecSrc ) )
23
      FireBulletsWater( vecSrc, vecTemp );
24
    else
25
      FireBulletsWater( vecTemp, vecEnd );
26
  }
27
}


Отправлено Lev 30-05-2012 в 10:22:

У меня есть один убогий спрайт - вот


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

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