public void SphereCast(AGKVector3 rFrom, AGKVector3 rTo, float rRadius, bool rSlide) { Agk.SetVector3(FromVectorNumber, rFrom.X, rFrom.Y, rFrom.Z); Agk.SetVector3(ToVectorNumber, rTo.X, rTo.Y, rTo.Z); Agk.SphereCast3DPhysics(ResourceNumber, (int)FromVectorNumber, (int)ToVectorNumber, rRadius); HitObjectNumber = (uint)Agk.Get3DPhysicsRayCastObjectHit(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber)); if (HitObjectNumber > 0) { Agk.Get3DPhysicsRayCastContactPosition(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber), (int)HitVectorNumber); HitPosition.X = Agk.GetVector3X(HitVectorNumber); HitPosition.Y = Agk.GetVector3Y(HitVectorNumber); HitPosition.Z = Agk.GetVector3Z(HitVectorNumber); if (!rSlide) { return; } Agk.Get3DPhysicsRayCastNormalVector(ResourceNumber, (int)HitVectorNumber); if (Math.Abs(HitNormalVector.Y) > 0.999) { SlideVector = new AGKVector3(HitNormalVector.Y, 0.0f, 0.0f); } else { SlideVector = new AGKVector3(-HitNormalVector.Z, 0.0f, HitNormalVector.X).Normalize(); } HitPosition *= SlideVector; } }
public void RayCast(AGKVector3 rFrom, AGKVector3 rTo) { Agk.SetVector3(FromVectorNumber, rFrom.X, rFrom.Y, rFrom.Z); Agk.SetVector3(ToVectorNumber, rTo.X, rTo.Y, rTo.Z); Agk.RayCast3DPhysics(ResourceNumber, (int)FromVectorNumber, (int)ToVectorNumber, 1); HitObjectNumber = (uint)Agk.Get3DPhysicsRayCastObjectHit(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber)); if (HitObjectNumber > 0) { Agk.Get3DPhysicsRayCastContactPosition(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber), (int)HitVectorNumber); HitPosition.X = Agk.GetVector3X(HitVectorNumber); HitPosition.Y = Agk.GetVector3Y(HitVectorNumber); HitPosition.Z = Agk.GetVector3Z(HitVectorNumber); } }