Esempio n. 1
0
 public virtual void IntersectPoint(Vector3 point, AreaInfo info, PhaseShift phaseShift)
 {
 }
Esempio n. 2
0
        public bool GetObjectHitPos(Vector3 startPos, Vector3 endPos, ref Vector3 resultHitPos, float modifyDist, PhaseShift phaseShift)
        {
            bool  result  = false;
            float maxDist = (endPos - startPos).magnitude();

            // valid map coords should *never ever* produce float overflow, but this would produce NaNs too
            Cypher.Assert(maxDist < float.MaxValue);
            // prevent NaN values which can cause BIH intersection to enter infinite loop
            if (maxDist < 1e-10f)
            {
                resultHitPos = endPos;
                return(false);
            }
            Vector3 dir  = (endPos - startPos) / maxDist;             // direction with length of 1
            Ray     ray  = new Ray(startPos, dir);
            float   dist = maxDist;

            if (GetIntersectionTime(ray, endPos, phaseShift, dist))
            {
                resultHitPos = startPos + dir * dist;
                if (modifyDist < 0)
                {
                    if ((resultHitPos - startPos).magnitude() > -modifyDist)
                    {
                        resultHitPos += dir * modifyDist;
                    }
                    else
                    {
                        resultHitPos = startPos;
                    }
                }
                else
                {
                    resultHitPos += dir * modifyDist;
                }

                result = true;
            }
            else
            {
                resultHitPos = endPos;
                result       = false;
            }
            return(result);
        }
Esempio n. 3
0
 public DynamicTreeAreaInfoCallback(PhaseShift phaseShift)
 {
     _phaseShift = phaseShift;
     _areaInfo   = new AreaInfo();
 }
Esempio n. 4
0
 public virtual bool IntersectRay(Ray ray, ref float maxDist, bool stopAtFirstHit, PhaseShift phaseShift, ModelIgnoreFlags ignoreFlags)
 {
     return(false);
 }
Esempio n. 5
0
        public void GetZoneAndAreaId(PhaseShift phaseShift, out uint zoneid, out uint areaid, uint mapid, float x, float y, float z)
        {
            Map m = CreateBaseMap(mapid);

            m.GetZoneAndAreaId(phaseShift, out zoneid, out areaid, x, y, z);
        }
Esempio n. 6
0
 public DynamicTreeIntersectionCallback(PhaseShift phaseShift)
 {
     _didHit     = false;
     _phaseShift = phaseShift;
 }
Esempio n. 7
0
        public uint GetZoneId(PhaseShift phaseShift, uint mapid, float x, float y, float z)
        {
            Map m = CreateBaseMap(mapid);

            return(m.GetZoneId(phaseShift, x, y, z));
        }
Esempio n. 8
0
 public void GetZoneAndAreaId(PhaseShift phaseShift, out uint zoneid, out uint areaid, WorldLocation loc)
 {
     GetZoneAndAreaId(phaseShift, out zoneid, out areaid, loc.GetMapId(), loc);
 }
Esempio n. 9
0
 public void GetZoneAndAreaId(PhaseShift phaseShift, out uint zoneid, out uint areaid, uint mapid, Position pos)
 {
     GetZoneAndAreaId(phaseShift, out zoneid, out areaid, mapid, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ());
 }
Esempio n. 10
0
 public abstract bool IsInPhase(PhaseShift phaseShift);
Esempio n. 11
0
        public override bool IntersectRay(Ray ray, ref float maxDist, bool stopAtFirstHit, PhaseShift phaseShift, ModelIgnoreFlags ignoreFlags)
        {
            if (!IsCollisionEnabled() || !owner.IsSpawned())
            {
                return(false);
            }

            if (!owner.IsInPhase(phaseShift))
            {
                return(false);
            }

            float time = ray.intersectionTime(iBound);

            if (time == float.PositiveInfinity)
            {
                return(false);
            }

            // child bounds are defined in object space:
            Vector3 p        = iInvRot * (ray.Origin - iPos) * iInvScale;
            Ray     modRay   = new Ray(p, iInvRot * ray.Direction);
            float   distance = maxDist * iInvScale;
            bool    hit      = iModel.IntersectRay(modRay, ref distance, stopAtFirstHit, ignoreFlags);

            if (hit)
            {
                distance *= iScale;
                maxDist   = distance;
            }
            return(hit);
        }