HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- (Help!) Сдвиг камеры при приземлении как в CS:GO (https://hlfx.ru/forum/showthread.php?threadid=5542)
Отправлено Aynekko 17-08-2020 в 13:48:
Вот я и задал "pparams->onground"
Добавлено 17-08-2020 в 16:48:
Хых, оказывается vieworg это для моделей пушек. Сейчас вот такое:
C++ Source Code:
1 | if( pparams->simvel[2] > 0 && !pparams->onground) |
3 | landtime = pparams->time; |
6 | if (pparams->onground && pparams->time > landtime ) |
9 | delta = pparams->time - landtime; |
10 | if ( delta < LAND_DEFLECT_TIME ) |
12 | f = delta / LAND_DEFLECT_TIME; |
13 | pparams->viewangles[2] += landChange * f; |
15 | else if ( delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME ) |
17 | delta -= LAND_DEFLECT_TIME; |
18 | f = 1.0 - ( delta / LAND_RETURN_TIME ); |
19 | pparams->viewangles[2] += landChange * f; |
Поставил viewangles[2]. Теперь при приземлении экран начинает меееедленно скашиваться влево. При прыжке восстанавливается резко в исходное положение, при приземлении снова начинается медленный скос. Кажется, еще чуть и я решу эту задачку
Почему-то, если ставить simorg вместо viewangles - тогда вообще ничего не происходит.
Отправлено Crystallize 17-08-2020 в 14:56:
Цитата:
Aynekko писал:
Хых, оказывается vieworg это для моделей пушек
vieworg это клиентская камера, она каждый кадр выравнивается по модельке игрока. Если я правильно помню, то клиентская пушка привязана не к камере, а к игроку. Ну в кваке так.
Отправлено Aynekko 17-08-2020 в 17:40:
Вот как. Блин. Когда стояло vieworg, пушка просто медленно уезжала вверх, в общем та же самая ситуация со скосом камеры вбок. Ничего не понимаю.
Добавлено 17-08-2020 в 20:37:
Оно заработало!
Только все равно есть баги, которые не могу понять, как отловить…помогите
Вот текущий рабочий код:
C++ Source Code:
1 | void V_LandDip( struct ref_params_s *pparams) |
3 | #define LAND_DEFLECT_TIME 0.6 //150 |
4 | #define LAND_RETURN_TIME 0.25 //300 |
10 | if( pparams->simvel[2] > 0 && !pparams->onground) |
12 | landtime = pparams->time; |
15 | if (pparams->onground && pparams->time > landtime ) |
18 | delta = pparams->time - landtime; |
19 | if ( delta < LAND_DEFLECT_TIME ) |
21 | f = delta / LAND_DEFLECT_TIME; |
22 | pparams->simorg[2] += landChange * f; |
24 | else if ( delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME ) |
26 | delta -= LAND_DEFLECT_TIME; |
27 | f = 1.0 - ( delta / LAND_RETURN_TIME ); |
28 | pparams->simorg[2] += landChange * f; |
Что имею на выходе. При прыжке и приземлении, камера едет вниз и обратно - все как надо!
Проблемы:
- если спрыгивать с уступа - сдвига камеры нет.
- если запрыгнуть на высокий ящик с помощью (ctrl+space), то при приземлении на ящик камера съезжает гораздо сильнее, как будто я упал с бОльшей высоты. То есть по идее все должно быть наоборот.
Что я упустил? Я уже так близок к успеху 
Добавлено 17-08-2020 в 20:40:
Если заметили, то Deflect и Return я задал совершенно другие значения. Если оставить 150 и 300, то камера будет ехать вниз минуты две и столько же обратно (да, я проверял…).
Где-то что-то не то. Предполагаю, что в simvel проблема где-то…может задал неправильно
Отправлено Дядя Миша 17-08-2020 в 18:26:
Цитата:
Aynekko писал:
А как определять, когда он в воздухе, а когда нет?
C++ Source Code:
if( pparams->onground == -1 ) |
Цитата:
Aynekko писал:
результата опять же нет
так результат откуда возьмется, если ты совершаешь хаотичные действия?
Добавлено 17-08-2020 в 21:24:
C++ Source Code:
1 | void V_LandDip( struct ref_params_s *pparams) |
3 | #define LAND_DEFLECT_TIME 0.6 //150 |
4 | #define LAND_RETURN_TIME 0.25 //300 |
10 | if( pparams->onground == -1 ) |
12 | landtime = pparams->time; |
17 | delta = pparams->time - landtime; |
18 | if ( delta < LAND_DEFLECT_TIME ) |
20 | f = delta / LAND_DEFLECT_TIME; |
21 | pparams->simorg[2] += landChange * f; |
23 | else if ( delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME ) |
25 | delta -= LAND_DEFLECT_TIME; |
26 | f = 1.0 - ( delta / LAND_RETURN_TIME ); |
27 | pparams->simorg[2] += landChange * f; |
Так попробуй, но я не проверял.
Добавлено 17-08-2020 в 21:26:
Цитата:
Aynekko писал:
Если заметили, то Deflect и Return я задал совершенно другие значения
в ку3 это милисекунды, в халфе - доли секунды. 150 это 0.15, 300 это 0.3__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 17-08-2020 в 18:52:
Цитата:
Дядя Миша писал:
так результат откуда возьмется, если ты совершаешь хаотичные действия?
Да, я в курсе.
Я просто констатировал факт моих экспериментов.
Цитата:
Дядя Миша писал:
Так попробуй, но я не проверял.
Спасибо большое за помощь. В принципе то же самое, что и результат в посте перед твоим, только
Цитата:
pparams->onground == -1
не работает, зато работает !pparams->onground. Но ведь это же одно и то же по сути… О.о
Осталась одна вещь. При падении даже с браша высотой один юнит, камера все равно проигрывается. Выше через пост я там поставил условие pparams->simvel[2] > 0, я там ставил еще > 50. Тогда камера дергается в полете.
Как бы так сделать, чтобы камера проигрывалась только тогда, когда скорость приземления превысила заданную. На сервере было простое условие pmove->flFallVelocity >= 50 или вроде того.
Отправлено Дядя Миша 17-08-2020 в 20:47:
Цитата:
Aynekko писал:
зато работает !pparams->onground
Код из Ксаша:
C++ Source Code:
fd->onground = (cl.local.onground != -1); |
Пля, я был уверен, что там именно номер энтити. Забыл уже.
Цитата:
Aynekko писал:
когда скорость приземления превысила заданную
simvel[2] < -XXX
попробуй там через gEngfuncs.Con_Printf посмотреть значения при падении с разной высоты. И подбери по вкусу.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 17-08-2020 в 21:03:
Дядя Миша спасибо! Но, в принципе, пошаманил с циферками и можно даже и без проверки по велосити обойтись, эффект совсем ненавязчивый получился, зато интерактивности добавил будь здоров (имхо конечно). Еще и на оружие сделал. Красота.
Кстати из ксго тоже попробовал код, т.к. теперь я уже разобрался более-менее с этими временными метками и по подобию сделать оказалось не трудно.