Я хочу сделать брызги при падении любого объекта в воду)
И think-то вызывается не каждый кадр а после pev->nextthink
[qoute]Как вариант можешь использовать для проверки столкновений не внешние энтити, а саму воду.[/quote]
Это как ?
В think'е воды искать ентити в радиусе?
function Water:Touch(ent) --прикосновение, ent - прикоснувшаяся энтитя
local Splash = ents.Create("env_sprite") --создает всплеск
Splash:SetKeyValue("sprite","спрайт всплеска") --задает параметр энтити, точно не знаю, как называется параметр, отвечающий за файл спрайта
Splash:SetPos(Vector(ent:GetPos().x,ent:GetPos().y,self:GetPos().z + self:Height())) --устанавливает местоположение спрайта, X и Y это позиция прикоснувшейся энтити, Z это местоположение воды + ее уровень
Splash:Spawn() --создает всплеск
Splash:Activate() --активирует его
timer.Simple(0.5,function() Splash:Remove() end) --удаляет всплеск через 0.5с
end
PomanoB писал: Единственно что приходит мне в голову - в StartFrame перебирать все энтити и проверять вода или нет, но это как-то фигово(
на уровне движка есть areanodes - бинарное дерево, в котором находятся все физобъекты и при помощи которого можно быстро найти энтитю в заданной точке. Проблема лишь в том, что в игровой дллке этого метода нету, поэтому остается ровно один способ - перебор энтить.
И ничего фигового тут нету. Сервер каждый кадр по нескольку раз перебирает физ. энтити и никого это не колышет.
Причем перебрать достаточно всего один раз - далее-то у нас уже есть энтить, сквозь которую прошла трасса.
Можно и по другому сделать: сделать трейс, проверить контентс на конце, разделить длинну трассы пополам, проверить контентс на середине, потом еще раз пополам. Но лучше всего этим заниматься на клиенте, поскольку там есть GetWaterEntity.
Добавлено 09-02-2011 в 14:29:
SiPlus ты читаешь вообще что пишут? Вода несолидная, трасса проходит сквозь нее не задевая. Причем тут WaterTouch ?
Дядя Миша, ну если SOLID_NONE и карта своя, то можно попробовать какой-нибудь trigger_water создать, который делает всплески, и разместить его по всей поверхности воды. Там, где в воду ничего не падает, можно этот триггер и не делать.
SiPlus писал: К триггеру можно прикоснуться, зачем трасса, местоположение всплеска можно узнать по местоположению вещи, которая в него вошла.
вещь, которая "входит" в триггер - это пуля. Стрельба пулями традиционно сделана трейслайном, который проходит сквозь триггеры не задевая их. Или тебе нравится блистать идиотизмом?