#include "CFrontEndUITouchBar.hpp" #include "GameGlobalObjects.hpp" #include "MP1/MP1.hpp" #include #if !__has_feature(objc_arc) #error ARC Required #endif extern "C" uint8_t START_BUTTON_2X[]; extern "C" size_t START_BUTTON_2X_SZ; static NSColor *BlueConfirm() { return [NSColor colorWithSRGBRed:0 / 255.f green:130 / 255.f blue:215 / 255.f alpha:1.f]; } static NSColor *NormalModeColor() { return [NSColor colorWithSRGBRed:0 / 255.f green:130 / 255.f blue:0 / 255.f alpha:1.f]; } static NSColor *HardModeColor() { return [NSColor redColor]; } static NSColor *FileColor(const metaforce::CFrontEndUITouchBar::SFileSelectDetail &detail) { switch (detail.state) { case metaforce::CFrontEndUITouchBar::EFileState::New: return [NSColor darkGrayColor]; case metaforce::CFrontEndUITouchBar::EFileState::Normal: return NormalModeColor(); case metaforce::CFrontEndUITouchBar::EFileState::Hard: return HardModeColor(); } } @interface FrontEndUITouchBarPressStart : NSObject { @public BOOL _startPressed; } - (IBAction)onPressStart:(id)sender; @end @implementation FrontEndUITouchBarPressStart - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"pressStartGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"pressStartGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"pressStartGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"pressStart" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"pressStart"]) { NSData *imgData = [NSData dataWithBytesNoCopy:START_BUTTON_2X length:START_BUTTON_2X_SZ freeWhenDone:NO]; NSImage *img = [[NSImage alloc] initWithData:imgData]; NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Start" image:img target:self action:@selector(onPressStart:)]; button.imageHugsTitle = YES; item.view = button; return item; } return nil; } - (IBAction)onPressStart:(id)sender { _startPressed = YES; } @end @interface FrontEndUITouchBarProceedBack : NSObject { @public metaforce::CFrontEndUITouchBar::EAction _action; } - (IBAction)onBack:(id)sender; - (IBAction)onProceed:(id)sender; @end @implementation FrontEndUITouchBarProceedBack - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"proceedBackGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"proceedBackGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"proceedBackGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"back", @"proceed" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"back"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarGoBackTemplate] target:self action:@selector(onBack:)]; item.view = button; return item; } else if ([identifier isEqualToString:@"proceed"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarGoForwardTemplate] target:self action:@selector(onProceed:)]; item.view = button; return item; } return nil; } - (IBAction)onBack:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Back; } - (IBAction)onProceed:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Confirm; } @end @interface FrontEndUITouchBarStartOptions : NSObject { @public metaforce::CFrontEndUITouchBar::EAction _action; BOOL _normalBeat; } - (IBAction)onStart:(id)sender; - (IBAction)onNormal:(id)sender; - (IBAction)onHard:(id)sender; - (IBAction)onOptions:(id)sender; - (IBAction)onCancel:(id)sender; @end @implementation FrontEndUITouchBarStartOptions - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"startOptionsGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"startOptionsGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"startOptionsGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = _normalBeat ? @[ @"cancel", @"normal", @"hard", @"options" ] : @[ @"cancel", @"start", @"options" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"start"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Start" target:self action:@selector(onStart:)]; button.bezelColor = BlueConfirm(); item.view = button; return item; } else if ([identifier isEqualToString:@"normal"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Normal Mode" target:self action:@selector(onNormal:)]; button.bezelColor = NormalModeColor(); item.view = button; return item; } else if ([identifier isEqualToString:@"hard"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Hard Mode" target:self action:@selector(onHard:)]; button.bezelColor = HardModeColor(); item.view = button; return item; } else if ([identifier isEqualToString:@"options"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Options" target:self action:@selector(onOptions:)]; item.view = button; return item; } else if ([identifier isEqualToString:@"cancel"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarGoBackTemplate] target:self action:@selector(onCancel:)]; item.view = button; return item; } return nil; } - (IBAction)onStart:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Start; } - (IBAction)onNormal:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Normal; } - (IBAction)onHard:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Hard; } - (IBAction)onOptions:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Options; } - (IBAction)onCancel:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Back; } @end @interface FrontEndUITouchBarEraseBack : NSObject { @public metaforce::CFrontEndUITouchBar::EAction _action; } - (IBAction)onCancel:(id)sender; - (IBAction)onErase:(id)sender; @end @implementation FrontEndUITouchBarEraseBack - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"eraseBackGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"eraseBackGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"eraseBackGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"cancel", @"erase" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"cancel"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Cancel" target:self action:@selector(onCancel:)]; item.view = button; return item; } else if ([identifier isEqualToString:@"erase"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Erase" target:self action:@selector(onErase:)]; button.bezelColor = [NSColor redColor]; item.view = button; return item; } return nil; } - (IBAction)onCancel:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Back; } - (IBAction)onErase:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Confirm; } @end static NSString *GetFileSelectTitle(const metaforce::CFrontEndUITouchBar::SFileSelectDetail &detail, char letter) { switch (detail.state) { case metaforce::CFrontEndUITouchBar::EFileState::New: return [NSString stringWithFormat:@"[New Game %c]", letter]; case metaforce::CFrontEndUITouchBar::EFileState::Normal: return [NSString stringWithFormat:@"[Samus %c] %d%%", letter, detail.percent]; case metaforce::CFrontEndUITouchBar::EFileState::Hard: return [NSString stringWithFormat:@"[Hard %c] %d%%", letter, detail.percent]; } return @""; } @interface FrontEndUITouchBarFileSelect : NSObject { @public metaforce::CFrontEndUITouchBar::SFileSelectDetail _details[3]; metaforce::CFrontEndUITouchBar::EAction _action; BOOL _eraseGame; BOOL _galleryActive; } - (IBAction)onFileA:(id)sender; - (IBAction)onFileB:(id)sender; - (IBAction)onFileC:(id)sender; - (IBAction)onErase:(id)sender; - (IBAction)onFusionBonus:(id)sender; - (IBAction)onImageGallery:(id)sender; @end @implementation FrontEndUITouchBarFileSelect - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"fileSelectGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"fileSelectGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"fileSelectGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"fileA", @"fileB", @"fileC", @"erase", @"fusionBonus", @"imageGallery" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"fileA"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:GetFileSelectTitle(_details[0], 'A') target:self action:@selector(onFileA:)]; button.bezelColor = FileColor(_details[0]); button.enabled = !_eraseGame || _details[0].state != metaforce::CFrontEndUITouchBar::EFileState::New; item.view = button; return item; } else if ([identifier isEqualToString:@"fileB"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:GetFileSelectTitle(_details[1], 'B') target:self action:@selector(onFileB:)]; button.bezelColor = FileColor(_details[1]); button.enabled = !_eraseGame || _details[1].state != metaforce::CFrontEndUITouchBar::EFileState::New; item.view = button; return item; } else if ([identifier isEqualToString:@"fileC"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:GetFileSelectTitle(_details[2], 'C') target:self action:@selector(onFileC:)]; button.bezelColor = FileColor(_details[2]); button.enabled = !_eraseGame || _details[2].state != metaforce::CFrontEndUITouchBar::EFileState::New; item.view = button; return item; } else if ([identifier isEqualToString:@"erase"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; if (!_eraseGame) { NSButton *button = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarDeleteTemplate] target:self action:@selector(onErase:)]; bool hasSave = false; for (int i = 0; i < 3; ++i) if (_details[i].state != metaforce::CFrontEndUITouchBar::EFileState::New) { hasSave = true; break; } button.enabled = hasSave; item.view = button; } else { NSButton *button = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarGoBackTemplate] target:self action:@selector(onErase:)]; item.view = button; } return item; } else if ([identifier isEqualToString:@"fusionBonus"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Bonuses" target:self action:@selector(onFusionBonus:)]; button.enabled = !_eraseGame; item.view = button; return item; } else if ([identifier isEqualToString:@"imageGallery"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Gallery" target:self action:@selector(onImageGallery:)]; button.enabled = !_eraseGame && _galleryActive; item.view = button; return item; } return nil; } - (IBAction)onFileA:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::FileA; } - (IBAction)onFileB:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::FileB; } - (IBAction)onFileC:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::FileC; } - (IBAction)onErase:(id)sender { if (!_eraseGame) _action = metaforce::CFrontEndUITouchBar::EAction::Erase; else _action = metaforce::CFrontEndUITouchBar::EAction::Back; } - (IBAction)onFusionBonus:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::FusionBonus; } - (IBAction)onImageGallery:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::ImageGallery; } @end @interface FrontEndUITouchBarNoCardSelect : NSObject { @public metaforce::CFrontEndUITouchBar::EAction _action; BOOL _galleryActive; } - (IBAction)onStart:(id)sender; - (IBAction)onOptions:(id)sender; - (IBAction)onFusionBonus:(id)sender; - (IBAction)onImageGallery:(id)sender; @end @implementation FrontEndUITouchBarNoCardSelect - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"noCardSelectGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"noCardSelectGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"noCardSelectGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"start", @"fusionBonus", @"options", @"imageGallery" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"start"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Start" target:self action:@selector(onStart:)]; button.bezelColor = BlueConfirm(); item.view = button; return item; } else if ([identifier isEqualToString:@"options"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Options" target:self action:@selector(onOptions:)]; item.view = button; return item; } else if ([identifier isEqualToString:@"fusionBonus"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Fusion Bonuses" target:self action:@selector(onFusionBonus:)]; item.view = button; return item; } else if ([identifier isEqualToString:@"imageGallery"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Image Gallery" target:self action:@selector(onImageGallery:)]; button.enabled = _galleryActive; item.view = button; return item; } return nil; } - (IBAction)onStart:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Start; } - (IBAction)onOptions:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Options; } - (IBAction)onFusionBonus:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::FusionBonus; } - (IBAction)onImageGallery:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::ImageGallery; } @end @interface FrontEndUITouchBarFusionBonus : NSObject { @public metaforce::CFrontEndUITouchBar::EAction _action; BOOL _fusionSuitActive; } - (IBAction)onNESMetroid:(id)sender; - (IBAction)onFusionSuit:(id)sender; - (IBAction)onBack:(id)sender; @end @implementation FrontEndUITouchBarFusionBonus - (NSTouchBar *)makeTouchBar { NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"fusionBonusGroup" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; touchBar.principalItemIdentifier = @"fusionBonusGroup"; return touchBar; } - (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { if ([identifier isEqualToString:@"fusionBonusGroup"]) { NSGroupTouchBarItem *item = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier]; NSTouchBar *touchBar = [NSTouchBar new]; touchBar.delegate = self; id items = @[ @"back", @"NESMetroid", @"fusionSuit" ]; touchBar.customizationRequiredItemIdentifiers = items; touchBar.defaultItemIdentifiers = items; item.groupTouchBar = touchBar; return item; } else if ([identifier isEqualToString:@"NESMetroid"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Play NES Metroid" target:self action:@selector(onNESMetroid:)]; item.view = button; return item; } else if ([identifier isEqualToString:@"fusionSuit"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithTitle:@"Fusion Suit" target:self action:@selector(onFusionSuit:)]; if (_fusionSuitActive) button.bezelColor = BlueConfirm(); item.view = button; return item; } else if ([identifier isEqualToString:@"back"]) { NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; NSButton *button = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarGoBackTemplate] target:self action:@selector(onBack:)]; item.view = button; return item; } return nil; } - (IBAction)onNESMetroid:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::NESMetroid; } - (IBAction)onFusionSuit:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::FusionSuit; } - (IBAction)onBack:(id)sender { _action = metaforce::CFrontEndUITouchBar::EAction::Back; } @end namespace metaforce { class CFrontEndUITouchBarMac : public CFrontEndUITouchBar { FrontEndUITouchBarPressStart *m_pressStartBar; FrontEndUITouchBarProceedBack *m_proceedBackBar; FrontEndUITouchBarStartOptions *m_startOptions; FrontEndUITouchBarEraseBack *m_eraseBack; FrontEndUITouchBarFileSelect *m_fileSelectBar; FrontEndUITouchBarNoCardSelect *m_noCardSelectBar; FrontEndUITouchBarFusionBonus *m_fusionBonusBar; void Activate() { id provider = nil; switch (m_phase) { case EPhase::PressStart: provider = m_pressStartBar; break; case EPhase::ProceedBack: provider = m_proceedBackBar; break; case EPhase::StartOptions: provider = m_startOptions; break; case EPhase::EraseBack: provider = m_eraseBack; break; case EPhase::FileSelect: provider = m_fileSelectBar; break; case EPhase::NoCardSelect: provider = m_noCardSelectBar; break; case EPhase::FusionBonus: provider = m_fusionBonusBar; break; default: break; } g_Main->GetMainWindow()->setTouchBarProvider((__bridge_retained void *)provider); } public: CFrontEndUITouchBarMac() { m_pressStartBar = [FrontEndUITouchBarPressStart new]; m_proceedBackBar = [FrontEndUITouchBarProceedBack new]; m_startOptions = [FrontEndUITouchBarStartOptions new]; m_eraseBack = [FrontEndUITouchBarEraseBack new]; m_fileSelectBar = [FrontEndUITouchBarFileSelect new]; m_noCardSelectBar = [FrontEndUITouchBarNoCardSelect new]; m_fusionBonusBar = [FrontEndUITouchBarFusionBonus new]; } void SetPhase(EPhase ph) { m_phase = ph; Activate(); } EPhase GetPhase() { return m_phase; } void SetFileSelectPhase(const SFileSelectDetail details[3], bool eraseGame, bool galleryActive) { m_fileSelectBar->_details[0] = details[0]; m_fileSelectBar->_details[1] = details[1]; m_fileSelectBar->_details[2] = details[2]; m_fileSelectBar->_eraseGame = eraseGame; m_fileSelectBar->_galleryActive = galleryActive; m_phase = EPhase::FileSelect; Activate(); } void SetNoCardSelectPhase(bool galleryActive) { m_noCardSelectBar->_galleryActive = galleryActive; m_phase = EPhase::NoCardSelect; Activate(); } void SetFusionBonusPhase(bool fusionSuitActive) { m_fusionBonusBar->_fusionSuitActive = fusionSuitActive; m_phase = EPhase::FusionBonus; Activate(); } void SetStartOptionsPhase(bool normalBeat) { m_startOptions->_normalBeat = normalBeat; m_phase = EPhase::StartOptions; Activate(); } EAction PopAction() { switch (m_phase) { case EPhase::PressStart: if (m_pressStartBar->_startPressed) { m_pressStartBar->_startPressed = NO; return EAction::Start; } break; case EPhase::ProceedBack: if (m_proceedBackBar->_action != EAction::None) { EAction action = m_proceedBackBar->_action; m_proceedBackBar->_action = EAction::None; return action; } break; case EPhase::StartOptions: if (m_startOptions->_action != EAction::None) { EAction action = m_startOptions->_action; m_startOptions->_action = EAction::None; return action; } break; case EPhase::EraseBack: if (m_eraseBack->_action != EAction::None) { EAction action = m_eraseBack->_action; m_eraseBack->_action = EAction::None; return action; } break; case EPhase::FileSelect: if (m_fileSelectBar->_action != EAction::None) { EAction action = m_fileSelectBar->_action; m_fileSelectBar->_action = EAction::None; return action; } break; case EPhase::NoCardSelect: if (m_noCardSelectBar->_action != EAction::None) { EAction action = m_noCardSelectBar->_action; m_noCardSelectBar->_action = EAction::None; return action; } break; case EPhase::FusionBonus: if (m_fusionBonusBar->_action != EAction::None) { EAction action = m_fusionBonusBar->_action; m_fusionBonusBar->_action = EAction::None; return action; } break; default: break; } return EAction::None; } }; std::unique_ptr NewFrontEndUITouchBar() { return std::make_unique(); } }