public virtual void IntersectPoint(Vector3 point, AreaInfo info, PhaseShift phaseShift) { }
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); }
public DynamicTreeAreaInfoCallback(PhaseShift phaseShift) { _phaseShift = phaseShift; _areaInfo = new AreaInfo(); }
public virtual bool IntersectRay(Ray ray, ref float maxDist, bool stopAtFirstHit, PhaseShift phaseShift, ModelIgnoreFlags ignoreFlags) { return(false); }
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); }
public DynamicTreeIntersectionCallback(PhaseShift phaseShift) { _didHit = false; _phaseShift = phaseShift; }
public uint GetZoneId(PhaseShift phaseShift, uint mapid, float x, float y, float z) { Map m = CreateBaseMap(mapid); return(m.GetZoneId(phaseShift, x, y, z)); }
public void GetZoneAndAreaId(PhaseShift phaseShift, out uint zoneid, out uint areaid, WorldLocation loc) { GetZoneAndAreaId(phaseShift, out zoneid, out areaid, loc.GetMapId(), loc); }
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()); }
public abstract bool IsInPhase(PhaseShift phaseShift);
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); }