ENTITY:TestCollision

  table ENTITY:TestCollision( Vector startpos, Vector delta, boolean isbox, Vector extents, number mask )

Açıklama

Bir izleme (trace) objeye çarptığında izleme sonucunu geçersiz kılmanıza olanak tanır.

Bu kancanın (hook) çalışması için objenizin Entity:EnableCustomCollisions özelliğinin etkinleştirilmiş olması gerekir.

Objenizin aynı zamanda bir izleme ile "vurulabilir" olması gerekir, bu nedenle (örneğin) SOLID_OBB veya SOLID_VPHYSICS olarak ayarlanmış olmalı ve çarpışma sınırları buna göre ayarlanmalıdır.

Bu kanca (hook) yalnızca anim türü için çağrılır.

Argümanlar

1 Vector startpos
İzlemenin başlangıç konumu.
2 Vector delta
startpos'tan izlemenin bitiş konumuna olan uzaklık (offset).
3 boolean isbox
İzleme bir hull izlemesi (hull trace) mi?
4 Vector extents
Hull izlemesinin boyutu. Sınırlayıcı Kutunun (Bounding Box) merkezi 0, 0, 0 olup, minimumlar -extents ve maksimumlar extents olur.
5 number mask
CONTENTS enum maskesi.

Döndürülenler

1 table
Bir table döndürmek, izleme sonuçlarını geçersiz kılmanıza olanak tanır. Tablo aşağıdaki anahtarları içermelidir: (Tüm anahtarlar orijinal izleme değerine geri döner)
  • Vector HitPos - İzlemenin yeni vuruş konumu.
  • number Fraction - 0 ile 1 arasında, izlemenin başlangıç noktasından ne kadar ilerlediğini açıklayan bir sayı. 1 = vurmadı.
    • Şu şekilde hesaplanabilir: Fraction = ( startpos + delta ):Length() / myCustomHitPos:Length()
  • Vector Normal - Vurulan yüzeye dik yönü tanımlayan bir birim vektör (uzunluk=1).

true döndürmek, SOLID_VPHYSICS ve SOLID_OBB objeleri için "normal" çarpışmaların gerçekleşmesine izin verir.
nothing (hiçbir şey) veya false döndürmek, izlemenin objeyi tamamen görmezden gelmesini sağlar.

Örnek

lua/entities/widget_base.lua dosyasından alınmış örnek

function ENT:TestCollision( startpos, delta, isbox, extents ) if ( isbox ) then return end if ( !widgets.Tracing ) then return end -- TODO. Küpümüze karşı gerçekten izleme yap! return { HitPos = self:GetPos(), Fraction = 0.5 * self:GetPriority() } end

Örnek

Oyuncuların objenin içinden ateş etmelerine izin verir, ancak yine de üzerinde durmalarına ve Fizik Silahı'nı (Physics Gun) üzerinde kullanmalarına vb. olanak tanır.

local sent_contents = CONTENTS_GRATE function ENT:TestCollision( startpos, delta, isbox, extents, mask ) if bit.band( mask, sent_contents ) ~= 0 then return true end end

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