Axiom.SceneManagers.PortalConnected.Portal.calcDirectionAndRadius C# (CSharp) Method

calcDirectionAndRadius() public method

public calcDirectionAndRadius ( ) : void
return void
		public void calcDirectionAndRadius()
		{
			Vector3 radiusVector;
			Vector3 side1, side2;

			switch ( mType )
			{
				default:
				case PORTAL_TYPE.PORTAL_TYPE_QUAD:
					// first calculate local direction
					side1 = mCorners[ 1 ] - mCorners[ 0 ];
					side2 = mCorners[ 2 ] - mCorners[ 0 ];
					mDirection = side1.Cross( side2 );
					mDirection.Normalize();
					// calculate local cp
					mLocalCP = Vector3.Zero;
					for ( int i = 0; i < 4; i++ )
					{
						mLocalCP += mCorners[ i ];
					}
					mLocalCP *= 0.25f;
					// then calculate radius
					radiusVector = mCorners[ 0 ] - mLocalCP;
					mRadius = radiusVector.Length;
					break;
				case PORTAL_TYPE.PORTAL_TYPE_AABB:
					// "direction" is is either pointed inward or outward and is set by user, not calculated.
					// calculate local cp
					mLocalCP = Vector3.Zero;
					for ( int i = 0; i < 2; i++ )
					{
						mLocalCP += mCorners[ i ];
					}
					mLocalCP *= 0.5f;
					// for radius, use distance from corner to center point
					// this gives the radius of a sphere that encapsulates the aabb
					radiusVector = mCorners[ 0 ] - mLocalCP;
					mRadius = radiusVector.Length;
					break;
				case PORTAL_TYPE.PORTAL_TYPE_SPHERE:
					// "direction" is is either pointed inward or outward and is set by user, not calculated.
					// local CP is same as corner point 0
					mLocalCP = mCorners[ 0 ];
					// since corner1 is point on sphere, radius is simply corner1 - center point
					radiusVector = mCorners[ 1 ] - mLocalCP;
					mRadius = radiusVector.Length;
					break;
			}
			mDerivedSphere.Radius = mRadius;
			// locals are now up to date
			mLocalsUpToDate = true;
		}