コード例 #1
0
        // 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);
        }
コード例 #2
0
        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);
        }