summary refs log tree commit diff stats
path: root/src/muxer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/muxer.cpp')
-rw-r--r--src/muxer.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/muxer.cpp b/src/muxer.cpp new file mode 100644 index 0000000..5b09ef8 --- /dev/null +++ b/src/muxer.cpp
@@ -0,0 +1,70 @@
1#include "muxer.h"
2#include <iostream>
3#include <fmod_errors.h>
4
5void ERRCHECK_fn(FMOD_RESULT result, const char* file, int line) {
6 if (result != FMOD_OK) {
7 std::cout << file << "(" << line << "): FMOD error " << result << " - " << FMOD_ErrorString(result);
8 abort();
9 }
10}
11
12#define ERRCHECK(_result) ERRCHECK_fn(_result, __FILE__, __LINE__)
13
14Muxer::Muxer() {
15 FMOD::Studio::System* system_holder = nullptr;
16 ERRCHECK(FMOD::Studio::System::create(&system_holder));
17 system_.reset(system_holder);
18
19 FMOD::System* coreSystem = nullptr;
20 ERRCHECK(system_->getCoreSystem(&coreSystem));
21 ERRCHECK(coreSystem->setSoftwareFormat(0, FMOD_SPEAKERMODE_5POINT1, 0));
22 ERRCHECK(system_->initialize(1024, FMOD_STUDIO_INIT_NORMAL, FMOD_INIT_NORMAL, nullptr));
23
24 FMOD::Studio::Bank* masterBank = nullptr;
25 ERRCHECK(system_->loadBankFile("../res/fmod/Build/Desktop/Master Bank.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &masterBank));
26
27 FMOD::Studio::Bank* stringsBank = nullptr;
28 ERRCHECK(system_->loadBankFile("../res/fmod/Build/Desktop/Master Bank.strings.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank));
29
30 FMOD::Studio::EventDescription* exploration_desc = nullptr;
31 ERRCHECK(system_->getEvent("event:/exploration", &exploration_desc));
32 ERRCHECK(exploration_desc->createInstance(&exploration_event_));
33 ERRCHECK(exploration_event_->start());
34}
35
36void Muxer::setPlayerLoc(int x, int y) {
37 FMOD_3D_ATTRIBUTES attributes = {{0}};
38 attributes.forward.z = 1.0f;
39 attributes.up.y = 1.0f;
40 attributes.position.x = x;
41 attributes.position.y = y;
42 ERRCHECK(system_->setListenerAttributes(0, &attributes));
43}
44
45void Muxer::playSoundAtPosition(std::string name, float x, float y) {
46 std::string eventPath = std::string("event:/") + name;
47
48 FMOD::Studio::EventDescription* eventDescription = nullptr;
49 ERRCHECK(system_->getEvent(eventPath.c_str(), &eventDescription));
50
51 FMOD::Studio::EventInstance* eventInstance = nullptr;
52 ERRCHECK(eventDescription->createInstance(&eventInstance));
53
54 FMOD_3D_ATTRIBUTES attributes = {{0}};
55 attributes.forward.z = 1.0f;
56 attributes.up.y = 1.0f;
57 attributes.position.x = x;
58 attributes.position.y = y;
59 ERRCHECK(eventInstance->set3DAttributes(&attributes));
60 ERRCHECK(eventInstance->start());
61 ERRCHECK(eventInstance->release());
62}
63
64void Muxer::setMusicLevel(int level) {
65 ERRCHECK(exploration_event_->setParameterByName("level", level));
66}
67
68void Muxer::update() {
69 ERRCHECK(system_->update());
70}