summaryrefslogtreecommitdiff
path: root/include/JSystem/JStudio/JStudio_JAudio/control.h
blob: 9f1450d7294a2d755e5bea198f681c96f33fec28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef JSTUDIO_JAUDIO_CONTROL_H
#define JSTUDIO_JAUDIO_CONTROL_H

#include "dolphin/gx/GX.h"
#include "JSystem/JStudio/JStudio/jstudio-object.h"
#include "JSystem/JStage/JSGSystem.h"

class JAIBasic;
class JAISound;
namespace JStudio_JAudio {
typedef JStudio::TObject* (*JStudioAudioCreateFunc)(const JStudio::stb::data::TParse_TBlock_object&, JAIBasic*);
typedef void (JAISound::*TVVOSoundSetFunc)(f32, u32); // e.g. JAISound::setDirectVolume, JAISound::setDirectPitch

struct TAdaptor_sound : public JStudio::TAdaptor_sound {
    struct TVVOOn_BEGIN_FADE_IN_ : public JStudio::TVariableValue::TOutput {
        void operator()(float, JStudio::TAdaptor*) const;
        virtual ~TVVOOn_BEGIN_FADE_IN_() {}
    };

    struct TVVOOn_END_FADE_OUT_ : public JStudio::TVariableValue::TOutput {
        void operator()(float, JStudio::TAdaptor*) const;
        virtual ~TVVOOn_END_FADE_OUT_() {}
    };

    struct TVVOSetValue_ : public JStudio::TVariableValue::TOutput {
        TVVOSetValue_(JStudio::TAdaptor_sound::TEVariableValue idx, TVVOSoundSetFunc func) {
            mValueIndex = idx;
            mSetFunc = func;
        }

        virtual void operator()(f32, JStudio::TAdaptor*) const;
        virtual ~TVVOSetValue_() {}

        /* 0x00 */ /* JStudio::TVariableValue::TOutput */
        /* 0x04 */ int mValueIndex;
        /* 0x08 */ TVVOSoundSetFunc mSetFunc;
    };  // Size: 0x14

    static TVVOOn_BEGIN_FADE_IN_ soVVOOn_BEGIN_FADE_IN_;
    static TVVOOn_END_FADE_OUT_ soVVOOn_END_FADE_OUT_;
    static TVVOSetValue_ saoVVOSetValue_[];

    TAdaptor_sound(JAIBasic*);

    virtual ~TAdaptor_sound();                                                               // _08
    virtual void adaptor_do_prepare(const JStudio::TObject*);                                // _0C
    virtual void adaptor_do_update(const JStudio::TObject*, u32);                            // _18
    virtual void adaptor_do_SOUND(JStudio::data::TEOperationData, const void*, u32);         // _20
    virtual void adaptor_do_LOCATED(JStudio::data::TEOperationData, const void*, u32);       // _24

    void beginSound_fadeIn_(u32);
    void endSound_fadeOut_(u32);

    /* 0x0E8 */ JAIBasic* mpBasic;
    /* 0x0EC */ JAISound* mpSound;
    /* 0x0F0 */ u32 mSoundID;
    /* 0x0F4 */ Vec* mPosition;
    /* 0x0F8 */ Vec _F8;

    // u32 _E4;
    // Vec* _E8;                        // Vector3f* in ghidra, should be Vec* or JGeometry::TVec3* surely
    // Vec _EC;                         // same as above
    // JStage::TSystem* mSystem;
    // JStage::TObject* _FC;
    // u32 _100;
    // u8 _104;
};  // Size: 0x104

struct TCreateObject : public JStudio::TCreateObject {
    TCreateObject(JAIBasic* jai)
    {
        mSound  = jai;
    }
    virtual ~TCreateObject();                                                                                // _08
    virtual bool create(JStudio::TObject** newObject, const JStudio::stb::data::TParse_TBlock_object& data); // _0C

    /* 0x00 */ /* JStudio::TCreateObject */
    /* 0x0C */ JAIBasic* mSound;
};
} // namespace JStudio_JAudio

#endif /* JSTUDIO_JAUDIO_CONTROL_H */