public void OverlapSphere(Vector3 center, float radius, AscensionPhysicsHits hits)
        {
            if (!body)
            {
                return;
            }

            if (body.proximity)
            {
                if (body.proximity.OverlapSphere(ref wtl, center, radius))
                {
                    hits.AddHit(body, body.proximity, (center - ltw.MultiplyPoint(Vector3.zero)).magnitude);
                }
                else
                {
                    return;
                }
            }

            for (int i = 0; i < body.hitboxes.Length; ++i)
            {
                AscensionHitbox hitbox = body.hitboxes[i];

                if (hitbox.OverlapSphere(ref hbwtl[i], center, radius))
                {
                    hits.AddHit(body, hitbox, (center - hbltw[i].MultiplyPoint(Vector3.zero)).magnitude);
                }
            }
        }
        public void Raycast(Vector3 origin, Vector3 direction, AscensionPhysicsHits hits)
        {
            if (!body)
            {
                return;
            }

            float distance = float.NegativeInfinity;

            if (body.proximity)
            {
                if (body.proximity.Raycast(ref wtl, origin, direction, out distance))
                {
                    hits.AddHit(body, body.proximity, distance);
                }
                else
                {
                    return;
                }
            }

            for (int i = 0; i < body.hitboxes.Length; ++i)
            {
                AscensionHitbox hitbox = body.hitboxes[i];

                if (hitbox.Raycast(ref hbwtl[i], origin, direction, out distance))
                {
                    hits.AddHit(body, hitbox, distance);
                }
            }
        }
예제 #3
0
 internal void AddHit(AscensionHitboxBody body, AscensionHitbox hitbox, float distance)
 {
     hits.Add(new AscensionPhysicsHit {
         body = body, hitbox = hitbox, distance = distance
     });
 }