Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions lib/g3d/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,22 @@ find_nnsdk()
find_nnsdk_module(nn_gfx)

set(NN_G3D_HEADERS
include/nn/g3d/g3d_ResMaterial.h
include/nn/g3d/g3d_ResLightAnim.h
include/nn/g3d/g3d_SkeletonObj.h
include/nn/g3d/g3d_ResFogAnim.h
include/nn/g3d/g3d_AnimObj.h
include/nn/g3d/g3d_BindFuncTable.h
include/nn/g3d/g3d_BoneVisibilityAnimObj.h
include/nn/g3d/g3d_ModelObj.h
include/nn/g3d/g3d_ResFile.h
include/nn/g3d/g3d_ResFogAnim.h
include/nn/g3d/g3d_ResLightAnim.h
include/nn/g3d/g3d_ResMaterialAnim.h
include/nn/g3d/g3d_ResSkeletalAnim.h
include/nn/g3d/g3d_ResShapeAnim.h
include/nn/g3d/g3d_ViewVolume.h
include/nn/g3d/g3d_ResMaterial.h
include/nn/g3d/g3d_ResModel.h
include/nn/g3d/g3d_ResSceneAnim.h
include/nn/g3d/g3d_ResShapeAnim.h
include/nn/g3d/g3d_ResSkeletalAnim.h
include/nn/g3d/g3d_ResSkeleton.h
include/nn/g3d/g3d_ModelObj.h
include/nn/g3d/g3d_BindFuncTable.h
include/nn/g3d/g3d_ResModel.h
include/nn/g3d/g3d_SkeletonObj.h
include/nn/g3d/g3d_ViewVolume.h
include/nn/g3d/g3d_World.h
)

Expand Down
108 changes: 108 additions & 0 deletions lib/g3d/include/nn/g3d/g3d_AnimObj.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
#pragma once

#include <cstdint>

#include <nn/g3d/g3d_ModelObj.h>
#include <nn/g3d/g3d_ResModel.h>

namespace nn::g3d {
class AnimFrameCache;

class AnimBindTable {
public:
void Initialize(uint32_t*, int32_t);
void ClearAll(int32_t);
void BindAll(uint16_t);

private:
uint32_t* _0;
int16_t _8;
int16_t _a;
int16_t _c;
int16_t _e;
};
static_assert(sizeof(AnimBindTable) == 0x10);

class AnimFrameCtrl {
public:
using PlayFunc = float (*)(float, float, float, void*);

void Initialize(float, float, PlayFunc);
static float PlayOneTime(float, float, float, void*);
static float PlayLoop(float, float, float, void*);

void update() { mFrame = mPlayFunc(mFrame + mFrameRate, _4, mFrameMax, _18); }

float getFrame() const { return mFrame; }

void setFrame(float frame) { mFrame = mPlayFunc(frame, _4, mFrameMax, _18); }

float getFrameMax() const { return mFrameMax; }

float getFrameRate() const { return mFrameRate; }

void setFrameRate(float rate) { mFrameRate = rate; }

bool isEnd() const { return mFrameMax <= mFrame; }

bool isOneTime() const { return mPlayFunc == PlayOneTime; }

private:
float mFrame;
float _4;
float mFrameMax;
float mFrameRate;
PlayFunc mPlayFunc;
void* _18;
};
static_assert(sizeof(AnimFrameCtrl) == 0x20);

class AnimContext {
public:
void Initialize(AnimFrameCache*, int32_t);

private:
AnimFrameCache* mAnimFrameCache;
int32_t _8;
int32_t _c;
int32_t _10;
};
static_assert(sizeof(AnimContext) == 0x18);

class AnimObj {
public:
enum class BindFlag;

virtual ~AnimObj();

virtual void ClearResult();
virtual void Calculate();
virtual int32_t Bind(const ResModel*);
virtual int32_t Bind(const ModelObj*);
virtual void BindFast(const ResModel*);
virtual void ApplyTo(ModelObj*) const;

void ResetFrameCtrl(int32_t, bool);

AnimFrameCtrl* getFrameCtrlPtr() const { return mFrameCtrlPtr; }

private:
AnimFrameCtrl* mFrameCtrlPtr;
AnimFrameCtrl mFrameCtrl;
AnimContext mAnimContext;
void* _48;
void* _50;
};
static_assert(sizeof(AnimObj) == 0x58);

class ModelAnimObj : public AnimObj {
public:
void SetBindFlagImpl(int32_t, AnimObj::BindFlag);
const AnimObj::BindFlag& GetBindFlagImpl(int32_t) const;

private:
AnimBindTable mBindTable;
};
static_assert(sizeof(ModelAnimObj) == 0x68);

} // namespace nn::g3d
21 changes: 21 additions & 0 deletions lib/g3d/include/nn/g3d/g3d_BoneVisibilityAnimObj.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#pragma once

#include <nn/g3d/g3d_AnimObj.h>

namespace nn::g3d {

class BoneVisibilityAnimObj : public ModelAnimObj {
public:
void ClearResult() override;
void Calculate() override;
int32_t Bind(const ResModel*) override;
int32_t Bind(const ModelObj*) override;
void BindFast(const ResModel*) override;
void ApplyTo(ModelObj*) const override;

private:
char filler_68[0x18];
};
static_assert(sizeof(BoneVisibilityAnimObj) == 0x80);

} // namespace nn::g3d
Loading