コード例 #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);
    }
コード例 #2
0
    /// <inheritdoc cref="WorldToLocal(Vector3, Matrix)"/>
    public static Vector3 WorldToLocal(Vector3 worldPos, MatrixInfo matrix)
    {
        // Invalid matrix info provided
        if (matrix is null || 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);
    }
コード例 #3
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))
        {
            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);
    }