ents.FindInCone

  table ents.FindInCone( Vector origin, Vector normal, number range, number angle_cos )

Açıklama

Belirtilen konunun içindeki tüm varlıkları bulur ve gönderir.Entity:WorldSpaceCenterKonus içinde olduğu düşünülür.

"Konu" aslında bir eksel uyumlu bir kutu'nun konik bir "slicesi"dir (bak: ents.FindInBox). Sağdaki görüntü yaklaşık olarak bu function would'ın 2 boyutlu görünümünü gösterir. Bu nedenle, varlık belirtilen aralıktan daha uzakta olabilir!

Argümanlar

- 1 Vektör köken
Konunun ucunda.
- 2 Vektör Normal
Konunun yönü.
3 İhtiyacımız var. Numarası aralığı
Konunun/kutunun kaynağın etrafındaki aralığı.
function internally kullanmadan önce bu argümana 1 ekler.
Dört Numarası angle_cos
- Evet .KosinusKonunun merkezi ile kenarları arasındaki açının, yani konunun toplam açısının yarısı.

1 bir 0° konus yapar, 0.707 yaklaşık 90° yapar, 0 180° yapar ve vb.

Geri dönüşler

1 .sıralı masa<Entity>
Bulduğumuz her şeyin bir tablosu.EntityS.

Örnek

Bu function works nasıl olduğunu gösterir.

local size = 128 local fov = 15 local segments = 32 local mat = Material("models/shiny") mat:SetFloat("$alpha", 0.25) hook.Add("PostDrawOpaqueRenderables", "ents.FindInCone demo", function() local ply = LocalPlayer() if IsValid(ply) == false then return end local startPos = ply:EyePos() local dir = ply:GetAimVector() dir:Normalize() local angleCos = math.cos(math.rad(fov)) local radius = math.tan(math.acos(angleCos)) * size local endPos = startPos + dir * size render.SetMaterial(mat) render.DrawSphere(startPos, size, 24, 16, color_white, true) local mins = Vector(-size, -size, -size) local maxs = Vector(size, size, size) render.DrawWireframeBox(startPos, angle_zero, mins, maxs, color_white, true) render.DrawBox(startPos, angle_zero, -mins, -maxs, color_white) local up = Vector(0, 0, 1) if math.abs(dir:Dot(up)) > 0.99 then up = Vector(1, 0, 0) end local right = dir:Cross(up) right:Normalize() up = right:Cross(dir) up:Normalize() render.SetColorMaterial() for i = 0, segments - 1 do local a1 = (i / segments) * math.pi * 2 local a2 = ((i + 1) / segments) * math.pi * 2 local p1 = endPos + (right * math.cos(a1) + up * math.sin(a1)) * radius local p2 = endPos + (right * math.cos(a2) + up * math.sin(a2)) * radius render.DrawBeam(p1, p2, 2, 0, 1, Color(17, 163, 204, 50)) render.DrawBeam(startPos, p1, 2, 0, 1, Color(0, 124, 158, 50)) end render.DrawLine(startPos, endPos, Color(0, 255, 0), true) for _, ent in ipairs(ents.FindInCone(startPos, dir, size, angleCos)) do render.DrawLine( startPos, ent:WorldSpaceCenter(), Color(255, 0, 0), true ) end end)
Çıkış:

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord