Exemple #1
0
    /// 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);
    }
Exemple #5
0
    /// 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)));
 }