mirror of
https://github.com/zeldaret/tp
synced 2026-08-10 11:14:26 -04:00
Work on JAISeMgr (#368)
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -11,7 +11,9 @@ public:
|
||||
}
|
||||
|
||||
JASGlobalInstance(bool param_1) {
|
||||
sInstance = (T*)this;
|
||||
if (param_1) {
|
||||
sInstance = (T*)this;
|
||||
}
|
||||
}
|
||||
|
||||
~JASGlobalInstance() {
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user