Files
ss/include/nw4r/lyt/lyt_common.h
T
Elijah Thomas 26af4db82d update from dtk-template - clangd :) (#66)
* update from dtk-template and start work towards using clangd

* include <a> -> "a"

* Update build.yml

* remove/add non-trivial class in union warning
2024-10-16 15:36:02 -04:00

103 lines
2.8 KiB
C++

#ifndef NW4R_LYT_COMMON_H
#define NW4R_LYT_COMMON_H
#include "common.h"
#include "nw4r/lyt/lyt_resources.h"
#include "nw4r/lyt/lyt_types.h"
#include "nw4r/math/math_types.h"
namespace nw4r {
namespace lyt {
namespace detail {
inline s32 GetSignatureInt(const char *sig) {
return *((s32 *)sig);
}
inline bool TestFileVersion(const res::BinaryFileHeader &fileHeader) {
u32 majorVer = (fileHeader.version >> 8) & 0xFF;
u32 minorVer = fileHeader.version & 0xFF;
bool ret = majorVer == 0 && (minorVer > 7 && minorVer <= 10);
return ret;
}
inline u8 GetVtxColorElement(const ut::Color *cols, u32 idx) {
return ((u8 *)cols)[(idx & ~3) + (idx & 3)];
}
inline void SetVtxColElement(ut::Color *cols, u32 idx, u8 value) {
((u8 *)cols)[(idx & ~3) + (idx & 3)] = value;
}
inline u8 GetHorizontalPosition(u8 var) {
return var % 3;
}
inline u8 GetVerticalPosition(u8 var) {
return var / 3;
}
inline void SetHorizontalPosition(u8 *pVar, u8 newVal) {
*pVar = newVal + GetVerticalPosition(*pVar) * 3;
}
inline void SetVerticalPosition(u8 *pVar, u8 newVal) {
*pVar = newVal * 3 + GetHorizontalPosition(*pVar);
}
inline const char *GetStrTableStr(const void *pStrTable, int index) {
const u32 *offsets = (u32 *)pStrTable;
const char *stringPool = (char *)pStrTable;
return &stringPool[offsets[index]];
}
typedef math::VEC2 TexCoordData[TEXCOORD_VTX_COUNT];
class TexCoordAry {
public:
TexCoordAry();
void Free();
void Reserve(u8);
void SetSize(u8);
void Copy(const void *, u8);
bool IsEmpty() const {
return mCap == 0;
}
u8 GetSize() const {
return mNum;
}
TexCoordData *GetArray() const {
return mpData;
}
private:
u8 mCap; // at 0x0
u8 mNum; // at 0x1
TexCoordData *mpData; // at 0x4
};
bool EqualsResName(const char *, const char *);
bool EqualsMaterialName(const char *, const char *);
bool TestFileHeader(const res::BinaryFileHeader &);
bool TestFileHeader(const res::BinaryFileHeader &, u32);
bool IsModulateVertexColor(ut::Color *, u8);
void MultipleAlpha(ut::Color *, const ut::Color *, u8); // Inlined
ut::Color MultipleAlpha(ut::Color, u8);
void SetVertexFormat(bool, u8);
void DrawQuad(const math::VEC2 &, const Size &, u8, const TexCoordData *, const ut::Color *);
void DrawQuad(
const math::VEC2 &basePt, const Size &size, u8 texCoordNum, const TexCoordData *texCoords,
const ut::Color *vtxColors, u8 alpha
);
void DrawLine(const math::VEC2 &pos, const Size &size, ut::Color color);
} // namespace detail
struct ResBlockSet {
const res::TextureList *pTextureList; // at 0x00
const res::FontList *pFontList; // at 0x04
const res::MaterialList *pMaterialList; // at 0x08
ResourceAccessor *pResAccessor; // at 0x0C
};
} // namespace lyt
} // namespace nw4r
#endif