mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 17:36:12 -05:00
494a556f8e
* Adjustments to "decomp" language * Fix a comment * Fix accidental clang-formatting * Fix order * Fix order * Remove junk * Fix OFFSET * Adjustments based on new suggestions * Annotate globals * Globals in ISLE * More globals * Merge from parser2 branch * Allow prepending space for exact marker match * To eliminate noise, require the 0x prefix on offset for marker match * fix test from previous * Count tab stops for indented functions to reduce MISSED_END_OF_FUNCTION noise * FUNCTION to SYNTHETIC where needed * Missed marker conversion on SetAtomId * pylint cleanup, remove unused code * Fix unexpected function end, add more unit tests * Be more strict about synthetic name syntax * Revert "Missed marker conversion on SetAtomId" This reverts commit d87d665127fae7dd6e5bd48d9af14a0a829bf9e2. * Revert "FUNCTION to SYNTHETIC where needed" This reverts commit 8c815418d261ba8c5f67a9a2cae349fe4ac92db8. * Implicit lookup by name for functions * Fix VTABLE SYNTHETIC and other decomp markers * Get vtable class name * Vtable marker should identify struct * No colon for SIZE comment * Update README.md * Update README.md * Update CONTRIBUTING.md * Update README.md * Update README.md * Update CONTRIBUTING.md * Update README.md * Update CONTRIBUTING.md * Fix destructor/annotation * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md --------- Co-authored-by: disinvite <disinvite@users.noreply.github.com>
91 lines
2.5 KiB
C++
91 lines
2.5 KiB
C++
#ifndef MATRIX_H
|
|
#define MATRIX_H
|
|
|
|
#include "vector.h"
|
|
|
|
/*
|
|
* A simple array of four Vector4s that can be indexed into.
|
|
*/
|
|
class Matrix4 {
|
|
public:
|
|
float rows[4][4]; // storage is public for easy access
|
|
|
|
inline Matrix4() {}
|
|
/*
|
|
Matrix4(const Vector4& x_axis, const Vector4& y_axis, const Vector4& z_axis, const Vector4& position)
|
|
{
|
|
rows[0] = x_axis;
|
|
rows[1] = y_axis;
|
|
rows[2] = z_axis;
|
|
rows[3] = position;
|
|
}
|
|
Matrix4(const float m[4][4])
|
|
{
|
|
rows[0] = m[0];
|
|
rows[1] = m[1];
|
|
rows[2] = m[2];
|
|
rows[3] = m[3];
|
|
}
|
|
*/
|
|
const float* operator[](long i) const { return rows[i]; }
|
|
float* operator[](long i) { return rows[i]; }
|
|
};
|
|
|
|
// VTABLE: LEGO1 0x100d4350
|
|
// SIZE 0x8
|
|
class Matrix4Impl {
|
|
public:
|
|
inline Matrix4Impl(Matrix4& p_data) : m_data(&p_data) {}
|
|
|
|
// vtable + 0x00
|
|
virtual void EqualsMatrixImpl(const Matrix4Impl* p_other);
|
|
virtual void EqualsMatrixData(const Matrix4& p_matrix);
|
|
virtual void SetData(Matrix4& p_data);
|
|
virtual void AnotherSetData(Matrix4& p_data);
|
|
|
|
// vtable + 0x10
|
|
virtual Matrix4* GetData();
|
|
virtual const Matrix4* GetData() const;
|
|
virtual float* Element(int p_row, int p_col);
|
|
virtual const float* Element(int p_row, int p_col) const;
|
|
|
|
// vtable + 0x20
|
|
virtual void Clear();
|
|
virtual void SetIdentity();
|
|
virtual void operator=(const Matrix4Impl& p_other);
|
|
virtual Matrix4Impl* operator+=(const Matrix4& p_matrix);
|
|
|
|
// vtable + 0x30
|
|
virtual void TranslateBy(const float* p_x, const float* p_y, const float* p_z);
|
|
virtual void SetTranslation(const float* p_x, const float* p_y, const float* p_z);
|
|
virtual void EqualsMxProduct(const Matrix4Impl* p_a, const Matrix4Impl* p_b);
|
|
virtual void EqualsDataProduct(const Matrix4& p_a, const Matrix4& p_b);
|
|
|
|
// vtable + 0x40
|
|
virtual void ToQuaternion(Vector4Impl* p_resultQuat);
|
|
virtual int FUN_10002710(const Vector3Impl* p_vec);
|
|
|
|
inline float& operator[](size_t idx) { return ((float*) m_data)[idx]; }
|
|
|
|
protected:
|
|
// TODO: Currently unclear whether this class contains a Matrix4* or float*.
|
|
Matrix4* m_data;
|
|
};
|
|
|
|
// VTABLE: LEGO1 0x100d4300
|
|
// SIZE 0x48
|
|
class Matrix4Data : public Matrix4Impl {
|
|
public:
|
|
inline Matrix4Data() : Matrix4Impl(m_matrix) {}
|
|
inline Matrix4Data(Matrix4Data& p_other) : Matrix4Impl(m_matrix) { m_matrix = *p_other.m_data; }
|
|
inline Matrix4& GetMatrix() { return *m_data; }
|
|
|
|
// No idea why there's another equals. Maybe to some other type like the
|
|
// DirectX Retained Mode Matrix type which is also a float* alias?
|
|
// vtable + 0x44
|
|
virtual void operator=(const Matrix4Data& p_other);
|
|
|
|
Matrix4 m_matrix;
|
|
};
|
|
|
|
#endif // MATRIX_H
|