lyt_picture match...

Im dreading Material
This commit is contained in:
elijah-thomas774
2024-05-26 04:21:52 -04:00
parent 47eaa04f7d
commit 489a69b6f5
19 changed files with 800 additions and 362 deletions
+7
View File
@@ -338,6 +338,13 @@ nw4r/lyt/lyt_layout.cpp:
.sbss start:0x805766F8 end:0x805766FC
.sdata2 start:0x8057F240 end:0x8057F248
nw4r/lyt/lyt_picture.cpp:
.text start:0x80489270 end:0x804897FC
.ctors start:0x804DB978 end:0x804DB97C
.data start:0x8056E4F8 end:0x8056E570
.sbss start:0x80576700 end:0x80576704
.sdata2 start:0x8057F248 end:0x8057F250
nw4r/lyt/lyt_resourceAccessor.cpp:
.text start:0x80492000 end:0x80492058
.data start:0x8056E7E0 end:0x8056E7F8
+4 -4
View File
@@ -163,7 +163,7 @@ fn_80007660 = .text:0x80007660; // type:function size:0x94
fn_80007700 = .text:0x80007700; // type:function size:0xDC
fn_800077E0 = .text:0x800077E0; // type:function size:0xA0
fn_80007880 = .text:0x80007880; // type:function size:0x33C
fn_80007BC0 = .text:0x80007BC0; // type:function size:0x40
__dt__Q34nw4r2ut5ColorFv = .text:0x80007BC0; // type:function size:0x40
fn_80007C00 = .text:0x80007C00; // type:function size:0x40
fn_80007C40 = .text:0x80007C40; // type:function size:0x30
fn_80007C70 = .text:0x80007C70; // type:function size:0x1C
@@ -25922,7 +25922,7 @@ GetVtxColorElement__Q34nw4r3lyt7PictureCFUl = .text:0x804896C0; // type:function
SetVtxColorElement__Q34nw4r3lyt7PictureFUlUc = .text:0x804896E0; // type:function size:0x18
DrawSelf__Q34nw4r3lyt7PictureFRCQ34nw4r3lyt8DrawInfo = .text:0x80489700; // type:function size:0xDC
GetRuntimeTypeInfo__Q34nw4r3lyt7PictureCFv = .text:0x804897E0; // type:function size:0x8
__sinit_lyt_picture_cpp = .text:0x804897F0; // type:function size:0xC
__sinit_\lyt_picture_cpp = .text:0x804897F0; // type:function size:0xC scope:local
__ct__Q34nw4r3lyt7TextBoxFPCQ44nw4r3lyt3res7TextBoxRCQ34nw4r3lyt11ResBlockSet = .text:0x80489800; // type:function size:0x2EC
__dt__Q34nw4r3lyt7TextBoxFv = .text:0x80489AF0; // type:function size:0x1A0
GetVtxColor__Q34nw4r3lyt7TextBoxCFUl = .text:0x80489C90; // type:function size:0x14
@@ -37075,7 +37075,7 @@ lbl_8056E3E8 = .data:0x8056E3E8; // type:object size:0x46 scope:local data:strin
__vt__Q34nw4r3lyt4Pane = .data:0x8056E430; // type:object size:0x74
__vt__Q34nw4r3lyt5Group = .data:0x8056E4A8; // type:object size:0xC
__vt__Q34nw4r3lyt6Layout = .data:0x8056E4B8; // type:object size:0x40
lbl_8056E4F8 = .data:0x8056E4F8; // type:object size:0x78
__vt__Q34nw4r3lyt7Picture = .data:0x8056E4F8; // type:object size:0x78
lbl_8056E570 = .data:0x8056E570; // type:object size:0x88
lbl_8056E5F8 = .data:0x8056E5F8; // type:object size:0x3C
lbl_8056E634 = .data:0x8056E634; // type:object size:0x8C
@@ -47566,7 +47566,7 @@ lbl_8057F230 = .sdata2:0x8057F230; // type:object size:0x4 data:float
lbl_8057F238 = .sdata2:0x8057F238; // type:object size:0x8 data:double
lbl_8057F240 = .sdata2:0x8057F240; // type:object size:0x4 data:float
lbl_8057F244 = .sdata2:0x8057F244; // type:object size:0x4 data:float
lbl_8057F248 = .sdata2:0x8057F248; // type:object size:0x8 data:float
lbl_8057F248 = .sdata2:0x8057F248; // type:object size:0x4 data:float
lbl_8057F250 = .sdata2:0x8057F250; // type:object size:0x4 data:float
lbl_8057F258 = .sdata2:0x8057F258; // type:object size:0x8 data:double
lbl_8057F260 = .sdata2:0x8057F260; // type:object size:0x4 data:float
+1
View File
@@ -356,6 +356,7 @@ config.libs = [
Object(Matching, "nw4r/lyt/lyt_pane.cpp"),
Object(Matching, "nw4r/lyt/lyt_group.cpp"),
Object(Matching, "nw4r/lyt/lyt_layout.cpp"),
Object(Matching, "nw4r/lyt/lyt_picture.cpp"),
Object(Matching, "nw4r/lyt/lyt_resourceAccessor.cpp"),
Object(Matching, "nw4r/lyt/lyt_arcResourceAccessor.cpp"),
Object(Matching, "nw4r/lyt/lyt_common.cpp"),
-89
View File
@@ -8,58 +8,6 @@
namespace nw4r {
namespace lyt {
namespace res {
struct AnimationBlock {
DataBlockHeader blockHeader; // at 0x00
u16 frameSize; // at 0x08
bool loop; // at 0x0A
u8 padding1; // at 0x0B
u16 fileNum; // at 0x0C
u16 animContNum; // at 0x0E
u32 animContOffsetsOffset; // at 0x10
};
struct AnimationTagBlock {
DataBlockHeader blockHeader; // at 0x00
u16 tagOrder; // at 0x08
u16 groupNum; // at 0x0A
u32 nameOffset; // at 0x0C
u32 groupsOffset; // at 0x10
u16 startFrame; // at 0x14
u16 endFrame; // at 0x16
u8 flag; // at 0x18
u8 padding[3]; // at 0x19
};
struct AnimationShareBlock {
DataBlockHeader blockHeader; // at 0x00
u32 animShareInfoOffset; // at 0x04
u16 shareNum; // at 0x0C
u8 padding[2]; // at 0x0E
};
} // namespace res
struct AnimationShareInfo {
const char *GetTargetGroupName() const {
return targetGroupName;
}
const char *GetSrcPaneName() const {
return srcPaneName;
}
char srcPaneName[17]; // at 0x00
char targetGroupName[17]; // at 0x11
u8 padding[2]; // at 0x12
};
struct AnimationGroupRef {
const char *GetName() const {
return name;
}
char name[17]; // at 0x00
u8 flag; // at 0x11
u8 padding[2]; // at 0x12
};
class AnimResource {
public:
@@ -121,44 +69,7 @@ private:
};
} // namespace detail
struct AnimTransform {
inline AnimTransform() : mLink(), mpRes(NULL), mFrame(0.0f) {}
u16 GetFrameSize() const;
bool IsLoopData() const;
virtual ~AnimTransform() = 0;
virtual void SetResource(const res::AnimationBlock *pRes, ResourceAccessor *pResAccessor) = 0;
virtual void SetResource(const res::AnimationBlock *pRes, ResourceAccessor *pResAccessor, u16 animNum) = 0;
virtual void Bind(Pane *pPane, bool bRecursive) = 0;
virtual void Bind(Material *pMaterial, bool bDisable) = 0;
virtual void Animate(u32 idx, Pane *pPane) = 0;
virtual void Animate(u32 idx, Material *pMaterial) = 0;
ut::LinkListNode mLink; // at 0x4
res::AnimationBlock *mpRes; // at 0xC
f32 mFrame; // at 0x10
};
struct AnimationLink {
inline AnimationLink() : mLink() {
Reset();
}
inline void Reset() {
Set(NULL, 0, false);
}
inline void Set(AnimTransform *pTransform, u16 us, bool b) {
mAnimTrans = pTransform;
mIdx = us;
mbDisable = b;
}
ut::LinkListNode mLink; // at 0x0
AnimTransform *mAnimTrans; // at 0x8
u16 mIdx; // at 0xC
bool mbDisable; // at 0xE
};
class AnimTransformBasic : public AnimTransform {
public:
AnimTransformBasic();
-3
View File
@@ -7,9 +7,6 @@
namespace nw4r {
namespace lyt {
namespace res {
struct Bounding : Pane {};
} // namespace res
struct ResBlockSet {
const res::TextureList *pTextureList; // at 0x00
+33 -32
View File
@@ -2,41 +2,52 @@
#define NW4R_LYT_COMMON_H
#include "common.h"
#include "nw4r/math/math_types.h"
#include "nw4r/ut/ut_binaryFileFormat.h"
#define NW4R_RES_NAME_SIZE 16
#define NW4R_MAT_NAME_SIZE 20
#define TEXCOORD_VTX_COUNT 4
#include <nw4r/lyt/lyt_resources.h>
#include <nw4r/lyt/lyt_types.h>
namespace nw4r {
namespace lyt {
namespace res {
struct BinaryFileHeader {
char signature[4]; // at 0x00
u16 byteOrder; // at 0x04;
u16 version; // at 0x06
u32 fileSize; // at 0x08
u16 headerSize; // at 0x0C
u16 dataBlocks; // at 0x0E
};
struct DataBlockHeader {
u32 kind; // at 0x0
u32 size; // at 0x4
};
} // namespace res
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;
}
typedef math::VEC2 TexCoordData[TEXCOORD_VTX_COUNT];
struct TexCoordAry {
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
@@ -54,16 +65,6 @@ void DrawQuad(const math::VEC2 &, const Size &, u8, const TexCoordData *, const
void DrawQuad(const math::VEC2 &, const Size &, u8, const TexCoordData *, const ut::Color *, u8);
void DrawLine(const math::VEC2 &pos, const Size &size, ut::Color color);
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;
}
} // namespace detail
} // namespace lyt
} // namespace nw4r
-8
View File
@@ -7,14 +7,6 @@
namespace nw4r {
namespace lyt {
namespace res {
struct Group {
DataBlockHeader blockHeader; // at 0x00 "grp1"
char mName[NW4R_RES_NAME_SIZE]; // at 0x08
u16 paneNum; // at 0x18
u16 padding; // at 0x1A
};
} // namespace res
namespace detail {
struct PaneLink {
+13 -13
View File
@@ -88,29 +88,29 @@ public:
template <typename T>
static T *NewObj() {
T *obj = (T *)AllocMemory(sizeof(T));
if (obj) {
return new (obj) T();
T *pMem = (T *)AllocMemory(sizeof(T));
if (pMem) {
return new (pMem) T();
} else {
return nullptr;
}
}
template <typename T, typename T2>
static T *NewObj(T2 p2) {
T *obj = (T *)AllocMemory(sizeof(T));
if (obj) {
return new (obj) T(p2);
template <typename T, typename P1>
static T *NewObj(P1 param1) {
T *pMem = (T *)AllocMemory(sizeof(T));
if (pMem) {
return new (pMem) T(param1);
} else {
return nullptr;
}
}
template <typename T, typename T2, typename T3>
static T *NewObj(T2 p2, T3 p3) {
T *obj = (T *)AllocMemory(sizeof(T));
if (obj) {
return new (obj) T(p2, p3);
template <typename T, typename P1, typename P2>
static T *NewObj(P1 param1, P2 param2) {
T *pMem = (T *)AllocMemory(sizeof(T));
if (pMem) {
return new (pMem) T(param1, param2);
} else {
return nullptr;
}
+68 -28
View File
@@ -2,48 +2,54 @@
#define NW4R_LYT_MATERIAL_H
#include "nw4r/lyt/lyt_animation.h"
#include "nw4r/ut/ut_LinkList.h"
#include <nw4r/lyt/lyt_resources.h>
#include <nw4r/lyt/lyt_texMap.h>
#include <nw4r/ut/ut_Color.h>
#include <rvl/GX.h>
#define MATERIAL_NAME_SIZE 20
namespace nw4r {
namespace lyt {
namespace res {
struct MaterialList {
DataBlockHeader blockHeader; // at 0x00
u16 materialNum; // at 0x08
u8 padding[2]; // at 0x0A
};
} // namespace res
struct BitGXNums {
union {
u32 texSRT;
u32 texCoordGen;
u32 indSRT;
u32 indStage;
u32 tevSwap;
u32 tevStage;
u32 chanCtrl;
u32 matCol;
u32 alpComp;
u32 blendMode;
};
};
struct Material {
class Material {
public:
Material(const res::Material *pResMat, const ResBlockSet &ResBlockSet);
// IsBlendModeCap__Q34nw4r3lyt8MaterialCFv
bool IsBlendModeCap() const {
return mGXMemCap.blendMode;
}
// IsAlphaCompareCap__Q34nw4r3lyt8MaterialCFv
bool IsAlphaCompareCap() const {
return mGXMemCap.alpComp;
}
// IsTevSwapCap__Q34nw4r3lyt8MaterialCFv
bool IsTevSwapCap() const {
return mGXMemCap.tevSwap;
}
// IsMatColorCap__Q34nw4r3lyt8MaterialCFv
bool IsMatColorCap() const {
return mGXMemCap.matCol;
}
// IsChanCtrlCap__Q34nw4r3lyt8MaterialCFv
bool IsChanCtrlCap() const {
return mGXMemCap.chanCtrl;
}
// SetTexSRTElement__Q34nw4r3lyt8MaterialFUlUlf
// GetTexturePtr__Q34nw4r3lyt8MaterialFUc
// GetTexSRTCap__Q34nw4r3lyt8MaterialCFv
u8 GetTexSRTCap() const {
return mGXMemCap.texSRT;
}
// GetIndTexSRTCap__Q34nw4r3lyt8MaterialCFv
u8 GetIndTexSRTCap() const {
return mGXMemCap.indSRT;
}
// SetIndTexSRTElement__Q34nw4r3lyt8MaterialFUlUlf
ut::LinkList<AnimationLink, 0> *GetAnimationList() {
@@ -56,8 +62,35 @@ struct Material {
return mName;
}
u8 GetTexCoordGenCap() const {
return mGXMemCap.texCoordGen;
}
u8 GetTexCoordGenNum() const {
return mGXMemNum.texCoordGen;
}
u8 GetTextureCap() const {
return mGXMemCap.texMap;
}
u8 GetTextureNum() const {
return mGXMemNum.texMap;
}
void SetTextureNum(u8 val);
void SetTexCoordGenNum(u8 val);
TexMap *GetTexMapAry() const;
TexMap *GetTexMapAry();
TexCoordGen *GetTexCoordGenAry();
void SetTexture(u32 texMapIdx, const TexMap &texMap) {
GetTexMapAry()[texMapIdx] = texMap;
}
void SetTexCoordGen(u32 idx, TexCoordGen value) {
GetTexCoordGenAry()[idx] = value;
}
virtual ~Material(); // at 0x08
virtual bool SetupGX(bool bModVtxCok, u8 alpha); // at 0x0C
virtual bool SetupGX(bool bModVtxCol, u8 alpha); // at 0x0C
virtual void BindAnimation(AnimTransform *pAnimTrans); // at 0x10
virtual void UnbindAnimation(AnimTransform *pAnimTrans); // at 0x14
virtual void UnbindAllAnimation(); // at 0x18
@@ -78,6 +111,13 @@ private:
bool mbUserAllocated; // at 0x59
u8 mPadding[2]; // at 0x5A
};
namespace detail {
Size GetTextureSize(Material *pMaterial, u8 texMapIdx);
} // namespace detail
} // namespace lyt
} // namespace nw4r
+3 -38
View File
@@ -7,13 +7,10 @@
#include "nw4r/ut/ut_LinkList.h"
#include "nw4r/ut/ut_RuntimeTypeInfo.h"
#include "nw4r/ut/ut_algorithm.h"
#include <nw4r/lyt/lyt_resources.h>
#include <nw4r/lyt/lyt_types.h>
#include <string.h>
#define PANE_NAME_SIZE 16
#define PANE_USERDATA_SIZE 8
#define ANIMTARGET_PANE_MAX 10
namespace nw4r {
namespace lyt {
namespace detail {
@@ -25,38 +22,6 @@ struct PaneBase {
} // namespace detail
namespace res {
// TODO: Find proper place?
// GUESS: In the FindExtUserDataByName function it iterates through ExtUserData
struct ExtUserData {
u32 nameOffs; // at 0x00
u32 datOffs; // at 0x04
u16 numEntries; // at 0x08
u8 type; // at 0x0A
u8 padding; // at 0x0B
};
struct ExtUserDataList {
DataBlockHeader blockHeader; // at 0x00
u16 num; // at 0x08
u16 padding; // at 0x0A
};
struct Pane {
DataBlockHeader blockHeader; // at 0x00 "pan1"
u8 flag; // at 0x08
u8 basePosition; // at 0x09
u8 alpha; // at 0x0A
u8 padding; //
char name[PANE_NAME_SIZE]; // at 0x0C
char mUserData[PANE_USERDATA_SIZE]; // at 0x1C
math::VEC3 translate; // at 0x24
math::VEC3 rotate; // at 0x30
math::VEC2 scale; // at 0x3C
Size size; // at 0x44
};
} // namespace res
class Pane : detail::PaneBase {
public:
// For use with TestBit<Uc>
@@ -146,7 +111,7 @@ public:
virtual void DrawSelf(const DrawInfo &); // at 0x18
virtual void Animate(u32); // at 0x1C
virtual void AnimateSelf(u32); // at 0x20
virtual ut::Color GetVtxColor(u32) const; // at 0x24
virtual ut::Color GetVtxColor(u32 idx) const; // at 0x24
virtual void SetVtxColor(u32, ut::Color); // at 0x28
virtual u8 GetColorElement(u32 idx) const; // at 0x2C
virtual void SetColorElement(u32 idx, u8 value); // at 0x30
@@ -167,7 +132,7 @@ public:
virtual Material *GetMaterial(u32 idx) const; // at 0x6C
virtual void LoadMtx(const DrawInfo &drawInfo); // at 0x70
private:
protected:
Pane *mpParent; // at 0x0C
ut::LinkList<Pane, 4> mChildList; // at 0x10
ut::LinkList<AnimationLink, 0> mAnimList; // at 0x1C;
+22 -12
View File
@@ -3,26 +3,36 @@
#include <nw4r/lyt/lyt_common.h>
#include <nw4r/lyt/lyt_pane.h>
#include <nw4r/lyt/lyt_resources.h>
namespace nw4r {
namespace lyt {
namespace res {
struct Picture : public Pane {};
} // namespace res
class Picture : public Pane {
public:
Picture(const res::Picture *, const ResBlockSet &resDataSet);
virtual ~Picture();
NW4R_UT_RTTI_DECL(Picture);
Picture(u8);
Picture(const TexMap &texMap);
Picture(const res::Picture *pResPic, const ResBlockSet &resDataSet);
private:
ut::Color mVtxColors[4]; // at 0xD8
detail::TexCoordAry mTexCoordAry; // at 0xE8
virtual ~Picture(); // at 0x08
NW4R_UT_RTTI_DECL(Picture); // at 0x0C
virtual void DrawSelf(const DrawInfo &drawInfo); // at 0x18
virtual ut::Color GetVtxColor(u32 idx) const; // at 0x24
virtual void SetVtxColor(u32 idx, ut::Color value); // at 0x28
virtual u8 GetVtxColorElement(u32 idx) const; // at 0x34
virtual void SetVtxColorElement(u32 idx, u8 value); // at 0x38
virtual void Append(const TexMap &); // at 0x78
void Init(u8 texNum);
void ReserveTexCoord(u8 texNum);
void SetTexCoordNum(u8 texNum);
protected:
ut::Color mVtxColors[TEXCOORD_VTX_COUNT]; // at 0xD8
detail::TexCoordAry mTexCoordAry; // at 0xE8
};
} // namespace lyt
+189
View File
@@ -0,0 +1,189 @@
#ifndef NW4R_LYT_RESOURCES_H
#define NW4R_LYT_RESOURCES_H
#include <common.h>
#include <nw4r/lyt/lyt_common.h>
#include <nw4r/lyt/lyt_types.h>
#define PANE_NAME_SIZE 16
#define PANE_USERDATA_SIZE 8
#define ANIMTARGET_PANE_MAX 10
#define MATERIAL_NAME_SIZE 20
#define NW4R_RES_NAME_SIZE 16
#define NW4R_MAT_NAME_SIZE 20
#define TEXCOORD_VTX_COUNT 4
namespace nw4r {
namespace lyt {
namespace res {
struct BinaryFileHeader {
char signature[4]; // at 0x00
u16 byteOrder; // at 0x04;
u16 version; // at 0x06
u32 fileSize; // at 0x08
u16 headerSize; // at 0x0C
u16 dataBlocks; // at 0x0E
};
struct DataBlockHeader {
u32 kind; // at 0x0
u32 size; // at 0x4
};
struct TexMap {
// GetWarpModeS__Q44nw4r3lyt3res6TexMapCFv
// GetWarpModeT__Q44nw4r3lyt3res6TexMapCFv
// GetMinFilter__Q44nw4r3lyt3res6TexMapCFv
// GetMagFilter__Q44nw4r3lyt3res6TexMapCFv
u8 texIdx; // at 0x0
u8 wrapSflt; // at 0x1
u8 wrapTflt; // at 0x2
};
struct Material {};
struct MaterialList {
DataBlockHeader blockHeader; // at 0x00
u16 materialNum; // at 0x08
u8 padding[2]; // at 0x0A
};
struct MaterialResourceNum {
// GetTevStageNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetIndTexStageNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetIndTexSRTNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// HasBlendMode__Q44nw4r3lyt3res19MaterialResourceNumCFv
// HasAlphaCompare__Q44nw4r3lyt3res19MaterialResourceNumCFv
// HasTevSwapTable__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetMatColNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetChanCtrlNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetTexCoordGenNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetTexSRTNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
// GetTexMapNum__Q44nw4r3lyt3res19MaterialResourceNumCFv
u32 bits;
};
struct Group {
DataBlockHeader blockHeader; // at 0x00 "grp1"
char mName[NW4R_RES_NAME_SIZE]; // at 0x08
u16 paneNum; // at 0x18
u16 padding; // at 0x1A
};
struct ExtUserData {
u32 nameOffs; // at 0x00
u32 datOffs; // at 0x04
u16 numEntries; // at 0x08
u8 type; // at 0x0A
u8 padding; // at 0x0B
};
struct ExtUserDataList {
DataBlockHeader blockHeader; // at 0x00
u16 num; // at 0x08
u16 padding; // at 0x0A
};
struct Pane {
DataBlockHeader blockHeader; // at 0x00 "pan1"
u8 flag; // at 0x08
u8 basePosition; // at 0x09
u8 alpha; // at 0x0A
u8 padding; //
char name[PANE_NAME_SIZE]; // at 0x0C
char mUserData[PANE_USERDATA_SIZE]; // at 0x1C
math::VEC3 translate; // at 0x24
math::VEC3 rotate; // at 0x30
math::VEC2 scale; // at 0x3C
Size size; // at 0x44
};
struct Picture : public Pane {
u32 vtxCols[TEXCOORD_VTX_COUNT]; // at 0x4C
u16 materialIdx; // at 0x5C
u8 texCoordNum; // at 0x5E
u8 padding[1]; // at 0x5F
};
struct FontList {
DataBlockHeader blockHeader; // at 0x00
u16 fontNum; // at 0x08
u8 padding[2]; // at 0x0A
};
struct TextureList {
DataBlockHeader blockHeader; // at 0x00
u16 texNum; // at 0x08
u8 padding[2]; // at 0x0A
};
struct TextBox : public Pane {
u16 textBufBytes; // at 0x4C
u16 materialIdx; // at 0x50
u16 fontIdx; // at 0x52
u8 textPosition; // at 0x54
u8 textAlignment; // at 0x55
u8 padding[2]; // at 0x56
u32 textStrOffset; // at 0x58
u32 textCols[2]; // at 0x5C
Size fontSize; // at 0x64
f32 charSpace; // at 0x6C
f32 lineSpace; // at 0x70
};
struct InflationLRTB {
f32 l; // at 0x00
f32 r; // at 0x04
f32 t; // at 0x08
f32 b; // at 0x0C
};
struct Bounding : Pane {};
struct Window : Pane {
InflationLRTB inflation; // at 0x4C
u8 frameNum; // at 0x5C
u8 padding1; // at 0x5D
u8 padding2; // at 0x5E
u8 padding3; // at 0x5F
u32 contentOffset; // at 0x60
u32 frameOffsetTableOffset; // at 0x64
};
struct AnimationBlock {
DataBlockHeader blockHeader; // at 0x00
u16 frameSize; // at 0x08
bool loop; // at 0x0A
u8 padding1; // at 0x0B
u16 fileNum; // at 0x0C
u16 animContNum; // at 0x0E
u32 animContOffsetsOffset; // at 0x10
};
struct AnimationTagBlock {
DataBlockHeader blockHeader; // at 0x00
u16 tagOrder; // at 0x08
u16 groupNum; // at 0x0A
u32 nameOffset; // at 0x0C
u32 groupsOffset; // at 0x10
u16 startFrame; // at 0x14
u16 endFrame; // at 0x16
u8 flag; // at 0x18
u8 padding[3]; // at 0x19
};
struct AnimationShareBlock {
DataBlockHeader blockHeader; // at 0x00
u32 animShareInfoOffset; // at 0x04
u16 shareNum; // at 0x0C
u8 padding[2]; // at 0x0E
};
// TODO
struct HermiteKey {};
struct StepKey {};
} // namespace res
} // namespace lyt
} // namespace nw4r
#endif
+44 -41
View File
@@ -7,13 +7,15 @@
namespace nw4r {
namespace lyt {
namespace detail {
bool IsCITexelFormat(GXTexFmt fmt) {
inline bool IsCITexelFormat(GXTexFmt fmt) {
return (fmt == GX_TF_C4 || fmt == GX_TF_C8 || fmt == GX_TF_C14X2);
}
} // namespace detail
class TexMap {
public:
TexMap() {}
void Get(GXTexObj *) const;
void Get(GXTlutObj *) const;
@@ -27,17 +29,17 @@ public:
void SetNoWrap(const TPLDescriptor *);
void *GetImage() const {
return mImage;
return mpImage;
}
void SetImage(void *img) {
mImage = img;
mpImage = img;
}
void *GetPalette() const {
return mPalette;
return mpPalette;
}
void SetPalette(void *pal) {
mPalette = pal;
mpPalette = pal;
}
u16 GetWidth() const {
@@ -77,90 +79,91 @@ public:
}
GXTexFmt GetTexelFormat() const {
return (GXTexFmt)mTexelFormat;
return (GXTexFmt)mBits.mTexelFormat;
}
void SetTexelFormat(GXTexFmt fmt) {
mTexelFormat = fmt;
mBits.mTexelFormat = fmt;
}
bool IsMipMap() const {
return mIsMipMap;
return mBits.mIsMipMap;
}
void SetMipMap(bool b) {
mIsMipMap = b;
mBits.mIsMipMap = b;
}
GXTexWrapMode GetWrapModeS() const {
return (GXTexWrapMode)mWrapModeS;
return (GXTexWrapMode)mBits.mWrapModeS;
}
GXTexWrapMode GetWrapModeT() const {
return (GXTexWrapMode)mWrapModeT;
return (GXTexWrapMode)mBits.mWrapModeT;
}
void SetWrapMode(GXTexWrapMode wrapS, GXTexWrapMode wrapT) {
mWrapModeS = wrapS;
mWrapModeT = wrapT;
mBits.mWrapModeS = wrapS;
mBits.mWrapModeT = wrapT;
}
GXTexFilter GetMinFilter() const {
return (GXTexFilter)mMinFilter;
return (GXTexFilter)mBits.mMinFilter;
}
GXTexFilter GetMagFilter() const {
return (GXTexFilter)mMagFilter;
return (GXTexFilter)mBits.mMagFilter;
}
void SetFilter(GXTexFilter minFlt, GXTexFilter magFlt) {
mMinFilter = minFlt;
mMagFilter = magFlt;
mBits.mMinFilter = minFlt;
mBits.mMagFilter = magFlt;
}
bool IsBiasClampEnable() const {
return mIsBiasClampEnable;
return mBits.mIsBiasClampEnable;
}
void SetBiasClampEnable(bool b) {
mIsBiasClampEnable = b;
mBits.mIsBiasClampEnable = b;
}
bool IsEdgeLODEnable() const {
return mIsEdgeLODEnable;
return mBits.mIsEdgeLODEnable;
}
void SetEdgeLODEnable(bool b) {
mIsEdgeLODEnable = b;
mBits.mIsEdgeLODEnable = b;
}
GXAnisotropy GetAnisotropy() const {
return (GXAnisotropy)mAnisotropy;
return (GXAnisotropy)mBits.mAnisotropy;
}
void SetAnisotropy(GXAnisotropy a) {
mAnisotropy = a;
mBits.mAnisotropy = a;
}
GXTlutFmt GetPaletteFormat() const {
return (GXTlutFmt)mPaletteFormat;
return (GXTlutFmt)mBits.mPaletteFormat;
}
void SetPaletteFormat(GXTlutFmt fmt) {
mPaletteFormat = fmt;
mBits.mPaletteFormat = fmt;
}
private:
void *mImage; // at 0x0
void *mPalette; // at 0x4
u16 mWidth; // at 0x8
u16 mHeight; // at 0xA
f32 mMinLOD; // at 0xC
void *mpImage; // at 0x00
void *mpPalette; // at 0x04
u16 mWidth; // at 0x08
u16 mHeight; // at 0x0A
f32 mMinLOD; // at 0x0C
f32 mMaxLOD; // at 0x10
u16 mLODBias; // at 0x14
u16 mPaletteEntryNum; // at 0x16
struct {
u32 mTexelFormat : 4; // GXTexFmt
u32 mIsMipMap : 1; // bool
u32 mWrapModeS : 2; // GXTexWrapMode
u32 mWrapModeT : 2; // GXTexWrapMode
u32 mMinFilter : 3; // GXTexFilter
u32 mMagFilter : 3; // GXTexFilter
u32 mIsBiasClampEnable : 1; // bool
u32 mIsEdgeLODEnable : 1; // bool
u32 mAnisotropy : 2; // GXAnisotropy
u32 mPaletteFormat : 2; // GXTlutFmt
// at 0x18
u32 mTexelFormat : 4; // GXTexFmt
u32 mIsMipMap : 1; // bool
u32 mWrapModeS : 2; // GXTexWrapMode
u32 mWrapModeT : 2; // GXTexWrapMode
u32 mMinFilter : 3; // GXTexFilter
u32 mMagFilter : 3; // GXTexFilter
u32 mIsBiasClampEnable : 1; // bool
u32 mIsEdgeLODEnable : 1; // bool
u32 mAnisotropy : 2; // GXAnisotropy
u32 mPaletteFormat : 2; // GXTlutFmt
} mBits; // at 0x18
};
} // namespace lyt
} // namespace nw4r
-18
View File
@@ -6,24 +6,6 @@
namespace nw4r {
namespace lyt {
namespace res {
struct TextBox : public Pane {
u16 textBufBytes; // at 0x4C
u16 materialIdx; // at 0x50
u16 fontIdx; // at 0x52
u8 textPosition; // at 0x54
u8 textAlignment; // at 0x55
u8 padding[2]; // at 0x56
u32 textStrOffset; // at 0x58
u32 textCols[2]; // at 0x5C
Size fontSize; // at 0x64
f32 charSpace; // at 0x6C
f32 lineSpace; // at 0x70
};
} // namespace res
class TextBox : public Pane {
public:
void SetTagProcessor(ut::TagProcessorBase<wchar_t> *pTagProcessor) {
+288 -45
View File
@@ -1,55 +1,12 @@
#ifndef NW4R_LYT_TYPES_H
#define NW4R_LYT_TYPES_H
#include <nw4r/lyt/lyt_common.h>
#include <nw4r/ut/ut_LinkList.h>
#include <nw4r/ut/ut_algorithm.h>
namespace nw4r {
namespace lyt {
struct Size {
inline Size() : width(), height() {}
inline Size &operator=(const Size &rhs) {
width = rhs.width;
height = rhs.height;
return *this;
}
f32 width, height;
};
namespace res {
// struct AnimationBlock {}; // in lyt_animation.h
// struct AnimationTagBlock {}; // in lyt_animation.h
// struct AnimationShareBlock {}; // in lyt_animation.h
// struct Bounding {}; // in lyt_bounding.h
// struct Group {}; // in lyt_group.h
// struct Material {}; // in lyt_material.h
// struct Pane {}; // in lyt_pane.h
// struct TextBox {}; // in lyt_textbox.h
// struct Window {}; // in lyt_window.h
// struct BinaryFileHeader {}; // in lyt_common.h
// IDK Proper place for this one
struct FontList {
DataBlockHeader blockHeader; // at 0x00
u16 fontNum; // at 0x08
u8 padding[2]; // at 0x0A
};
struct TextureList {
DataBlockHeader blockHeader; // at 0x00
u16 texNum; // at 0x08
u8 padding[2]; // at 0x0A
};
// belong in Animation?
struct HermiteKey {};
struct StepKey {};
} // namespace res
namespace detail {
template <typename T>
inline bool TestBit(T bits, int index) {
@@ -66,8 +23,294 @@ template <typename T>
T *ConvertOffsetToPtr(const void *baseAddress, unsigned int offset) {
return (T *)((u32)baseAddress + offset);
}
} // namespace detail
struct Size {
Size() : width(), height() {}
Size(f32 w, f32 h) : width(w), height(h) {}
Size(const Size &r) {
width = r.width;
height = r.height;
}
f32 width, height;
};
inline bool operator==(const Size &a, const Size &b) {
return (a.width == b.width && a.height == b.height);
}
struct AnimTransform {
inline AnimTransform() : mLink(), mpRes(NULL), mFrame(0.0f) {}
u16 GetFrameSize() const;
bool IsLoopData() const;
virtual ~AnimTransform() = 0;
virtual void SetResource(const res::AnimationBlock *pRes, ResourceAccessor *pResAccessor) = 0;
virtual void SetResource(const res::AnimationBlock *pRes, ResourceAccessor *pResAccessor, u16 animNum) = 0;
virtual void Bind(Pane *pPane, bool bRecursive) = 0;
virtual void Bind(Material *pMaterial, bool bDisable) = 0;
virtual void Animate(u32 idx, Pane *pPane) = 0;
virtual void Animate(u32 idx, Material *pMaterial) = 0;
ut::LinkListNode mLink; // at 0x4
res::AnimationBlock *mpRes; // at 0xC
f32 mFrame; // at 0x10
};
struct AnimationShareInfo {
const char *GetTargetGroupName() const {
return targetGroupName;
}
const char *GetSrcPaneName() const {
return srcPaneName;
}
char srcPaneName[17]; // at 0x00
char targetGroupName[17]; // at 0x11
u8 padding[2]; // at 0x12
};
class AnimationLink {
public:
inline AnimationLink() : mLink() {
Reset();
}
AnimTransform *GetAnimTransform() const {
return mAnimTrans;
}
u16 GetIndex() const {
return mIdx;
}
void SetIndex(u16 val) {
mIdx = val;
}
bool IsEnable() const {
return !mbDisable;
}
void SetEnable(bool enable) {
mbDisable = !enable;
}
void Reset() {
Set(NULL, 0, false);
}
void Set(AnimTransform *pTransform, u16 us, bool b) {
mAnimTrans = pTransform;
mIdx = us;
mbDisable = b;
}
private:
ut::LinkListNode mLink; // at 0x0
AnimTransform *mAnimTrans; // at 0x8
u16 mIdx; // at 0xC
bool mbDisable; // at 0xE
};
struct AnimationGroupRef {
const char *GetName() const {
return name;
}
char name[17]; // at 0x00
u8 flag; // at 0x11
u8 padding[2]; // at 0x12
};
struct TexCoordGen {
// __ct__Q34nw4r3lyt11TexCoordGenFv
TexCoordGen() {
reserve = 0;
Set(GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX_IDENT);
}
// Set__Q34nw4r3lyt11TexCoordGenF13_GXTexGenType12_GXTexGenSrcUl
void Set(GXTexGenType aTexGenType, GXTexGenSrc aTexGenSrc, u32 aTexMtx) {
texGenType = aTexGenType;
texGenSrc = aTexGenSrc;
texMtx = aTexMtx;
}
// GetTexGenType__Q34nw4r3lyt11TexCoordGenCFv
u8 GetTexGenType() const {
return texGenType;
}
// GetTexGenSrc__Q34nw4r3lyt11TexCoordGenCFv
u8 GetTexGenSrc() const {
return texGenSrc;
}
// GetTexMtx__Q34nw4r3lyt11TexCoordGenCFv
u8 GetTexMtx() const {
return texMtx;
}
u8 texGenType; // at 0x0
u8 texGenSrc; // at 0x1
u8 texMtx; // at 0x2
u8 reserve; // at 0x3
};
struct ChanCtrl { // 17552
// __ct__Q34nw4r3lyt8ChanCtrlFv
// Set__Q34nw4r3lyt8ChanCtrlF11_GXColorSrc11_GXColorSrc
// GetColorSrc__Q34nw4r3lyt8ChanCtrlCFv
// GetAlphaSrc__Q34nw4r3lyt8ChanCtrlCFv
u8 matSrcCol; // at 0x0
u8 matSrcAlp; // at 0x1
u8 reserve1; // at 0x2
u8 reserve2; // at 0x3
};
struct BitGXNums {
u32 texMap : 4;
u32 texSRT : 4;
u32 texCoordGen : 4;
u32 indSRT : 2;
u32 indStage : 3;
u32 tevSwap : 1;
u32 tevStage : 5;
u32 chanCtrl : 1;
u32 matCol : 1;
u32 alpComp : 1;
u32 blendMode : 1;
};
struct BlendMode { // 10c41
// __ct__Q34nw4r3lyt9BlendModeFv
// Set__Q34nw4r3lyt9BlendModeF12_GXBlendMode14_GXBlendFactor14_GXBlendFactor10_GXLogicOp
// GetType__Q34nw4r3lyt9BlendModeCFv
// GetSrcFactor__Q34nw4r3lyt9BlendModeCFv
// GetDstFactor__Q34nw4r3lyt9BlendModeCFv
// GetOp__Q34nw4r3lyt9BlendModeCFv
u8 type; // at 0x0
u8 srcFactor; // at 0x1
u8 dstFactor; // at 0x2
u8 op; // at 0x3
};
struct AlphaCompare { // 17457
// __ct__Q34nw4r3lyt12AlphaCompareFv
// Set__Q34nw4r3lyt12AlphaCompareF10_GXCompareUc10_GXAlphaOp10_GXCompareUc
// GetComp0__Q34nw4r3lyt12AlphaCompareCFv
// GetRef0__Q34nw4r3lyt12AlphaCompareCFv
// GetOp__Q34nw4r3lyt12AlphaCompareCFv
// GetComp1__Q34nw4r3lyt12AlphaCompareCFv
// GetRef1__Q34nw4r3lyt12AlphaCompareCFv
u8 comp; // at 0x0
u8 op; // at 0x1
u8 ref0; // at 0x2
u8 ref1; // at 0x3
};
struct IndirectStage { // 172da
// __ct__Q34nw4r3lyt13IndirectStageFv
// Set__Q34nw4r3lyt13IndirectStageF13_GXTexCoordID11_GXTexMapID14_GXIndTexScale14_GXIndTexScale
// GetTexCoordGen__Q34nw4r3lyt13IndirectStageCFv
// GetTexMap__Q34nw4r3lyt13IndirectStageCFv
// GetScaleS__Q34nw4r3lyt13IndirectStageCFv
// GetScaleT__Q34nw4r3lyt13IndirectStageCFv
u8 texCoordGen; // at 0x0
u8 texMap; // at 0x1
u8 scaleS; // at 0x2
u8 scaleT; // at 0x3
};
struct TexSRT { // 17243
math::VEC2 translate; // at 0x0
f32 rotate; // at 0x8
math::VEC2 scale; // at 0xC
};
struct TevStageInOp { // 16fe7
// GetA__Q34nw4r3lyt12TevStageInOpCFv
// GetB__Q34nw4r3lyt12TevStageInOpCFv
// GetC__Q34nw4r3lyt12TevStageInOpCFv
// GetD__Q34nw4r3lyt12TevStageInOpCFv
// GetOp__Q34nw4r3lyt12TevStageInOpCFv
// GetBias__Q34nw4r3lyt12TevStageInOpCFv
// GetScale__Q34nw4r3lyt12TevStageInOpCFv
// IsClamp__Q34nw4r3lyt12TevStageInOpCFv
// GetOutReg__Q34nw4r3lyt12TevStageInOpCFv
// GetKSel__Q34nw4r3lyt12TevStageInOpCFv
// SetOp__Q34nw4r3lyt12TevStageInOpFUcUcUcbUcUc
u8 ab; // at 0x0
u8 cd; // at 0x1
u8 op; // at 0x2
u8 cl; // at 0x3
};
struct TevStage { // 17094
// __ct__Q34nw4r3lyt8TevStageFv
// GetTexCoordGen__Q34nw4r3lyt8TevStageCFv
// GetTexMap__Q34nw4r3lyt8TevStageCFv
// GetColorChan__Q34nw4r3lyt8TevStageCFv
// GetRasSwapSel__Q34nw4r3lyt8TevStageCFv
// GetTexSwapSel__Q34nw4r3lyt8TevStageCFv
// GetColorInA__Q34nw4r3lyt8TevStageCFv
// GetColorInB__Q34nw4r3lyt8TevStageCFv
// GetColorInC__Q34nw4r3lyt8TevStageCFv
// GetColorInD__Q34nw4r3lyt8TevStageCFv
// GetColorOp__Q34nw4r3lyt8TevStageCFv
// GetColorBias__Q34nw4r3lyt8TevStageCFv
// GetColorScale__Q34nw4r3lyt8TevStageCFv
// IsColorClamp__Q34nw4r3lyt8TevStageCFv
// GetColorOutReg__Q34nw4r3lyt8TevStageCFv
// GetKColorSel__Q34nw4r3lyt8TevStageCFv
// GetAlphaInA__Q34nw4r3lyt8TevStageCFv
// GetAlphaInB__Q34nw4r3lyt8TevStageCFv
// GetAlphaInC__Q34nw4r3lyt8TevStageCFv
// GetAlphaInD__Q34nw4r3lyt8TevStageCFv
// GetAlphaOp__Q34nw4r3lyt8TevStageCFv
// GetAlphaBias__Q34nw4r3lyt8TevStageCFv
// GetAlphaScale__Q34nw4r3lyt8TevStageCFv
// IsAlphaClamp__Q34nw4r3lyt8TevStageCFv
// GetAlphaOutReg__Q34nw4r3lyt8TevStageCFv
// GetKAlphaSel__Q34nw4r3lyt8TevStageCFv
// GetIndMtxSel__Q34nw4r3lyt8TevStageCFv
// GetIndStage__Q34nw4r3lyt8TevStageCFv
// GetIndFormat__Q34nw4r3lyt8TevStageCFv
// GetIndBiasSel__Q34nw4r3lyt8TevStageCFv
// GetIndWrapS__Q34nw4r3lyt8TevStageCFv
// GetIndWrapT__Q34nw4r3lyt8TevStageCFv
// IsIndAddPrev__Q34nw4r3lyt8TevStageCFv
// IsIndUtcLod__Q34nw4r3lyt8TevStageCFv
// GetIndAlphaSel__Q34nw4r3lyt8TevStageCFv
// SetOrder__Q34nw4r3lyt8TevStageF13_GXTexCoordID11_GXTexMapID12_GXChannelID13_GXTevSwapSel13_GXTevSwapSel
// SetColorIn__Q34nw4r3lyt8TevStageF14_GXTevColorArg14_GXTevColorArg14_GXTevColorArg14_GXTevColorArg
// SetAlphaIn__Q34nw4r3lyt8TevStageF14_GXTevAlphaArg14_GXTevAlphaArg14_GXTevAlphaArg14_GXTevAlphaArg
// SetColorOp__Q34nw4r3lyt8TevStageF8_GXTevOp10_GXTevBias11_GXTevScaleb11_GXTevRegID15_GXTevKColorSel
// SetAlphaOp__Q34nw4r3lyt8TevStageF8_GXTevOp10_GXTevBias11_GXTevScaleb11_GXTevRegID15_GXTevKAlphaSel
// SetIndirect__Q34nw4r3lyt8TevStageF16_GXIndTexStageID15_GXIndTexFormat16_GXIndTexBiasSel14_GXIndTexMtxID13_GXIndTexWrap13_GXIndTexWrapbb17_GXIndTexAlphaSel
u8 texCoordGen; // at 0x0
u8 colChan; // at 0x1
u8 texMap; // at 0x2
u8 swapSel; // at 0x3
TevStageInOp colIn; // at 0x4
TevStageInOp alpIn; // at 0x8
u8 indStage; // at 0xC
u8 inBiMt; // at 0xD
u8 indWrap; // at 0xE
u8 indFoAdUtAl; // at 0xF
};
struct TevSwapMode { // 1750a
// GetR__Q34nw4r3lyt11TevSwapModeCFv
// GetG__Q34nw4r3lyt11TevSwapModeCFv
// GetB__Q34nw4r3lyt11TevSwapModeCFv
// GetA__Q34nw4r3lyt11TevSwapModeCFv
// Set__Q34nw4r3lyt11TevSwapModeF15_GXTevColorChan15_GXTevColorChan15_GXTevColorChan15_GXTevColorChan
u8 swap; // at 0x0
};
} // namespace lyt
-22
View File
@@ -10,28 +10,6 @@ namespace nw4r {
namespace lyt {
namespace res {
// TODO: Idk where this is stored
struct InflationLRTB {
f32 l; // at 0x00
f32 r; // at 0x04
f32 t; // at 0x08
f32 b; // at 0x0C
};
struct Window : res::Pane {
InflationLRTB inflation; // at 0x4C
u8 frameNum; // at 0x5C
u8 padding1; // at 0x5D
u8 padding2; // at 0x5E
u8 padding3; // at 0x5F
u32 contentOffset; // at 0x60
u32 frameOffsetTableOffset; // at 0x64
};
} // namespace res
struct Content {
ut::Color vtxColors[4]; // at 0x00
detail::TexCoordAry texCoordAry; // at 0x10
+5 -3
View File
@@ -35,7 +35,7 @@ void SetTagProcessorImpl(Pane *pPane, ut::TagProcessorBase<wchar_t> *pTagProcess
bool IsIncludeAnimationGroupRef(GroupContainer *pGroupContainer, const AnimationGroupRef *groupRefs, u16 bindGroupNum,
bool bDescendingBind, Pane *pTargetPane) {
for (u16 grpIdx = 0; grpIdx < bindGroupNum; grpIdx++) {
Group *pGroup = pGroupContainer->FindGroupByName(groupRefs[grpIdx].name);
Group *pGroup = pGroupContainer->FindGroupByName(groupRefs[grpIdx].GetName());
for (ut::LinkList<detail::PaneLink, 0>::Iterator paneList = pGroup->GetPaneList()->GetBeginIter();
paneList != pGroup->GetPaneList()->GetEndIter(); paneList++) {
const Pane *t = paneList->mTarget;
@@ -95,9 +95,10 @@ bool Layout::Build(const void *lytResBuf, ResourceAccessor *pResAcsr) {
const res::DataBlockHeader *pDataBlockHead = (const res::DataBlockHeader *)dataPtr;
switch (pDataBlockHead->kind) {
case 'lyt1': // Main Layout
{
const res::Layout *pResLyt = ((const res::Layout *)dataPtr);
mLayoutSize = pResLyt->layoutSize;
break;
} break;
case 'txl1': // Texture List
resBlockSet.pTextureList = (const res::TextureList *)dataPtr;
break;
@@ -112,6 +113,7 @@ bool Layout::Build(const void *lytResBuf, ResourceAccessor *pResAcsr) {
case 'pic1': // Picture
case 'txt1': // Text Box
case 'bnd1': // Boundary Pane
{
Pane *pPane = BuildPaneObj(pDataBlockHead->kind, dataPtr, resBlockSet);
if (pPane) {
if (mpRootPane == nullptr) {
@@ -122,7 +124,7 @@ bool Layout::Build(const void *lytResBuf, ResourceAccessor *pResAcsr) {
}
pLastPane = pPane;
}
break;
} break;
case 'usd1': // User Data
pLastPane->SetExtUserDataList((const res::ExtUserDataList *)dataPtr);
break;
+6 -6
View File
@@ -347,12 +347,12 @@ void Pane::Animate(u32 option) {
void Pane::AnimateSelf(u32 option) {
for (ut::LinkList<AnimationLink, 0>::Iterator it = this->mAnimList.GetBeginIter();
it != this->mAnimList.GetEndIter(); it++) {
if (!it->mbDisable) {
AnimTransform *animTrans = it->mAnimTrans;
animTrans->Animate(it->mIdx, this);
if (it->IsEnable()) {
AnimTransform *animTrans = it->GetAnimTransform();
animTrans->Animate(it->GetIndex(), this);
}
}
if (IsVisible() || !(option & 1)) {
if (IsVisible() || !detail::TestBit(option, 0)) {
if (this->mpMaterial) {
mpMaterial->Animate();
}
@@ -407,7 +407,7 @@ AnimationLink *Pane::FindAnimationLinkSelf(const AnimResource &animRes) {
void Pane::SetAnimationEnable(AnimTransform *pAnimTrans, bool bEnable, bool bRecursive) {
AnimationLink *pAnimLink = FindAnimationLinkSelf(pAnimTrans);
if (pAnimLink) {
pAnimLink->mbDisable = !bEnable;
pAnimLink->SetEnable(bEnable);
}
u8 materialNum = GetMaterialNum();
@@ -426,7 +426,7 @@ void Pane::SetAnimationEnable(AnimTransform *pAnimTrans, bool bEnable, bool bRec
void Pane::SetAnimationEnable(const AnimResource &animRes, bool bEnable, bool bRecursive) {
AnimationLink *pAnimLink = FindAnimationLinkSelf(animRes);
if (pAnimLink) {
pAnimLink->mbDisable = !bEnable;
pAnimLink->SetEnable(bEnable);
}
u8 materialNum = GetMaterialNum();
+117
View File
@@ -0,0 +1,117 @@
#include <nw4r/lyt/lyt_bounding.h>
#include <nw4r/lyt/lyt_layout.h>
#include <nw4r/lyt/lyt_material.h>
#include <nw4r/lyt/lyt_picture.h>
#include <nw4r/lyt/lyt_texMap.h>
namespace nw4r {
namespace lyt {
NW4R_UT_RTTI_DEF_DERIVED(Picture, Pane);
// __ct__Q34nw4r3lyt7PictureFUc
// COMPLETE GUESS (needed for the weak Color ctor)
Picture::Picture(u8 texNum) {
Init(texNum);
}
// __ct__Q34nw4r3lyt7PictureFRCQ34nw4r3lyt6TexMap
// __ct__Q34nw4r3lyt7PictureFPCQ44nw4r3lyt3res7PictureRCQ34nw4r3lyt11ResBlockSet
Picture::Picture(const res::Picture *pResPic, const ResBlockSet &resBlockSet)
: Pane(pResPic), mVtxColors(), mTexCoordAry() {
u8 texCoordNum = ut::Min<u8>(pResPic->texCoordNum, 8);
Init(texCoordNum);
for (int i = 0; i < TEXCOORD_VTX_COUNT; i++) {
mVtxColors[i] = pResPic->vtxCols[i];
}
if (texCoordNum != 0 && !mTexCoordAry.IsEmpty()) {
mTexCoordAry.Copy((void *)&pResPic[1], texCoordNum);
}
const u32 *matOffsTbl = detail::ConvertOffsetToPtr<u32>(resBlockSet.pMaterialList, sizeof(res::MaterialList));
const res::Material *pResMaterial =
detail::ConvertOffsetToPtr<res::Material>(resBlockSet.pMaterialList, matOffsTbl[pResPic->materialIdx]);
mpMaterial = Layout::NewObj<Material>(pResMaterial, resBlockSet);
}
// Init__Q34nw4r3lyt7PictureFUc
void Picture::Init(u8 texNum) {
ReserveTexCoord(texNum);
}
// __dt__Q34nw4r3lyt7PictureFv
Picture::~Picture() {
if (mpMaterial && !mpMaterial->IsUserAllocated()) {
Layout::DeleteObj(mpMaterial);
mpMaterial = nullptr;
}
mTexCoordAry.Free();
}
// Append__Q34nw4r3lyt7PictureFRCQ34nw4r3lyt6TexMap
void Picture::Append(const TexMap &texMap) {
if (mpMaterial->GetTextureNum() >= mpMaterial->GetTextureCap() ||
mpMaterial->GetTextureNum() >= mpMaterial->GetTexCoordGenCap()) {
return;
}
u8 texIdx = mpMaterial->GetTextureNum();
mpMaterial->SetTextureNum(texIdx + 1);
mpMaterial->SetTexture(texIdx, texMap);
mpMaterial->SetTexCoordGenNum(mpMaterial->GetTextureNum());
mpMaterial->SetTexCoordGen(texIdx, TexCoordGen());
SetTexCoordNum(mpMaterial->GetTextureNum());
if (mSize == Size(0.0f, 0.0f) && mpMaterial->GetTextureNum() == 1) {
mSize = detail::GetTextureSize(mpMaterial, 0);
}
}
// ReserveTexCoord__Q34nw4r3lyt7PictureFUc
void Picture::ReserveTexCoord(u8 texNum) {
if (texNum != 0) {
mTexCoordAry.Reserve(texNum);
}
}
// GetTexCoordNum__Q34nw4r3lyt7PictureCFv
// SetTexCoordNum__Q34nw4r3lyt7PictureFUc
void Picture::SetTexCoordNum(u8 num) {
mTexCoordAry.SetSize(num);
}
// GetVtxColor__Q34nw4r3lyt7PictureCFUl
ut::Color Picture::GetVtxColor(u32 idx) const {
return mVtxColors[idx];
}
// SetVtxColor__Q34nw4r3lyt7PictureFUlQ34nw4r2ut5Color
void Picture::SetVtxColor(u32 idx, ut::Color value) {
mVtxColors[idx] = value;
}
// GetVtxColorElement__Q34nw4r3lyt7PictureCFUl
u8 Picture::GetVtxColorElement(u32 idx) const {
return detail::GetVtxColorElement(mVtxColors, idx);
}
// SetVtxColorElement__Q34nw4r3lyt7PictureFUlUc
void Picture::SetVtxColorElement(u32 idx, u8 value) {
detail::SetVtxColElement(mVtxColors, idx, value);
}
// DrawSelf__Q34nw4r3lyt7PictureFRCQ34nw4r3lyt8DrawInfo
void Picture::DrawSelf(const DrawInfo &drawInfo) {
if (mpMaterial) {
LoadMtx(drawInfo);
bool bUseVtxCol = mpMaterial->SetupGX(detail::IsModulateVertexColor(mVtxColors, mGlbAlpha), mGlbAlpha);
detail::SetVertexFormat(bUseVtxCol, mTexCoordAry.GetSize());
detail::DrawQuad(GetVtxPos(), mSize, mTexCoordAry.GetSize(), mTexCoordAry.GetArray(),
bUseVtxCol ? mVtxColors : nullptr, mGlbAlpha);
}
}
} // namespace lyt
} // namespace nw4r