mirror of
https://github.com/AquaMorph/Droplets.git
synced 2025-05-17 00:06:58 +00:00
Basic menu switching
This commit is contained in:
parent
ca1d8b2188
commit
39bf2f940f
55
src/main.cpp
55
src/main.cpp
@ -6,6 +6,7 @@ int main(void) {
|
|||||||
patch.Init();
|
patch.Init();
|
||||||
sample_rate = patch.AudioSampleRate();
|
sample_rate = patch.AudioSampleRate();
|
||||||
droplet_left = GetDroplet(DropletState::kFull);
|
droplet_left = GetDroplet(DropletState::kFull);
|
||||||
|
selected_menu = left_menu;
|
||||||
patch.StartAdc();
|
patch.StartAdc();
|
||||||
patch.StartAudio(AudioThrough);
|
patch.StartAudio(AudioThrough);
|
||||||
|
|
||||||
@ -19,40 +20,64 @@ int main(void) {
|
|||||||
void ProcessControls() {
|
void ProcessControls() {
|
||||||
patch.ProcessAnalogControls();
|
patch.ProcessAnalogControls();
|
||||||
patch.encoder.Debounce();
|
patch.encoder.Debounce();
|
||||||
if (left_menu.InMenu()) {
|
// Handle menu interactions
|
||||||
left_menu.UpdateMenuPosition();
|
if (selected_menu->InMenu()) {
|
||||||
|
selected_menu->UpdateMenuPosition();
|
||||||
|
// Handle menu selection
|
||||||
if (patch.encoder.RisingEdge()) {
|
if (patch.encoder.RisingEdge()) {
|
||||||
left_menu.SetInMenu(false);
|
selected_menu->SetInMenu(false);
|
||||||
if(left_menu.GetState() == MenuState::kSplit) {
|
// Split selected
|
||||||
|
if(selected_menu->GetState() == MenuState::kSplit) {
|
||||||
manager->ToggleSplit();
|
manager->ToggleSplit();
|
||||||
|
// Enable split
|
||||||
if (manager->GetSplitMode()) {
|
if (manager->GetSplitMode()) {
|
||||||
droplet_left->UpdateState(DropletState::kLeft);
|
droplet_left->UpdateState(DropletState::kLeft);
|
||||||
droplet_right = GetDroplet(DropletState::kRight);
|
droplet_right = GetDroplet(DropletState::kRight);
|
||||||
} else {
|
}
|
||||||
|
// Disable split
|
||||||
|
else {
|
||||||
droplet_left->UpdateState(DropletState::kFull);
|
droplet_left->UpdateState(DropletState::kFull);
|
||||||
delete droplet_right;
|
delete droplet_right;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
delete droplet_left;
|
// Switch side
|
||||||
if(manager->GetSplitMode()) {
|
else if (selected_menu->GetState() == MenuState::kChange) {
|
||||||
droplet_left = GetDroplet(DropletState::kLeft);
|
if (selected_menu == left_menu) {
|
||||||
|
selected_menu = right_menu;
|
||||||
} else {
|
} else {
|
||||||
|
selected_menu = left_menu;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Enable new mode
|
||||||
|
else {
|
||||||
|
if(manager->GetSplitMode()) {
|
||||||
|
if (selected_menu == left_menu) {
|
||||||
|
delete droplet_left;
|
||||||
|
droplet_left = GetDroplet(DropletState::kLeft);
|
||||||
|
} else {
|
||||||
|
delete droplet_right;
|
||||||
|
droplet_right = GetDroplet(DropletState::kRight);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
delete droplet_left;
|
||||||
droplet_left = GetDroplet(DropletState::kFull);
|
droplet_left = GetDroplet(DropletState::kFull);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
// Check if entering menu
|
||||||
|
else {
|
||||||
if (patch.encoder.Pressed()) {
|
if (patch.encoder.Pressed()) {
|
||||||
if (patch.encoder.TimeHeldMs() > 500 &&
|
if (patch.encoder.TimeHeldMs() > 500 &&
|
||||||
patch.encoder.TimeHeldMs() < 505) {
|
patch.encoder.TimeHeldMs() < 505) {
|
||||||
left_menu.SetInMenu(true);
|
selected_menu->SetInMenu(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessOutputs() {
|
void ProcessOutputs() {
|
||||||
if(!left_menu.InMenu()) {
|
if(!selected_menu->InMenu()) {
|
||||||
droplet_left->Control();
|
droplet_left->Control();
|
||||||
if (manager->GetSplitMode()) {
|
if (manager->GetSplitMode()) {
|
||||||
droplet_right->Control();
|
droplet_right->Control();
|
||||||
@ -62,8 +87,8 @@ void ProcessOutputs() {
|
|||||||
|
|
||||||
void ProcessOled() {
|
void ProcessOled() {
|
||||||
patch.display.Fill(false);
|
patch.display.Fill(false);
|
||||||
if (left_menu.InMenu()) {
|
if (selected_menu->InMenu()) {
|
||||||
left_menu.ProcessMenuOled();
|
selected_menu->ProcessMenuOled();
|
||||||
} else {
|
} else {
|
||||||
droplet_left->Draw();
|
droplet_left->Draw();
|
||||||
if (manager->GetSplitMode()) {
|
if (manager->GetSplitMode()) {
|
||||||
@ -83,7 +108,7 @@ static void AudioThrough(AudioHandle::InputBuffer in,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Droplet* GetDroplet(DropletState state) {
|
Droplet* GetDroplet(DropletState state) {
|
||||||
switch(left_menu.GetState()) {
|
switch(selected_menu->GetState()) {
|
||||||
case MenuState::kVCO:
|
case MenuState::kVCO:
|
||||||
return new VCODroplet(&patch,
|
return new VCODroplet(&patch,
|
||||||
state,
|
state,
|
||||||
|
@ -17,8 +17,9 @@
|
|||||||
|
|
||||||
DaisyPatch patch;
|
DaisyPatch patch;
|
||||||
DropletManager* manager = new DropletManager();
|
DropletManager* manager = new DropletManager();
|
||||||
Menu left_menu(&patch, DropletState::kLeft, manager);
|
Menu* selected_menu;
|
||||||
Menu right_menu(&patch, DropletState::kRight, manager);
|
Menu* left_menu = new Menu(&patch, DropletState::kLeft, manager);
|
||||||
|
Menu* right_menu = new Menu(&patch, DropletState::kRight, manager);
|
||||||
Droplet* droplet_left;
|
Droplet* droplet_left;
|
||||||
Droplet* droplet_right;
|
Droplet* droplet_right;
|
||||||
float sample_rate;
|
float sample_rate;
|
||||||
|
@ -7,7 +7,7 @@ Menu::Menu(DaisyPatch* m_patch,
|
|||||||
state = m_state;
|
state = m_state;
|
||||||
state = m_state;
|
state = m_state;
|
||||||
}
|
}
|
||||||
const std::string MENU_ITEMS[] = {"Split",
|
const std::string MENU_ITEMS[] = {"TEST",
|
||||||
"Change",
|
"Change",
|
||||||
"VCO",
|
"VCO",
|
||||||
"Noise"};
|
"Noise"};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user