summaryrefslogtreecommitdiff
path: root/libs/JSystem/src/JAHNodeLib/JAHSoundPlayerNode.cpp
blob: cd3fa984eb1be8ef9d7c98edbea755b2384d1d89 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include "JSystem/JAHNodeLib/JAHSoundPlayerNode.h"
#include "JSystem/JAHostIO/JAHUpdate.h"
#include "JSystem/JAHostIO/JAHioMessage.h"
#include "JSystem/JAudio2/JAISoundStarter.h"

void JAHPlayBox::onCurrentNodeFrame() {
    JAHSoundPlayerNode* master = (JAHSoundPlayerNode*)getMaster();
    if (!master)
        return;
    u8 b = master->getContMode() & 2;
    if (!b) {
        JAHUSeBox::onCurrentNodeFrame();
    } else if (unk48 != unk85) {
        if (unk48) {
            JAHUpdate::buttonOff(getMaster(), unk4C);
            JAHUpdate::buttonOn(getMaster(), unk50);
        } else {
            JAHUpdate::buttonOn(getMaster(), unk4C);
            JAHUpdate::buttonOff(getMaster(), unk50);
        }
    }

    unk85 = unk48;
}

u8 JAHSoundPlayerNode::getContMode() const {
    return unk7C;
}

JAHSoundPlayerNode::JAHSoundPlayerNode() : JAHFrameNode("SOUND PLAYER"), unk122(16) {
    unk70 = 30;
    unk74 = 60;
    unk78 = 10;
    unk7C = 0;
    unk7D = 0;
    unk7E = 1;
    unk80 = 0;
    unk84 = 0;
    unk7F = 2;
    unk120 = 0;
    appendVirNode(&unk98);
}

JAHPlayBox::JAHPlayBox() : JAHUSeBox(-1, NULL) {
    unk85 = 0;
}

void JAHSoundPlayerNode::message(JAHControl& param_1) {
    param_1.returnY(1);
    param_1.makeCheckBox("ID順に連続再生する", &unk7C, 2, false, 0);
    param_1.returnY(1);
    param_1.makeComment("--連続再生モード設定--", 0, 5, 0);
    param_1.indent(1);
    param_1.makeSlider("最大再生時間(1=0.1sec)", &unk70, 0, 60000, 0);
    param_1.makeSlider("空白時間(1=0.1sec)", &unk78, 0, 6000, 0);
    param_1.returnY(1);
    param_1.startRadioButton("ダミーデータの挙動", &unk7E, 2, 0);
    param_1.makeRadioButtonItem("スキップする", 1);
    param_1.makeRadioButtonItem("再生する", 0);
    param_1.endRadioButton();
    param_1.startRadioButton("トリガーSEまたはBGM系の挙動", &unk7D, 2, 0);
    param_1.makeRadioButtonItem("フル再生", 0);
    param_1.makeRadioButtonItem("最大再生時間以上はフェードアウト", 1);
    param_1.endRadioButton();
    param_1.returnY(1);
    param_1.makeSlider("フェードアウト時間(単位:ゲームフレーム)", &unk74, 0, 3600, 0);
}

void JAHSoundPlayerNode::onCurrentNodeFrame() {
    if (!(unk7C & 2))
        return;

    u8 attr = unk122.getAttribute(unk98.getId());

    switch (unk98.unk48) {
    case true:
        switch (unk7F) {
        case 0:
            if (!unk98.unk40) {
                unk90 = OSGetTime();
                unk84 = 0;
                unk7F = 2;
                break;
            }

            if (unk80 > unk70) {
                unk84 = 0;
                unk7F = 2;
            } else {
                JASGlobalInstance<JAISoundStarter>::getInstance()->startSound(unk98.getId(),
                                                                              &unk98.unk40, NULL);
                unk80 = OSTicksToMilliseconds(OSGetTime() - unk88) / 100;
            }

            if (unk7D == 1) {
                if (unk80 > unk70) {
                    unk98.unk40->stop(unk74);
                    unk84 = 0;
                    unk90 = OSGetTime();
                    unk7F = 1;
                } else {
                    unk80 = OSTicksToMilliseconds(OSGetTime() - unk88) / 100;
                }
            }
            break;

        case 1:
            if (!unk98.unk40) {
                unk7F = 2;
                unk90 = OSGetTime();
            }
            break;

        case 2:
            if (unk120) {
                if (unk84 <= unk78) {
                    if (unk84 < 0)
                        JASGlobalInstance<JAISoundStarter>::getInstance()->startSound(
                            unk98.getId(), &unk98.unk40, NULL);

                    unk84 = OSTicksToMilliseconds(OSGetTime() - unk90) / 100;
                    break;
                }

                u32 id = unk122.getNextId(unk98.getId(), unk7E != 0 ? true : false);
                unk98.setId(id, true, this);
            }

            JASGlobalInstance<JAISoundStarter>::getInstance()->startSound(unk98.getId(),
                                                                          &unk98.unk40, NULL);
            unk7F = 0;
            unk80 = 0;
            unk88 = OSGetTime();
            unk84 = 0;
            break;
        }
        break;

    case false:
        if (unk120) {
            unk80 = 0;
            unk84 = 0;
            unk7F = 2;
        }
        break;
    }

    unk120 = unk98.unk48;
}