// Gets the closest (by angle) floor point protected ContactPoint GetFloorPoint(ContactPoint[] pts) { int i, min = 0; float angle, min_angle; ContactPoint pt; pt = new ContactPoint(); if (pts == null || pts.Length == 0) { return(pt); } min_angle = Vector3.SignedAngle(pts[0].normal, Gravity, Vector3.up); DrawContactPoint(pts[0]); for (i = 1; i < pts.Length; i++) { angle = Vector3.SignedAngle(pts[i].normal, Gravity, Vector3.up); if (angle < min_angle) { min = i; min_angle = angle; } DrawContactPoint(pts[i]); } //if (min_angle >= 160 || min_angle <= -160) // return pts[min]; if (floor_normal.CheckValue(min_angle)) { return(pts[min]); } return(pt); }
protected bool bCanWalkInDirection(Vector3 dir) { if (!bHasFloor) { return(false); } LBFloatInverval ang; int i; ang = new LBFloatInverval(-90, 90, false); for (i = 0; i < AllWallPoints.Length; i++) { if (ang.CheckValue(Vector3.SignedAngle(dir.normalized, AllWallPoints[i].normal, Vector3.up))) { return(false); } } return(true); }