/// Convert local matrix coordinates to world position. Keeps offsets in mind (+ rotation and pivot if MatrixMove is present) public static Vector3 LocalToWorld(Vector3 localPos, MatrixInfo matrix, MatrixState state = default(MatrixState)) { //Invalid matrix info provided if (matrix.Equals(MatrixInfo.Invalid) || localPos == TransformState.HiddenPos) { return(TransformState.HiddenPos); } // return matrix.MetaTileMap.LocalToWorld( localPos ); if (!matrix.MatrixMove) { return(localPos + matrix.Offset); } if (state.Equals(default(MatrixState))) { state = matrix.MatrixMove.ClientState; } Vector3 unpivotedPos = localPos - matrix.MatrixMove.Pivot; //localPos - localPivot Vector3 rotatedPos = state.FacingOffsetFromInitial(matrix.MatrixMove).Quaternion *unpivotedPos; //unpivotedPos rotated by N degrees Vector3 rotatedPivoted = rotatedPos + matrix.MatrixMove.Pivot + matrix.GetOffset(state); //adding back localPivot and applying localToWorldOffset return(rotatedPivoted); }
/// Convert world position to local matrix coordinates. Keeps offsets in mind (+ rotation and pivot if MatrixMove is present) public static Vector3 WorldToLocal(Vector3 worldPos, MatrixInfo matrix) { //Invalid matrix info provided if (matrix.Equals(MatrixInfo.Invalid) || worldPos == TransformState.HiddenPos) { return(TransformState.HiddenPos); } if (matrix.MatrixMove == null) { return(worldPos - matrix.Offset); } var state = matrix.MatrixMove.ClientState; return((state.FacingOffsetFromInitial(matrix.MatrixMove).QuaternionInverted *(worldPos - matrix.MatrixMove.Pivot - matrix.GetOffset(state))) + matrix.MatrixMove.Pivot); return((matrix.MatrixMove.FacingOffsetFromInitial.QuaternionInverted * (worldPos - matrix.Offset - matrix.MatrixMove.Pivot)) + matrix.MatrixMove.Pivot); //return // return (matrix.MatrixMove.FacingOffsetFromInitial.QuaternionInverted * // (worldPos - matrix.Offset - matrix.MatrixMove.Pivot)) + // matrix.MatrixMove.Pivot; }
/// Convert world position to local matrix coordinates. Keeps offsets in mind (+ rotation and pivot if MatrixMove is present) public static Vector3 WorldToLocal(Vector3 worldPos, MatrixInfo matrix) { //Invalid matrix info provided if (matrix.Equals(MatrixInfo.Invalid) || worldPos == TransformState.HiddenPos) { return(TransformState.HiddenPos); } if (!matrix.MatrixMove) { return(worldPos - matrix.Offset); } return((matrix.MatrixMove.ClientState.RotationOffset.QuaternionInverted * (worldPos - matrix.Offset - matrix.MatrixMove.Pivot)) + matrix.MatrixMove.Pivot); }
/// Convert world position to local matrix coordinates. Keeps offsets in mind (+ rotation and pivot if MatrixMove is present) public static Vector3 WorldToLocal(Vector3 worldPos, MatrixInfo matrix) { //Invalid matrix info provided if (matrix.Equals(MatrixInfo.Invalid)) { return(TransformState.HiddenPos); } if (!matrix.MatrixMove) { return(worldPos - matrix.Offset); } Vector3 rotatedClean = worldPos - matrix.Offset - matrix.MatrixMove.Pivot; Vector3 unrotatedPos = matrix.MatrixMove.ClientState.Orientation.EulerInverted * rotatedClean; return(unrotatedPos + matrix.MatrixMove.Pivot); }
/// Convert world position to local matrix coordinates. Keeps offsets in mind (+ rotation and pivot if MatrixMove is present) public static Vector3 WorldToLocal(Vector3 worldPos, MatrixInfo matrix) { //Invalid matrix info provided if (matrix.Equals(MatrixInfo.Invalid) || worldPos == TransformState.HiddenPos) { return(TransformState.HiddenPos); } // return matrix.MetaTileMap.WorldToLocal( worldPos ); if (!matrix.MatrixMove) { return(worldPos - matrix.Offset); } return((matrix.MatrixMove.FacingOffsetFromInitial.QuaternionInverted * (worldPos - matrix.Offset - matrix.MatrixMove.Pivot)) + matrix.MatrixMove.Pivot); }
/// Convert local matrix coordinates to world position. Keeps offsets in mind (+ rotation and pivot if MatrixMove is present) public static Vector3 LocalToWorld(Vector3 localPos, MatrixInfo matrix, MatrixState state = default(MatrixState)) { //Invalid matrix info provided if (matrix.Equals(MatrixInfo.Invalid)) { return(TransformState.HiddenPos); } if (!matrix.MatrixMove) { return(localPos + matrix.Offset); } if (state.Equals(default(MatrixState))) { state = matrix.MatrixMove.ClientState; } Vector3 unpivotedPos = localPos - matrix.MatrixMove.Pivot; //localPos - localPivot Vector3 rotatedPos = state.Orientation.Euler * unpivotedPos; //unpivotedPos rotated by N degrees Vector3 rotatedPivoted = rotatedPos + matrix.MatrixMove.Pivot + matrix.GetOffset(state); //adding back localPivot and applying localToWorldOffset return(rotatedPivoted); }
public bool Equals(MatrixIntersection other) { return((Matrix1.Equals(other.Matrix1) && Matrix2.Equals(other.Matrix2)) || (Matrix1.Equals(other.Matrix2) && Matrix2.Equals(other.Matrix1))); }