Work on JAISeMgr (#368)

This commit is contained in:
hatal175
2023-07-12 10:59:33 +03:00
committed by GitHub
parent 018fdf29d6
commit ed40ffb064
33 changed files with 375 additions and 961 deletions
+53 -11
View File
@@ -5,6 +5,7 @@
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JAISoundParams.h"
#include "JSystem/JAudio2/JASGadget.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JSupport/JSUList.h"
#include "global.h"
@@ -15,22 +16,44 @@ struct JASNonCopyable {
/* 0x0 */ int field_0x0;
}; // Size: 0x4
struct JAISeCategoryArrangement {};
struct JAISeCategoryArrangementItem {
u8 mMaxActiveSe;
u8 mMaxInactiveSe;
};
struct JAISeCategoryArrangement {
JAISeCategoryArrangementItem mItems[16];
};
class JAISeMgr;
struct JAISe {
struct JAISePlaceHolder {
u8 field_0x0[0x10];
};
struct JAISe : public JAISePlaceHolder, public JAISound {
/* 8029F03C */ JAISe(JAISeMgr*, JAISoundStrategyMgr<JAISe>*, u32);
/* 8029F304 */ void JAISeCategoryMgr_mixOut_(bool, JASSoundParams const&, JAISoundActivity);
/* 8029F4CC */ void JAISeCategoryMgr_calc_();
/* 8029F650 */ void JAISeMgr_startID_(JAISoundID, JGeometry::TVec3<f32> const*, JAIAudience*);
JAISeqData* getSeqData() { return &mSeqData; }
u32 JAISeCategoryMgr_getProperPriority_() const { return mProperPriority; }
u32 JAISeCategoryMgr_getPriority_() const { return mPriority;}
bool isFarAway() const { return mPriority == -1; }
/* 0x0aa */ u8 field_0x0[2];
/* 0x0ac */ u32 mProperPriority;
/* 0x0b0 */ u32 mPriority;
/* 0x0b4 */ u8 field_0xb4[0x25c];
/* 0x310 */ JAISeqData mSeqData;
};
class JAISeCategoryMgr : public JAISeqDataUser {
public:
/* 8029F9C4 */ void JAISeMgr_calc_();
/* 8029FB30 */ void JAISeMgr_freeDeadSe_();
/* 8029FC88 */ void JAISeMgr_acceptsNewSe_(u32) const;
/* 8029FC88 */ u32 JAISeMgr_acceptsNewSe_(u32) const;
/* 8029FD40 */ void sortByPriority_();
/* 8029FDE0 */ void stop(u32);
/* 8029FE34 */ void stop();
@@ -41,9 +64,21 @@ public:
/* 800078DC */ virtual ~JAISeCategoryMgr() {}
/* 8029F8B0 */ virtual bool isUsingSeqData(JAISeqDataRegion const&);
/* 8029F91C */ virtual void releaseSeqData(JAISeqDataRegion const&);
/* 8029F91C */ virtual int releaseSeqData(JAISeqDataRegion const&);
JAISoundParamsMove* getParams() { return &mParams; }
int getMaxSe() const {
if (mMaxActiveSe == 0) {
return 0;
}
return mMaxActiveSe + mMaxInactiveSe;
}
int getMaxActiveSe() const { return mMaxActiveSe; }
void setMaxActiveSe(int se) { mMaxActiveSe = se; }
void setMaxInactiveSe(int se) { mMaxInactiveSe = se; }
int getNumSe() const { return mSeList.getNumLinks(); }
JAIAudience* getAudience() { return (JAIAudience*)field_0x4.field_0x0; }
/* 0x04 */ JASNonCopyable field_0x4;
/* 0x08 */ JAISoundParamsMove mParams;
@@ -52,9 +87,9 @@ public:
/* 0x68 */ int mMaxActiveSe;
}; // Size: 0x6C
class JAISeMgr : public JAISeqDataUser,
public JAISoundActivity,
public JASGlobalInstance<JAISeMgr> {
class JAISeMgr : public JASGlobalInstance<JAISeMgr>,
public JAISeqDataUser,
public JAISoundActivity {
public:
/* 802A0074 */ JAISeMgr(bool);
/* 802A0268 */ void setCategoryArrangement(JAISeCategoryArrangement const&);
@@ -64,17 +99,24 @@ public:
/* 802A03D8 */ void setAudience(JAIAudience*);
/* 802A03E0 */ void setSeqDataMgr(JAISeqDataMgr*);
/* 802A0434 */ void resetSeqDataMgr();
/* 802A0484 */ void newSe_(int, u32);
/* 802A0484 */ JAISe* newSe_(int, u32);
/* 802A0574 */ void calc();
/* 802A0704 */ void mixOut();
/* 802A0768 */ void startSound(JAISoundID, JAISoundHandle*, JGeometry::TVec3<f32> const*);
/* 802A08D0 */ void getNumActiveSe() const;
/* 802A0768 */ int startSound(JAISoundID, JAISoundHandle*, JGeometry::TVec3<f32> const*);
/* 802A08D0 */ int getNumActiveSe() const;
/* 802A08FC */ virtual ~JAISeMgr(); // inline?
/* 802A0168 */ virtual bool isUsingSeqData(JAISeqDataRegion const&);
/* 802A01D8 */ virtual void releaseSeqData(JAISeqDataRegion const&);
/* 802A01D8 */ virtual int releaseSeqData(JAISeqDataRegion const&);
JAISeCategoryMgr* getCategory(int categoryIndex) { return &mCategoryMgrs[categoryIndex]; }
JAIAudience* getAudience(int categoryIndex) {
if (categoryIndex >= 0 && categoryIndex < 16) {
JAIAudience* rv = mCategoryMgrs[categoryIndex].getAudience();
if (rv) return rv;
}
return mAudience;
}
private:
/* 0x008 */ JAIAudience* mAudience;
+21 -4
View File
@@ -4,20 +4,37 @@
#include "JSystem/JAudio2/JAISound.h"
#include "dolphin/types.h"
struct JAISeqDataRegion {};
struct JAISeqData {
/* 0x00 */ u32 field_0x0;
/* 0x04 */ u32 field_0x4;
};
struct JAISeqDataRegion {
bool intersects(JAISeqData& seqData) const {
if (field_0x0 + field_0x4 < seqData.field_0x0) {
return false;
}
if (seqData.field_0x0 + seqData.field_0x4 < field_0x0) {
return false;
}
return true;
}
/* 0x00 */ u32 field_0x0;
/* 0x04 */ u32 field_0x4;
};
struct JAISeqData;
struct JAISeqDataUser {
virtual ~JAISeqDataUser();
virtual bool isUsingSeqData(JAISeqDataRegion const&) = 0;
virtual void releaseSeqData(JAISeqDataRegion const&) = 0;
virtual int releaseSeqData(JAISeqDataRegion const&) = 0;
};
struct JAISeqDataMgr {
virtual ~JAISeqDataMgr();
virtual void getSeqData(JAISoundID, JAISeqData*) = 0;
virtual void releaseSeqData() = 0;
virtual int releaseSeqData() = 0;
virtual void setSeqDataUser(JAISeqDataUser*) = 0;
};
+1 -1
View File
@@ -25,7 +25,7 @@ public:
/* 802A20F0 */ virtual ~JAISeqMgr(); // inline?
/* 802A1804 */ virtual bool isUsingSeqData(JAISeqDataRegion const&);
/* 802A1870 */ virtual void releaseSeqData(JAISeqDataRegion const&);
/* 802A1870 */ virtual int releaseSeqData(JAISeqDataRegion const&);
private:
/* 0x04 */ JAISoundActivity mActivity;
+13
View File
@@ -17,8 +17,16 @@ public:
JAISoundID() {}
bool isAnonymous() { return mId.mFullId == 0xffffffff; }
union {
u32 mFullId;
struct {
u8 b0;
u8 b1;
u8 b2;
u8 b3;
} mBytes;
struct {
u16 mSoundType;
u16 mShortId;
@@ -41,6 +49,7 @@ struct JAISoundStatus_ {
}
bool isAlive(); // used in assert
bool isDead() { return state.unk == 6;}
inline bool isPlaying() { return state.unk == 5; }
@@ -179,6 +188,10 @@ public:
return isStopping;
}
void pause(bool param_0) {
status_.field_0x0.flags.paused = param_0;
}
/* 0x04 */ JAISoundHandle* handle_;
/* 0x08 */ JAIAudible* audible_;
/* 0x0C */ JAIAudience* audience_;
+14 -2
View File
@@ -2,10 +2,22 @@
#define JAISOUNDINFO_H
#include "dolphin/types.h"
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JASGadget.h"
struct JAISoundInfo {
struct JAISe;
struct JAISeq;
struct JAIStream;
struct JAISoundInfo : public JASGlobalInstance<JAISoundInfo> {
/* 802A2D34 */ JAISoundInfo(bool);
/* 802A2D50 */ ~JAISoundInfo();
virtual u32 getSoundType(JAISoundID) const = 0;
virtual int getCategory(JAISoundID) const = 0;
virtual u32 getPriority(JAISoundID) const = 0;
virtual void getSeInfo(JAISoundID, JAISe*) const = 0;
virtual void getSeqInfo(JAISoundID, JAISeq*) const = 0;
virtual void getStreamInfo(JAISoundID, JAIStream*) const = 0;
/* 802A2D50 */ virtual ~JAISoundInfo();
};
#endif /* JAISOUNDINFO_H */
+3 -1
View File
@@ -11,7 +11,9 @@ public:
}
JASGlobalInstance(bool param_1) {
sInstance = (T*)this;
if (param_1) {
sInstance = (T*)this;
}
}
~JASGlobalInstance() {
+8
View File
@@ -3,4 +3,12 @@
#include "dolphin/types.h"
struct JASGenericMemPool {
/* 80290848 */ JASGenericMemPool();
/* 80290860 */ ~JASGenericMemPool();
/* 802908C8 */ void newMemPool(u32, int);
/* 80290948 */ void alloc(u32);
/* 80290994 */ void free(void*, u32);
};
#endif /* JASHEAPCTRL_H */
+1 -10
View File
@@ -3,6 +3,7 @@
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JASGadget.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
struct JAISeq;
@@ -12,16 +13,6 @@ struct JAIStream;
struct JAISe;
struct JAISoundInfo : public JASGlobalInstance<JAISoundInfo> {
virtual void getSoundType(JAISoundID) const = 0;
virtual void getCategory(JAISoundID) const = 0;
virtual void getPriority(JAISoundID) const = 0;
virtual void getSeInfo(JAISoundID, JAISe*) const = 0;
virtual void getSeqInfo(JAISoundID, JAISeq*) const = 0;
virtual void getStreamInfo(JAISoundID, JAIStream*) const = 0;
virtual ~JAISoundInfo();
};
struct JAUSoundInfo : public JASGlobalInstance<JAUSoundInfo> {
virtual void getAudibleSw(JAISoundID) const = 0;
virtual void getBgmSeqResourceID(JAISoundID) const = 0;