Проверить сопрекосновение 2 разных обектов.
|
|
He_npeT | Дата: Четверг, 05.07.2007, 16:55:41 | Сообщение # 1 |
![He_npeT](/avatar/00/00/099960.jpg) Генерал-майор
Группа: Скриптеры
Сообщений: 292
Статус: Не в сети
| Помогите пожалуйсто улучшить слейдующий код, чтобы он правильно действовал с малоугольными/многоугольными обектами тоже, а не воспринивал всё как куб... То-есть |\ | \ |_\ или __ | \ | .| |_/ для него будет __ | | | | |_| А надо чтобы он фигуры воспринимал такой формы как они и есть. Code stock _check_collision ( entity1, entity2 ) { // supplied with invalid entities if( !pev_valid(entity1) || !pev_valid(entity2) ) return 0;
// retrieve absolutes static Float:absmin1[3], Float:absmax1[3], Float:absmin2[3], Float:absmax2[3];
pev(entity1, pev_absmin, absmin1); pev(entity1, pev_absmax, absmax1); pev(entity2, pev_absmin, absmin2); pev(entity2, pev_absmax, absmax2);
// not in bounds if( absmin1[0] > absmax2[0] || absmin1[1] > absmax2[1] || absmin1[2] > absmax2[2] || absmax1[0] < absmin2[0] || absmax1[1] < absmin2[1] || absmax1[2] < absmin2[2] ) return 0;
return 1; }
My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
Сообщение отредактировал He_npeT - Четверг, 05.07.2007, 17:04:21 |
|
| |
AlMod | Дата: Четверг, 05.07.2007, 17:51:27 | Сообщение # 2 |
Сонный кодер
Группа: Админы
Сообщений: 600
Статус: Не в сети
| эээээ... А не проще юзать pfn_toucn или что-то подобное?
|
|
| |
He_npeT | Дата: Четверг, 05.07.2007, 22:30:58 | Сообщение # 3 |
![He_npeT](/avatar/00/00/099960.jpg) Генерал-майор
Группа: Скриптеры
Сообщений: 292
Статус: Не в сети
| Ну, беда в том, то что... Буду говорить досконально в общем. Так как в моём случее hlds'a engine не понимает то что игрок прикосается tigger_teleport, я пользуюсь <engine> fake_touch(ent1, ent2);, а для этого надо вычеслить сопрекосаемость обектов не пользуясь данными из hlds'a engine'a. К стати, что делает этот pfn_toucn и в каком include нахлдится? :Р
My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
|
|
| |
AlMod | Дата: Пятница, 06.07.2007, 07:07:12 | Сообщение # 4 |
Сонный кодер
Группа: Админы
Сообщений: 600
Статус: Не в сети
| pfn_touch(ptr,ptd) [engine required] Форвард, который вызывается когда соприкасаются 2 энтити в твоем случае будет так: Code public pfn_touch(ptr,ptd) { new ClassName[32] if ((ptr > 0) && is_valid_ent(ptr)) { entity_get_string(ptr, EV_SZ_classname, ClassName, 31) } new ClassName2[32] if ((ptd > 0) && is_valid_ent(ptd)) { entity_get_string(ptd, EV_SZ_classname, ClassName2, 31) }
if (equal(ClassName2, "player")) { if (equal(ClassName, "trigger_teleport")) { // Делаем че нибудь, после касания игрока телепортом } } } Ну вот както так ![smile](http://src.ucoz.ru/sm/2/smile.gif)
|
|
| |
He_npeT | Дата: Пятница, 06.07.2007, 11:09:52 | Сообщение # 5 |
![He_npeT](/avatar/00/00/099960.jpg) Генерал-майор
Группа: Скриптеры
Сообщений: 292
Статус: Не в сети
| Проверил - не действует... Может есть какиенибудь другие способы, или в коде проблема..? Вписал туда я токо - client_print(0, print_chat, "Test"); и оно не высвечивалось. :Р
My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
Сообщение отредактировал He_npeT - Пятница, 06.07.2007, 23:14:45 |
|
| |
AlMod | Дата: Пятница, 06.07.2007, 16:05:30 | Сообщение # 6 |
Сонный кодер
Группа: Админы
Сообщений: 600
Статус: Не в сети
| c другими энтитями пробовал? Попробуй оба player написать
|
|
| |
He_npeT | Дата: Пятница, 06.07.2007, 22:56:16 | Сообщение # 7 |
![He_npeT](/avatar/00/00/099960.jpg) Генерал-майор
Группа: Скриптеры
Сообщений: 292
Статус: Не в сети
| Попробывал trigger_teleport изменить на func_door - тогда при прикосновение действовало. Наварное нефиксирует к телепорту если SOLIND_NOT из-за того что он в нём, а не прикосается к нему, или амхх его фиксирует после сомого телепорта... Ещё какиенибудь варианты есть? :Р
My CS 1.6 Non-Steam AmXX Server! (HLSW) Play with steam - get autorslot
Сообщение отредактировал He_npeT - Пятница, 06.07.2007, 23:09:31 |
|
| |
AlMod | Дата: Суббота, 07.07.2007, 07:58:07 | Сообщение # 8 |
Сонный кодер
Группа: Админы
Сообщений: 600
Статус: Не в сети
| Хм. Есть еще идея по поводу. Триггер_телепорт не что иное как параллелепипед определённой ширины-высоты-длины, если мы знаем ид энтити триггера, то можем узнать границы этого браша, если возьмем координаты по главной диагонали. Подумай вообщем по поводу координат, может получится
|
|
| |