This repository has been archived by the owner on Nov 6, 2022. It is now read-only.
forked from sknjpn/SyLife
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGUIMusicBox.h
90 lines (73 loc) · 2.5 KB
/
GUIMusicBox.h
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
#pragma once
#include "EasyViewer.h"
#include "GUIButton.h"
#include "GUIIcon.h"
#include "GUIValuer.h"
#include "HiddenViewer.h"
class GUIMusicBox : public HiddenViewer {
bool m_loadComplate = false;
String m_assetName;
double m_volume;
bool m_isEnabled = true;
bool m_isLoop = true;
void onClicked() {
if (m_isEnabled) {
getChildViewer<GUIButton>()->getChildViewer<GUIIcon>()->setIcon(0xf6a9);
getChildViewer<GUIValuer>()->setValue(0.0);
AudioAsset(m_assetName).setVolume(0.0);
} else {
getChildViewer<GUIButton>()->getChildViewer<GUIIcon>()->setIcon(0xf028);
getChildViewer<GUIValuer>()->setValue(m_volume);
AudioAsset(m_assetName).setVolume(m_volume);
}
m_isEnabled = !m_isEnabled;
}
public:
GUIMusicBox(const String& assetName, bool isLoop = true)
: m_assetName(assetName)
, m_isLoop(isLoop) {
m_volume = GeneralSetting::GetInstance().m_musicVolume;
}
void init() override {
setFirstPosInLocal(20, 20);
setSecondPosInLocal(-60, 20);
setViewerSize(60, 75);
addChildViewer<GUIButton>([this]() { onClicked(); })
->setViewerRectInLocal(5, 5, 50, 50)
->addChildViewer<GUIIcon>(0xf028);
addChildViewer<GUIValuer>(m_volume)
->setViewerRectInLocal(5, 60, 50, 10);
}
bool isPlaying() const { return AudioAsset(m_assetName).isPlaying(); }
void setMusic(const String& assetName) {
m_assetName = assetName;
m_loadComplate = false;
}
void update() override {
HiddenViewer::update();
if (!m_loadComplate && AudioAsset::IsReady(m_assetName)) {
m_loadComplate = true;
AudioAsset(m_assetName).setVolume(m_volume);
AudioAsset(m_assetName).setLoop(m_isLoop);
AudioAsset(m_assetName).play();
}
RectF(getViewerSize()).rounded(5).draw(Palette::White).drawFrame(1.0, 0.0, Palette::Black);
if (m_isEnabled) {
AudioAsset(m_assetName).setVolume(m_volume);
if (m_volume != getChildViewer<GUIValuer>()->getValue()) {
m_volume = getChildViewer<GUIValuer>()->getValue();
GeneralSetting::GetInstance().m_musicVolume = m_volume;
if (m_volume > 0.5)
getChildViewer<GUIButton>()->getChildViewer<GUIIcon>()->setIcon(0xf028);
else
getChildViewer<GUIButton>()->getChildViewer<GUIIcon>()->setIcon(0xf027);
}
} else {
AudioAsset(m_assetName).setVolume(0.0);
getChildViewer<GUIValuer>()->setValue(0.0);
}
}
void onDestroy() override {
AudioAsset(m_assetName).stop();
}
};