From fda714d631fb78eab53cc6ae80721622c70fc490 Mon Sep 17 00:00:00 2001 From: Christian Colglazier Date: Wed, 30 Sep 2020 21:28:34 -0400 Subject: [PATCH] Outline for droplet manager --- src/droplets/droplet_manager.cpp | 9 +++++++++ src/droplets/droplet_manager.h | 22 ++++++++++++++++++++++ src/main.cpp | 12 ++++++------ src/main.h | 7 ++++--- src/menu.cpp | 6 +++--- src/menu.h | 5 +++-- 6 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 src/droplets/droplet_manager.cpp create mode 100644 src/droplets/droplet_manager.h diff --git a/src/droplets/droplet_manager.cpp b/src/droplets/droplet_manager.cpp new file mode 100644 index 0000000..5f3b475 --- /dev/null +++ b/src/droplets/droplet_manager.cpp @@ -0,0 +1,9 @@ +#include "droplet_manager.h" + +void DropletManager::ToggleSplit() { + split = !split; +} + +bool DropletManager::GetSplitMode() { + return split; +} diff --git a/src/droplets/droplet_manager.h b/src/droplets/droplet_manager.h new file mode 100644 index 0000000..2b05b5f --- /dev/null +++ b/src/droplets/droplet_manager.h @@ -0,0 +1,22 @@ +#pragma once + +#ifndef CASCADE_DROPLETS_DROPLET_MANAGER_H_ +#define CASCADE_DROPLETS_DROPLET_MANAGER_H_ + +class DropletManager { +private: + bool split = false; +public: + /* + * Toggle droplet split mode. + */ + void ToggleSplit(); + + /* + * Droplet split mode. + */ + bool GetSplitMode(); +}; + +#endif // CASCADE_DROPLETS_DROPLET_MANAGER_H_ + diff --git a/src/main.cpp b/src/main.cpp index 7196779..b70f726 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,8 +24,8 @@ void ProcessControls() { if (patch.encoder.RisingEdge()) { left_menu.SetInMenu(false); if(left_menu.GetState() == MenuState::kSplit) { - split = !split; - if (split) { + state->ToggleSplit(); + if (state->GetSplitMode()) { droplet_left->UpdateState(DropletState::kLeft); droplet_right = GetDroplet(DropletState::kRight); } else { @@ -34,7 +34,7 @@ void ProcessControls() { } } else { delete droplet_left; - if(split) { + if(state->GetSplitMode()) { droplet_left = GetDroplet(DropletState::kLeft); } else { droplet_left = GetDroplet(DropletState::kFull); @@ -54,7 +54,7 @@ void ProcessControls() { void ProcessOutputs() { if(!left_menu.InMenu()) { droplet_left->Control(); - if (split) { + if (state->GetSplitMode()) { droplet_right->Control(); } } @@ -66,7 +66,7 @@ void ProcessOled() { left_menu.ProcessMenuOled(); } else { droplet_left->Draw(); - if (split) { + if (state->GetSplitMode()) { droplet_right->Draw(); } } @@ -77,7 +77,7 @@ static void AudioThrough(float **in, float **out, size_t size) { droplet_left->Process(in, out, size); - if (split) { + if (state->GetSplitMode()) { droplet_right->Process(in, out, size); } } diff --git a/src/main.h b/src/main.h index 02d6de4..8e58a21 100644 --- a/src/main.h +++ b/src/main.h @@ -11,13 +11,14 @@ #include "util.h" #include "menu.h" #include "droplets/droplet.h" +#include "droplets/droplet_manager.h" #include "droplets/noise_droplet.h" #include "droplets/vco_droplet.h" DaisyPatch patch; -bool split = false; -Menu left_menu(&patch, "Right", &split); -Menu right_menu(&patch, "Left", &split); +DropletManager* state = new DropletManager(); +Menu left_menu(&patch, "Right", state); +Menu right_menu(&patch, "Left", state); Droplet* droplet_left; Droplet* droplet_right; float sample_rate; diff --git a/src/menu.cpp b/src/menu.cpp index 017308b..642ad91 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -2,10 +2,10 @@ Menu::Menu(DaisyPatch* m_patch, std::string m_name, - bool* m_split) { + DropletManager* m_state) { patch = m_patch; name = m_name; - split = m_split; + state = m_state; } const std::string MENU_ITEMS[] = {"Split", "Change", @@ -38,7 +38,7 @@ std::string Menu::FilterMenuText(int position) { if (position >= MENU_SIZE || position < 0) { return ""; } else { - if (ConvertState(position) == MenuState::kSplit && *split) { + if (ConvertState(position) == MenuState::kSplit && (*state).GetSplitMode()) { return "Merge"; } else if (ConvertState(position) == MenuState::kChange) { return name; diff --git a/src/menu.h b/src/menu.h index 1287634..4b6088b 100644 --- a/src/menu.h +++ b/src/menu.h @@ -5,6 +5,7 @@ #include "daisy_patch.h" #include "util.h" +#include "droplets/droplet_manager.h" #include @@ -15,7 +16,7 @@ enum class MenuState {kSplit, kChange, kVCO, kNoise}; class Menu { private: DaisyPatch* patch; - bool* split; + DropletManager* state; std::string name; /* @@ -33,7 +34,7 @@ class Menu { * @param m_name name of the menu * @param m_split one or two droplets */ - Menu(DaisyPatch* m_patch, std::string m_name, bool* m_split); + Menu(DaisyPatch* m_patch, std::string m_name, DropletManager* m_state); /* * Gives if the user is currently in the menu.