mirror of
https://github.com/zeldaret/ss
synced 2026-06-25 09:41:57 -04:00
26af4db82d
* update from dtk-template and start work towards using clangd * include <a> -> "a" * Update build.yml * remove/add non-trivial class in union warning
103 lines
2.8 KiB
C++
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
|