Skip to content

Commit

Permalink
Add AutomationEventList (#267)
Browse files Browse the repository at this point in the history
  • Loading branch information
RobLoach authored Dec 31, 2023
1 parent ff5bd5b commit 27b6b12
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 0 deletions.
1 change: 1 addition & 0 deletions clib.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"src": [
"include/AudioDevice.hpp",
"include/AudioStream.hpp",
"include/AutomationEventList.hpp",
"include/BoundingBox.hpp",
"include/Camera2D.hpp",
"include/Camera3D.hpp",
Expand Down
136 changes: 136 additions & 0 deletions include/AutomationEventList.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
#ifndef RAYLIB_CPP_INCLUDE_AUTOMATIONEVENTLIST_HPP_
#define RAYLIB_CPP_INCLUDE_AUTOMATIONEVENTLIST_HPP_

#include "./raylib.hpp"
#include "./raylib-cpp-utils.hpp"
#include "./RaylibException.hpp"

namespace raylib {
/**
* AutomationEventList management functions
*/
class AutomationEventList : public ::AutomationEventList {
public:
AutomationEventList(const ::AutomationEventList& automationEventList) {
set(automationEventList);
}

AutomationEventList(unsigned int capacity = 16384,
unsigned int count = 0,
AutomationEvent *events = nullptr) : ::AutomationEventList{capacity, count, events} {
// Nothing.
}

AutomationEventList(const char* fileName) {
Load(fileName);
}

AutomationEventList(const AutomationEventList&) = delete;

AutomationEventList(AutomationEventList&& other) {
set(other);

other.capacity = 0;
other.count = 0;
other.events = nullptr;
}

~AutomationEventList() {
Unload();
}

GETTERSETTER(unsigned int, Capacity, capacity)
GETTERSETTER(unsigned int, Count, count)
GETTERSETTER(AutomationEvent*, Events, events)

AutomationEventList& operator=(const ::AutomationEventList& other) {
set(other);
return *this;
}

AutomationEventList& operator=(const AutomationEventList&) = delete;

AutomationEventList& operator=(AutomationEventList&& other) noexcept {
if (this == &other) {
return *this;
}

Unload();
set(other);

other.capacity = 0;
other.count = 0;
other.events = nullptr;

return *this;
}

/**
* Load audio stream (to stream raw audio pcm data)
*
* @throws raylib::RaylibException Throws if the AutomationEventList failed to load.
*/
void Load(const char* fileName) {
Unload();
set(::LoadAutomationEventList(fileName));
if (!IsReady()) {
throw RaylibException("Failed to load automation event list");
}
}

/**
* Update audio stream buffers with data
*/
inline AutomationEventList& Unload() {
::UnloadAutomationEventList(this);
return *this;
}

inline bool IsReady() {
return events != nullptr;
}

inline bool Export(const char* fileName) {
return ::ExportAutomationEventList(*this, fileName);
}

inline void Set() {
::SetAutomationEventList(this);
}

inline void SetBaseFrame(int frame) {
Set();
::SetAutomationEventBaseFrame(frame);
}

inline void StartRecording() {
Set();
::StartAutomationEventRecording();
}

inline void StopRecording() {
Set();
::StopAutomationEventRecording();
}

inline void Play(int index) {
if (index < 0 || index >= this->count) {
return;
}

Set();
::PlayAutomationEvent(this->events[index]);
}

protected:
void set(const ::AutomationEventList& other) {
capacity = other.capacity;
count = other.count;
events = other.events;
}
};
} // namespace raylib

using RAutomationEventList = raylib::AutomationEventList;

#endif // RAYLIB_CPP_INCLUDE_AUTOMATIONEVENTLIST_HPP_
1 change: 1 addition & 0 deletions include/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ target_include_directories(raylib_cpp INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/)
install(FILES
AudioDevice.hpp
AudioStream.hpp
AutomationEventList.hpp
BoundingBox.hpp
Camera2D.hpp
Camera3D.hpp
Expand Down
1 change: 1 addition & 0 deletions include/raylib-cpp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@

#include "./AudioDevice.hpp"
#include "./AudioStream.hpp"
#include "./AutomationEventList.hpp"
#include "./BoundingBox.hpp"
#include "./Camera2D.hpp"
#include "./Camera3D.hpp"
Expand Down

0 comments on commit 27b6b12

Please sign in to comment.