mirror of https://github.com/AxioDL/metaforce.git
Implement key FrontEnd Touch Bar functionality
This commit is contained in:
parent
8a5e0ec775
commit
3f03ba7950
|
@ -80,7 +80,7 @@ void ViewManager::BuildTestPART(urde::IObjectStore& objStore)
|
||||||
|
|
||||||
void ViewManager::InitMP1(MP1::CMain& main)
|
void ViewManager::InitMP1(MP1::CMain& main)
|
||||||
{
|
{
|
||||||
main.Init(m_fileStoreManager, m_voiceEngine.get(), *m_amuseAllocWrapper);
|
main.Init(m_fileStoreManager, m_mainWindow.get(), m_voiceEngine.get(), *m_amuseAllocWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ViewManager::TestGameView::resized(const boo::SWindowRect& root, const boo::SWindowRect& sub)
|
void ViewManager::TestGameView::resized(const boo::SWindowRect& root, const boo::SWindowRect& sub)
|
||||||
|
@ -363,14 +363,6 @@ void ViewManager::init(boo::IApplication* app)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
CGraphics::InitializeBoo(gf, m_mainWindow->getCommandQueue(), root->renderTex());
|
|
||||||
CModelShaders::Initialize(m_fileStoreManager, gf);
|
|
||||||
CElementGen::Initialize();
|
|
||||||
CMoviePlayer::Initialize();
|
|
||||||
CLineRenderer::Initialize();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ViewManager::proc()
|
bool ViewManager::proc()
|
||||||
|
|
|
@ -39,6 +39,13 @@ add_subdirectory(MP1)
|
||||||
add_subdirectory(MP2)
|
add_subdirectory(MP2)
|
||||||
add_subdirectory(MP3)
|
add_subdirectory(MP3)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set_source_files_properties(MP1/CFrontEndUITouchBarMac.mm
|
||||||
|
PROPERTIES COMPILE_FLAGS -fobjc-arc)
|
||||||
|
bintoc(startButton.c Resources/startButton@2x.png START_BUTTON_2X)
|
||||||
|
list(APPEND PLAT_SRCS startButton.c)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_library(RuntimeCommon
|
add_library(RuntimeCommon
|
||||||
RetroTypes.hpp RetroTypes.cpp
|
RetroTypes.hpp RetroTypes.cpp
|
||||||
${CLIENT_SOURCES}
|
${CLIENT_SOURCES}
|
||||||
|
|
|
@ -34,11 +34,13 @@ class IMain
|
||||||
public:
|
public:
|
||||||
virtual ~IMain() = default;
|
virtual ~IMain() = default;
|
||||||
virtual void Init(const hecl::Runtime::FileStoreManager& storeMgr,
|
virtual void Init(const hecl::Runtime::FileStoreManager& storeMgr,
|
||||||
boo::IAudioVoiceEngine* voiceEngine,
|
boo::IWindow* window,
|
||||||
amuse::IBackendVoiceAllocator& backend)=0;
|
boo::IAudioVoiceEngine* voiceEngine,
|
||||||
|
amuse::IBackendVoiceAllocator& backend)=0;
|
||||||
virtual void Draw()=0;
|
virtual void Draw()=0;
|
||||||
virtual bool Proc()=0;
|
virtual bool Proc()=0;
|
||||||
virtual void Shutdown()=0;
|
virtual void Shutdown()=0;
|
||||||
|
virtual boo::IWindow* GetMainWindow() const=0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,8 +74,8 @@ void CFrontEndUI::PlayAdvanceSfx()
|
||||||
CSfxManager::SfxStart(1091, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
CSfxManager::SfxStart(1091, 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||||
}
|
}
|
||||||
|
|
||||||
CFrontEndUI::SNewFileSelectFrame::SNewFileSelectFrame(CSaveUI* sui, u32 rnd)
|
CFrontEndUI::SNewFileSelectFrame::SNewFileSelectFrame(CSaveUI* sui, u32 rnd, CFrontEndUITouchBar& touchBar)
|
||||||
: x0_rnd(rnd), x4_saveUI(sui)
|
: x0_rnd(rnd), x4_saveUI(sui), m_touchBar(touchBar)
|
||||||
{
|
{
|
||||||
x10_frme = g_SimplePool->GetObj("FRME_NewFileSelect");
|
x10_frme = g_SimplePool->GetObj("FRME_NewFileSelect");
|
||||||
}
|
}
|
||||||
|
@ -182,7 +182,7 @@ void CFrontEndUI::SNewFileSelectFrame::Update(float dt)
|
||||||
}
|
}
|
||||||
|
|
||||||
CFrontEndUI::SNewFileSelectFrame::EAction
|
CFrontEndUI::SNewFileSelectFrame::EAction
|
||||||
CFrontEndUI::SNewFileSelectFrame::ProcessUserInput(const CFinalInput& input)
|
CFrontEndUI::SNewFileSelectFrame::ProcessUserInput(const CFinalInput& input, CFrontEndUITouchBar::EAction tbAction)
|
||||||
{
|
{
|
||||||
xc_action = EAction::None;
|
xc_action = EAction::None;
|
||||||
|
|
||||||
|
@ -196,7 +196,28 @@ CFrontEndUI::SNewFileSelectFrame::ProcessUserInput(const CFinalInput& input)
|
||||||
return xc_action;
|
return xc_action;
|
||||||
|
|
||||||
if (x10c_saveReady)
|
if (x10c_saveReady)
|
||||||
|
{
|
||||||
x1c_loadedFrame->ProcessUserInput(input);
|
x1c_loadedFrame->ProcessUserInput(input);
|
||||||
|
if (tbAction >= CFrontEndUITouchBar::EAction::FileA &&
|
||||||
|
tbAction <= CFrontEndUITouchBar::EAction::ImageGallery)
|
||||||
|
{
|
||||||
|
switch (tbAction)
|
||||||
|
{
|
||||||
|
case CFrontEndUITouchBar::EAction::FileA:
|
||||||
|
case CFrontEndUITouchBar::EAction::FileB:
|
||||||
|
case CFrontEndUITouchBar::EAction::FileC:
|
||||||
|
x20_tablegroup_fileselect->SetUserSelection(int(tbAction) - int(CFrontEndUITouchBar::EAction::FileA));
|
||||||
|
break;
|
||||||
|
case CFrontEndUITouchBar::EAction::FusionBonus:
|
||||||
|
case CFrontEndUITouchBar::EAction::ImageGallery:
|
||||||
|
x20_tablegroup_fileselect->SetUserSelection(int(tbAction) - int(CFrontEndUITouchBar::EAction::FusionBonus) + 4);
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
HandleActiveChange(x20_tablegroup_fileselect);
|
||||||
|
DoFileMenuAdvance(x20_tablegroup_fileselect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (x10d_needsExistingToggle)
|
if (x10d_needsExistingToggle)
|
||||||
{
|
{
|
||||||
|
@ -234,9 +255,29 @@ void CFrontEndUI::SNewFileSelectFrame::HandleActiveChange(CGuiTableGroup* active
|
||||||
zeus::CColor{0.627450f, 0.627450f, 0.627450f, 0.784313f});
|
zeus::CColor{0.627450f, 0.627450f, 0.627450f, 0.784313f});
|
||||||
|
|
||||||
if (active == x20_tablegroup_fileselect)
|
if (active == x20_tablegroup_fileselect)
|
||||||
|
{
|
||||||
x24_model_erase->SetLocalTransform(zeus::CTransform::Translate(
|
x24_model_erase->SetLocalTransform(zeus::CTransform::Translate(
|
||||||
zeus::CVector3f{0.f, 0.f, active->GetUserSelection() * x104_rowPitch} + xf8_model_erase_position));
|
zeus::CVector3f{0.f, 0.f, active->GetUserSelection() * x104_rowPitch} + xf8_model_erase_position));
|
||||||
|
|
||||||
|
/* Set Touch Bar contents here */
|
||||||
|
CFrontEndUITouchBar::SFileSelectDetail tbDetails[3] = {};
|
||||||
|
for (int i=0 ; i<3 ; ++i)
|
||||||
|
{
|
||||||
|
if (const CGameState::GameFileStateInfo* data = x4_saveUI->GetGameData(i))
|
||||||
|
{
|
||||||
|
tbDetails[i].state = data->x20_hardMode ? CFrontEndUITouchBar::EFileState::Hard :
|
||||||
|
CFrontEndUITouchBar::EFileState::Normal;
|
||||||
|
tbDetails[i].percent = data->x18_itemPercent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_touchBar.SetFileSelectPhase(tbDetails, x8_subMenu == ESubMenu::EraseGame,
|
||||||
|
CSlideShow::SlideShowGalleryFlags());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_touchBar.SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
|
}
|
||||||
|
|
||||||
if (x8_subMenu == ESubMenu::Root || x8_subMenu == ESubMenu::NewGamePopup)
|
if (x8_subMenu == ESubMenu::Root || x8_subMenu == ESubMenu::NewGamePopup)
|
||||||
x24_model_erase->SetIsVisible(false);
|
x24_model_erase->SetIsVisible(false);
|
||||||
else
|
else
|
||||||
|
@ -356,19 +397,20 @@ void CFrontEndUI::SNewFileSelectFrame::ActivateErase()
|
||||||
x28_textpane_erase.x0_panes[0]->TextSupport()->SetFontColor(color);
|
x28_textpane_erase.x0_panes[0]->TextSupport()->SetFontColor(color);
|
||||||
x38_textpane_gba.x0_panes[0]->TextSupport()->SetFontColor(color);
|
x38_textpane_gba.x0_panes[0]->TextSupport()->SetFontColor(color);
|
||||||
x30_textpane_cheats.x0_panes[0]->TextSupport()->SetFontColor(color);
|
x30_textpane_cheats.x0_panes[0]->TextSupport()->SetFontColor(color);
|
||||||
|
x38_textpane_gba.x0_panes[0]->SetIsSelectable(false);
|
||||||
|
x30_textpane_cheats.x0_panes[0]->SetIsSelectable(false);
|
||||||
|
|
||||||
for (int i=2 ; i>=0 ; --i)
|
for (int i=2 ; i>=0 ; --i)
|
||||||
{
|
{
|
||||||
SFileMenuOption& fileOpt = x64_fileSelections[i];
|
SFileMenuOption& fileOpt = x64_fileSelections[i];
|
||||||
const CGameState::GameFileStateInfo* data = x4_saveUI->GetGameData(i);
|
if (x4_saveUI->GetGameData(i))
|
||||||
if (data)
|
|
||||||
{
|
{
|
||||||
fileOpt.x4_textpanes[0].x0_panes[0]->SetIsSelectable(true);
|
fileOpt.x0_base->SetIsSelectable(true);
|
||||||
x20_tablegroup_fileselect->SetUserSelection(i);
|
x20_tablegroup_fileselect->SetUserSelection(i);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fileOpt.x4_textpanes[0].x0_panes[0]->SetIsSelectable(false);
|
fileOpt.x0_base->SetIsSelectable(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,8 +619,7 @@ void CFrontEndUI::SNewFileSelectFrame::DoFileMenuAdvance(CGuiTableGroup* caller)
|
||||||
{
|
{
|
||||||
if (x8_subMenu == ESubMenu::EraseGame)
|
if (x8_subMenu == ESubMenu::EraseGame)
|
||||||
{
|
{
|
||||||
const CGameState::GameFileStateInfo* data = x4_saveUI->GetGameData(userSel);
|
if (x4_saveUI->GetGameData(userSel))
|
||||||
if (data)
|
|
||||||
{
|
{
|
||||||
PlayAdvanceSfx();
|
PlayAdvanceSfx();
|
||||||
x10d_needsExistingToggle = true;
|
x10d_needsExistingToggle = true;
|
||||||
|
@ -586,9 +627,11 @@ void CFrontEndUI::SNewFileSelectFrame::DoFileMenuAdvance(CGuiTableGroup* caller)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const CGameState::GameFileStateInfo* data = x4_saveUI->GetGameData(userSel);
|
if (x4_saveUI->GetGameData(userSel))
|
||||||
if (data)
|
{
|
||||||
|
m_touchBar.SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
x4_saveUI->StartGame(userSel);
|
x4_saveUI->StartGame(userSel);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
x10e_needsNewToggle = true;
|
x10e_needsNewToggle = true;
|
||||||
}
|
}
|
||||||
|
@ -1760,6 +1803,9 @@ CFrontEndUI::CFrontEndUI()
|
||||||
|
|
||||||
for (int i=0 ; CDvdFile::FileExists(GetAttractMovieFileName(i).c_str()) ; ++i)
|
for (int i=0 ; CDvdFile::FileExists(GetAttractMovieFileName(i).c_str()) ; ++i)
|
||||||
++xc0_attractCount;
|
++xc0_attractCount;
|
||||||
|
|
||||||
|
m_touchBar = NewFrontEndUITouchBar();
|
||||||
|
m_touchBar->SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrontEndUI::StartSlideShow(CArchitectureQueue& queue)
|
void CFrontEndUI::StartSlideShow(CArchitectureQueue& queue)
|
||||||
|
@ -2113,9 +2159,13 @@ void CFrontEndUI::ProcessUserInput(const CFinalInput& input, CArchitectureQueue&
|
||||||
if (x14_phase != EPhase::DisplayFrontEnd || input.ControllerIdx() != 0)
|
if (x14_phase != EPhase::DisplayFrontEnd || input.ControllerIdx() != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/* Pop most recent action from Touch Bar */
|
||||||
|
CFrontEndUITouchBar::EAction touchBarAction = m_touchBar->PopAction();
|
||||||
|
|
||||||
if (x50_curScreen != x54_nextScreen)
|
if (x50_curScreen != x54_nextScreen)
|
||||||
{
|
{
|
||||||
if (x54_nextScreen == EScreen::AttractMovie && (input.PStart() || input.PA()))
|
if (x54_nextScreen == EScreen::AttractMovie && (input.PStart() || input.PA() ||
|
||||||
|
touchBarAction == CFrontEndUITouchBar::EAction::Start))
|
||||||
{
|
{
|
||||||
/* Player wants to return to opening credits from attract movie */
|
/* Player wants to return to opening credits from attract movie */
|
||||||
SetFadeBlackTimer(std::min(1.f, x58_fadeBlackTimer));
|
SetFadeBlackTimer(std::min(1.f, x58_fadeBlackTimer));
|
||||||
|
@ -2123,7 +2173,7 @@ void CFrontEndUI::ProcessUserInput(const CFinalInput& input, CArchitectureQueue&
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input.PA() || input.PStart())
|
if (input.PA() || input.PStart() || touchBarAction == CFrontEndUITouchBar::EAction::Start)
|
||||||
{
|
{
|
||||||
if (x50_curScreen == EScreen::OpenCredits && x54_nextScreen == EScreen::Title &&
|
if (x50_curScreen == EScreen::OpenCredits && x54_nextScreen == EScreen::Title &&
|
||||||
x58_fadeBlackTimer > 1.f)
|
x58_fadeBlackTimer > 1.f)
|
||||||
|
@ -2139,13 +2189,14 @@ void CFrontEndUI::ProcessUserInput(const CFinalInput& input, CArchitectureQueue&
|
||||||
{
|
{
|
||||||
if (x50_curScreen == EScreen::Title)
|
if (x50_curScreen == EScreen::Title)
|
||||||
{
|
{
|
||||||
if (input.PStart() || input.PA())
|
if (input.PStart() || input.PA() || touchBarAction == CFrontEndUITouchBar::EAction::Start)
|
||||||
{
|
{
|
||||||
if (x58_fadeBlackTimer < 30.f - g_tweakGame->GetPressStartDelay())
|
if (x58_fadeBlackTimer < 30.f - g_tweakGame->GetPressStartDelay())
|
||||||
{
|
{
|
||||||
/* Proceed to file select UI */
|
/* Proceed to file select UI */
|
||||||
CSfxManager::SfxStart(FETransitionBackSFX[x18_rndA][0], 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
CSfxManager::SfxStart(FETransitionBackSFX[x18_rndA][0], 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||||
CSfxManager::SfxStart(FETransitionBackSFX[x18_rndA][1], 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
CSfxManager::SfxStart(FETransitionBackSFX[x18_rndA][1], 1.f, 0.f, false, 0x7f, false, kInvalidAreaId);
|
||||||
|
m_touchBar->SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
StartStateTransition(EScreen::FileSelect);
|
StartStateTransition(EScreen::FileSelect);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2165,15 +2216,18 @@ void CFrontEndUI::ProcessUserInput(const CFinalInput& input, CArchitectureQueue&
|
||||||
else if (xe0_frontendCardFrme)
|
else if (xe0_frontendCardFrme)
|
||||||
{
|
{
|
||||||
/* Control FrontEnd with memory card */
|
/* Control FrontEnd with memory card */
|
||||||
switch (xe0_frontendCardFrme->ProcessUserInput(input))
|
switch (xe0_frontendCardFrme->ProcessUserInput(input, touchBarAction))
|
||||||
{
|
{
|
||||||
case SNewFileSelectFrame::EAction::FusionBonus:
|
case SNewFileSelectFrame::EAction::FusionBonus:
|
||||||
|
m_touchBar->SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
StartStateTransition(EScreen::FusionBonus);
|
StartStateTransition(EScreen::FusionBonus);
|
||||||
return;
|
return;
|
||||||
case SNewFileSelectFrame::EAction::GameOptions:
|
case SNewFileSelectFrame::EAction::GameOptions:
|
||||||
|
m_touchBar->SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
xf0_optionsFrme = std::make_unique<SOptionsFrontEndFrame>();
|
xf0_optionsFrme = std::make_unique<SOptionsFrontEndFrame>();
|
||||||
return;
|
return;
|
||||||
case SNewFileSelectFrame::EAction::SlideShow:
|
case SNewFileSelectFrame::EAction::SlideShow:
|
||||||
|
m_touchBar->SetPhase(CFrontEndUITouchBar::EPhase::None);
|
||||||
xd2_deferSlideShow = true;
|
xd2_deferSlideShow = true;
|
||||||
StartSlideShow(queue);
|
StartSlideShow(queue);
|
||||||
return;
|
return;
|
||||||
|
@ -2291,7 +2345,7 @@ CIOWin::EMessageReturn CFrontEndUI::Update(float dt, CArchitectureQueue& queue)
|
||||||
/* Poll loading DGRP resources */
|
/* Poll loading DGRP resources */
|
||||||
if (PumpLoad())
|
if (PumpLoad())
|
||||||
{
|
{
|
||||||
xe0_frontendCardFrme = std::make_unique<SNewFileSelectFrame>(xdc_saveUI.get(), x1c_rndB);
|
xe0_frontendCardFrme = std::make_unique<SNewFileSelectFrame>(xdc_saveUI.get(), x1c_rndB, *m_touchBar);
|
||||||
xe4_fusionBonusFrme = std::make_unique<SFusionBonusFrame>();
|
xe4_fusionBonusFrme = std::make_unique<SFusionBonusFrame>();
|
||||||
xe8_frontendNoCardFrme = std::make_unique<SFrontEndFrame>(x1c_rndB);
|
xe8_frontendNoCardFrme = std::make_unique<SFrontEndFrame>(x1c_rndB);
|
||||||
x38_pressStart.GetObj();
|
x38_pressStart.GetObj();
|
||||||
|
@ -2337,6 +2391,7 @@ CIOWin::EMessageReturn CFrontEndUI::Update(float dt, CArchitectureQueue& queue)
|
||||||
{
|
{
|
||||||
/* Ready to display FrontEnd */
|
/* Ready to display FrontEnd */
|
||||||
x14_phase = EPhase::DisplayFrontEnd;
|
x14_phase = EPhase::DisplayFrontEnd;
|
||||||
|
m_touchBar->SetPhase(CFrontEndUITouchBar::EPhase::PressStart);
|
||||||
StartStateTransition(EScreen::Title);
|
StartStateTransition(EScreen::Title);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "GuiSys/CGuiTextSupport.hpp"
|
#include "GuiSys/CGuiTextSupport.hpp"
|
||||||
#include "Graphics/Shaders/CTexturedQuadFilter.hpp"
|
#include "Graphics/Shaders/CTexturedQuadFilter.hpp"
|
||||||
#include "Graphics/Shaders/CColoredQuadFilter.hpp"
|
#include "Graphics/Shaders/CColoredQuadFilter.hpp"
|
||||||
|
#include "CFrontEndUITouchBar.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
|
@ -142,12 +143,14 @@ public:
|
||||||
bool x10d_needsExistingToggle = false;
|
bool x10d_needsExistingToggle = false;
|
||||||
bool x10e_needsNewToggle = false;
|
bool x10e_needsNewToggle = false;
|
||||||
|
|
||||||
SNewFileSelectFrame(CSaveUI* sui, u32 rnd);
|
CFrontEndUITouchBar& m_touchBar;
|
||||||
|
|
||||||
|
SNewFileSelectFrame(CSaveUI* sui, u32 rnd, CFrontEndUITouchBar& touchBar);
|
||||||
void FinishedLoading();
|
void FinishedLoading();
|
||||||
bool PumpLoad();
|
bool PumpLoad();
|
||||||
bool IsTextDoneAnimating() const;
|
bool IsTextDoneAnimating() const;
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
EAction ProcessUserInput(const CFinalInput& input);
|
EAction ProcessUserInput(const CFinalInput& input, CFrontEndUITouchBar::EAction tbAction);
|
||||||
void Draw() const;
|
void Draw() const;
|
||||||
|
|
||||||
void HandleActiveChange(CGuiTableGroup* active);
|
void HandleActiveChange(CGuiTableGroup* active);
|
||||||
|
@ -408,6 +411,8 @@ private:
|
||||||
CColoredQuadFilter m_fadeToBlack = {CCameraFilterPass::EFilterType::Blend};
|
CColoredQuadFilter m_fadeToBlack = {CCameraFilterPass::EFilterType::Blend};
|
||||||
std::experimental::optional<CTexturedQuadFilterAlpha> m_pressStartQuad;
|
std::experimental::optional<CTexturedQuadFilterAlpha> m_pressStartQuad;
|
||||||
|
|
||||||
|
std::unique_ptr<CFrontEndUITouchBar> m_touchBar;
|
||||||
|
|
||||||
void SetFadeBlackWithMovie()
|
void SetFadeBlackWithMovie()
|
||||||
{
|
{
|
||||||
x58_fadeBlackTimer = 1000000.f;
|
x58_fadeBlackTimer = 1000000.f;
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
#include "CFrontEndUITouchBar.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
CFrontEndUITouchBar::~CFrontEndUITouchBar() {}
|
||||||
|
void CFrontEndUITouchBar::SetPhase(EPhase ph) {}
|
||||||
|
void CFrontEndUITouchBar::SetFileSelectPhase(const SFileSelectDetail details[3],
|
||||||
|
bool eraseGame, bool galleryActive) {}
|
||||||
|
CFrontEndUITouchBar::EAction CFrontEndUITouchBar::PopAction() { return EAction::None; }
|
||||||
|
|
||||||
|
#ifndef __APPLE__
|
||||||
|
std::unique_ptr<CFrontEndUITouchBar> NewFrontEndUITouchBar()
|
||||||
|
{
|
||||||
|
return std::make_unique<CFrontEndUITouchBar>();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
#ifndef __URDE_CFRONTENDUITOUCHBAR_HPP__
|
||||||
|
#define __URDE_CFRONTENDUITOUCHBAR_HPP__
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
class CFrontEndUITouchBar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum class EPhase
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
PressStart,
|
||||||
|
BackConfirm,
|
||||||
|
FileSelect
|
||||||
|
};
|
||||||
|
enum class EAction
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Start,
|
||||||
|
Back,
|
||||||
|
Confirm,
|
||||||
|
FileA,
|
||||||
|
FileB,
|
||||||
|
FileC,
|
||||||
|
FusionBonus,
|
||||||
|
ImageGallery
|
||||||
|
};
|
||||||
|
enum class EFileState
|
||||||
|
{
|
||||||
|
New,
|
||||||
|
Normal,
|
||||||
|
Hard
|
||||||
|
};
|
||||||
|
struct SFileSelectDetail
|
||||||
|
{
|
||||||
|
EFileState state;
|
||||||
|
int percent;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual ~CFrontEndUITouchBar();
|
||||||
|
virtual void SetPhase(EPhase ph);
|
||||||
|
virtual void SetFileSelectPhase(const SFileSelectDetail details[3],
|
||||||
|
bool eraseGame, bool galleryActive);
|
||||||
|
virtual EAction PopAction();
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<CFrontEndUITouchBar> NewFrontEndUITouchBar();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __URDE_CFRONTENDUITOUCHBAR_HPP__
|
|
@ -0,0 +1,258 @@
|
||||||
|
#include <AppKit/AppKit.h>
|
||||||
|
#include "CFrontEndUITouchBar.hpp"
|
||||||
|
#include "GameGlobalObjects.hpp"
|
||||||
|
#include "MP1/MP1.hpp"
|
||||||
|
|
||||||
|
#if !__has_feature(objc_arc)
|
||||||
|
#error ARC Required
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern "C" uint8_t START_BUTTON_2X[];
|
||||||
|
extern "C" size_t START_BUTTON_2X_SZ;
|
||||||
|
|
||||||
|
@interface FrontEndUITouchBarPressStart : NSObject <NSTouchBarDelegate>
|
||||||
|
{
|
||||||
|
@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* group = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSTouchBar* touchBar = [NSTouchBar new];
|
||||||
|
touchBar.delegate = self;
|
||||||
|
id items = @[@"pressStart"];
|
||||||
|
touchBar.customizationRequiredItemIdentifiers = items;
|
||||||
|
touchBar.defaultItemIdentifiers = items;
|
||||||
|
group.groupTouchBar = touchBar;
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
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* pressStart = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSButton* button = [NSButton buttonWithTitle:@"Start" image:img target:self action:@selector(onPressStart:)];
|
||||||
|
button.imageHugsTitle = YES;
|
||||||
|
pressStart.view = button;
|
||||||
|
return pressStart;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
-(IBAction)onPressStart:(id)sender
|
||||||
|
{
|
||||||
|
_startPressed = YES;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
static NSString* GetFileSelectTitle(const urde::CFrontEndUITouchBar::SFileSelectDetail& detail, char letter)
|
||||||
|
{
|
||||||
|
switch (detail.state)
|
||||||
|
{
|
||||||
|
case urde::CFrontEndUITouchBar::EFileState::New:
|
||||||
|
return [NSString stringWithFormat:@"[New Game %c]", letter];
|
||||||
|
case urde::CFrontEndUITouchBar::EFileState::Normal:
|
||||||
|
return [NSString stringWithFormat:@"[Samus %c] %d%%", letter, detail.percent];
|
||||||
|
case urde::CFrontEndUITouchBar::EFileState::Hard:
|
||||||
|
return [NSString stringWithFormat:@"[Hard %c] %d%%", letter, detail.percent];
|
||||||
|
}
|
||||||
|
return @"";
|
||||||
|
}
|
||||||
|
|
||||||
|
@interface FrontEndUITouchBarFileSelect : NSObject <NSTouchBarDelegate>
|
||||||
|
{
|
||||||
|
@public
|
||||||
|
urde::CFrontEndUITouchBar::SFileSelectDetail _details[3];
|
||||||
|
urde::CFrontEndUITouchBar::EAction _action;
|
||||||
|
BOOL _eraseGame;
|
||||||
|
BOOL _galleryActive;
|
||||||
|
}
|
||||||
|
-(IBAction)onFileA:(id)sender;
|
||||||
|
-(IBAction)onFileB:(id)sender;
|
||||||
|
-(IBAction)onFileC:(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* group = [[NSGroupTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSTouchBar* touchBar = [NSTouchBar new];
|
||||||
|
touchBar.delegate = self;
|
||||||
|
id items = @[@"fileA", @"fileB", @"fileC", @"fusionBonus", @"imageGallery"];
|
||||||
|
touchBar.customizationRequiredItemIdentifiers = items;
|
||||||
|
touchBar.defaultItemIdentifiers = items;
|
||||||
|
group.groupTouchBar = touchBar;
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
else if ([identifier isEqualToString:@"fileA"])
|
||||||
|
{
|
||||||
|
NSCustomTouchBarItem* pressStart = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSButton* button = [NSButton buttonWithTitle:GetFileSelectTitle(_details[0], 'A') target:self action:@selector(onFileA:)];
|
||||||
|
button.enabled = !_eraseGame || _details[0].state != urde::CFrontEndUITouchBar::EFileState::New;
|
||||||
|
pressStart.view = button;
|
||||||
|
return pressStart;
|
||||||
|
}
|
||||||
|
else if ([identifier isEqualToString:@"fileB"])
|
||||||
|
{
|
||||||
|
NSCustomTouchBarItem* pressStart = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSButton* button = [NSButton buttonWithTitle:GetFileSelectTitle(_details[1], 'B') target:self action:@selector(onFileB:)];
|
||||||
|
button.enabled = !_eraseGame || _details[1].state != urde::CFrontEndUITouchBar::EFileState::New;
|
||||||
|
pressStart.view = button;
|
||||||
|
return pressStart;
|
||||||
|
}
|
||||||
|
else if ([identifier isEqualToString:@"fileC"])
|
||||||
|
{
|
||||||
|
NSCustomTouchBarItem* pressStart = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSButton* button = [NSButton buttonWithTitle:GetFileSelectTitle(_details[2], 'C') target:self action:@selector(onFileC:)];
|
||||||
|
button.enabled = !_eraseGame || _details[2].state != urde::CFrontEndUITouchBar::EFileState::New;
|
||||||
|
pressStart.view = button;
|
||||||
|
return pressStart;
|
||||||
|
}
|
||||||
|
else if ([identifier isEqualToString:@"fusionBonus"])
|
||||||
|
{
|
||||||
|
NSCustomTouchBarItem* pressStart = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSButton* button = [NSButton buttonWithTitle:@"Fusion Bonuses" target:self action:@selector(onFusionBonus:)];
|
||||||
|
button.enabled = !_eraseGame;
|
||||||
|
pressStart.view = button;
|
||||||
|
return pressStart;
|
||||||
|
}
|
||||||
|
else if ([identifier isEqualToString:@"imageGallery"])
|
||||||
|
{
|
||||||
|
NSCustomTouchBarItem* pressStart = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
|
||||||
|
NSButton* button = [NSButton buttonWithTitle:@"Image Gallery" target:self action:@selector(onImageGallery:)];
|
||||||
|
button.enabled = !_eraseGame && _galleryActive;
|
||||||
|
pressStart.view = button;
|
||||||
|
return pressStart;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
-(IBAction)onFileA:(id)sender
|
||||||
|
{
|
||||||
|
_action = urde::CFrontEndUITouchBar::EAction::FileA;
|
||||||
|
}
|
||||||
|
-(IBAction)onFileB:(id)sender
|
||||||
|
{
|
||||||
|
_action = urde::CFrontEndUITouchBar::EAction::FileB;
|
||||||
|
}
|
||||||
|
-(IBAction)onFileC:(id)sender
|
||||||
|
{
|
||||||
|
_action = urde::CFrontEndUITouchBar::EAction::FileC;
|
||||||
|
}
|
||||||
|
-(IBAction)onFusionBonus:(id)sender
|
||||||
|
{
|
||||||
|
_action = urde::CFrontEndUITouchBar::EAction::FusionBonus;
|
||||||
|
}
|
||||||
|
-(IBAction)onImageGallery:(id)sender
|
||||||
|
{
|
||||||
|
_action = urde::CFrontEndUITouchBar::EAction::ImageGallery;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
|
||||||
|
class CFrontEndUITouchBarMac : public CFrontEndUITouchBar
|
||||||
|
{
|
||||||
|
EPhase m_phase = EPhase::None;
|
||||||
|
FrontEndUITouchBarPressStart* m_pressStartBar;
|
||||||
|
FrontEndUITouchBarFileSelect* m_fileSelectBar;
|
||||||
|
|
||||||
|
void Activate()
|
||||||
|
{
|
||||||
|
id provider = nil;
|
||||||
|
switch (m_phase)
|
||||||
|
{
|
||||||
|
case EPhase::PressStart:
|
||||||
|
provider = m_pressStartBar;
|
||||||
|
break;
|
||||||
|
case EPhase::FileSelect:
|
||||||
|
provider = m_fileSelectBar;
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
g_Main->GetMainWindow()->setTouchBarProvider((__bridge_retained void*)provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
CFrontEndUITouchBarMac()
|
||||||
|
{
|
||||||
|
m_pressStartBar = [FrontEndUITouchBarPressStart new];
|
||||||
|
m_fileSelectBar = [FrontEndUITouchBarFileSelect new];
|
||||||
|
}
|
||||||
|
void SetPhase(EPhase ph)
|
||||||
|
{
|
||||||
|
m_phase = ph;
|
||||||
|
Activate();
|
||||||
|
}
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
EAction PopAction()
|
||||||
|
{
|
||||||
|
switch (m_phase)
|
||||||
|
{
|
||||||
|
case EPhase::PressStart:
|
||||||
|
if (m_pressStartBar->_startPressed)
|
||||||
|
{
|
||||||
|
m_pressStartBar->_startPressed = NO;
|
||||||
|
return EAction::Start;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EPhase::FileSelect:
|
||||||
|
if (m_fileSelectBar->_action != EAction::None)
|
||||||
|
{
|
||||||
|
EAction action = m_fileSelectBar->_action;
|
||||||
|
m_fileSelectBar->_action = EAction::None;
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return EAction::None;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<CFrontEndUITouchBar> NewFrontEndUITouchBar()
|
||||||
|
{
|
||||||
|
return std::make_unique<CFrontEndUITouchBarMac>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,10 @@
|
||||||
include_directories(. ..)
|
include_directories(. ..)
|
||||||
add_subdirectory(World)
|
add_subdirectory(World)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
set(MP1_PLAT_SOURCES CFrontEndUITouchBarMac.mm)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(MP1_SOURCES
|
set(MP1_SOURCES
|
||||||
CTweaks.hpp CTweaks.cpp
|
CTweaks.hpp CTweaks.cpp
|
||||||
CInGameTweakManager.hpp CInGameTweakManager.cpp
|
CInGameTweakManager.hpp CInGameTweakManager.cpp
|
||||||
|
@ -10,6 +14,7 @@ set(MP1_SOURCES
|
||||||
CMFGame.hpp CMFGame.cpp
|
CMFGame.hpp CMFGame.cpp
|
||||||
CPlayMovie.hpp CPlayMovie.cpp
|
CPlayMovie.hpp CPlayMovie.cpp
|
||||||
CFrontEndUI.hpp CFrontEndUI.cpp
|
CFrontEndUI.hpp CFrontEndUI.cpp
|
||||||
|
CFrontEndUITouchBar.hpp CFrontEndUITouchBar.cpp
|
||||||
CPreFrontEnd.hpp CPreFrontEnd.cpp
|
CPreFrontEnd.hpp CPreFrontEnd.cpp
|
||||||
CSlideShow.hpp CSlideShow.cpp
|
CSlideShow.hpp CSlideShow.cpp
|
||||||
CSaveUI.hpp CSaveUI.cpp
|
CSaveUI.hpp CSaveUI.cpp
|
||||||
|
@ -19,6 +24,7 @@ set(MP1_SOURCES
|
||||||
CStateSetterFlow.hpp CStateSetterFlow.cpp
|
CStateSetterFlow.hpp CStateSetterFlow.cpp
|
||||||
CAudioStateWin.hpp CAudioStateWin.cpp
|
CAudioStateWin.hpp CAudioStateWin.cpp
|
||||||
MP1.hpp MP1.cpp
|
MP1.hpp MP1.cpp
|
||||||
|
${MP1_PLAT_SOURCES}
|
||||||
${MP1_WORLD_SOURCES})
|
${MP1_WORLD_SOURCES})
|
||||||
|
|
||||||
runtime_add_list(MP1 MP1_SOURCES)
|
runtime_add_list(MP1 MP1_SOURCES)
|
||||||
|
|
|
@ -29,7 +29,8 @@ URDE_DECL_SPECIALIZE_MULTI_BLEND_SHADER(CTextSupportShader)
|
||||||
namespace MP1
|
namespace MP1
|
||||||
{
|
{
|
||||||
|
|
||||||
CGameArchitectureSupport::CGameArchitectureSupport(CMain& parent, boo::IAudioVoiceEngine* voiceEngine,
|
CGameArchitectureSupport::CGameArchitectureSupport(CMain& parent,
|
||||||
|
boo::IAudioVoiceEngine* voiceEngine,
|
||||||
amuse::IBackendVoiceAllocator& backend)
|
amuse::IBackendVoiceAllocator& backend)
|
||||||
: m_parent(parent),
|
: m_parent(parent),
|
||||||
x0_audioSys(voiceEngine, backend, 0,0,0,0,0),
|
x0_audioSys(voiceEngine, backend, 0,0,0,0,0),
|
||||||
|
@ -254,9 +255,11 @@ void CMain::StreamNewGameState(CBitStreamReader& r, u32 idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMain::Init(const hecl::Runtime::FileStoreManager& storeMgr,
|
void CMain::Init(const hecl::Runtime::FileStoreManager& storeMgr,
|
||||||
|
boo::IWindow* window,
|
||||||
boo::IAudioVoiceEngine* voiceEngine,
|
boo::IAudioVoiceEngine* voiceEngine,
|
||||||
amuse::IBackendVoiceAllocator& backend)
|
amuse::IBackendVoiceAllocator& backend)
|
||||||
{
|
{
|
||||||
|
m_mainWindow = window;
|
||||||
InitializeSubsystems(storeMgr);
|
InitializeSubsystems(storeMgr);
|
||||||
x128_globalObjects.PostInitialize();
|
x128_globalObjects.PostInitialize();
|
||||||
x70_tweaks.RegisterTweaks();
|
x70_tweaks.RegisterTweaks();
|
||||||
|
@ -320,6 +323,11 @@ void CMain::Shutdown()
|
||||||
TMultiBlendShader<CTextSupportShader>::Shutdown();
|
TMultiBlendShader<CTextSupportShader>::Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boo::IWindow* CMain::GetMainWindow() const
|
||||||
|
{
|
||||||
|
return m_mainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
#if MP1_USE_BOO
|
#if MP1_USE_BOO
|
||||||
|
|
||||||
int CMain::appMain(boo::IApplication* app)
|
int CMain::appMain(boo::IApplication* app)
|
||||||
|
|
|
@ -134,7 +134,8 @@ class CGameArchitectureSupport
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CGameArchitectureSupport(CMain& parent, boo::IAudioVoiceEngine* voiceEngine,
|
CGameArchitectureSupport(CMain& parent,
|
||||||
|
boo::IAudioVoiceEngine* voiceEngine,
|
||||||
amuse::IBackendVoiceAllocator& backend);
|
amuse::IBackendVoiceAllocator& backend);
|
||||||
~CGameArchitectureSupport();
|
~CGameArchitectureSupport();
|
||||||
|
|
||||||
|
@ -235,6 +236,8 @@ private:
|
||||||
|
|
||||||
std::unique_ptr<CGameArchitectureSupport> x164_archSupport;
|
std::unique_ptr<CGameArchitectureSupport> x164_archSupport;
|
||||||
|
|
||||||
|
boo::IWindow* m_mainWindow = nullptr;
|
||||||
|
|
||||||
void InitializeSubsystems(const hecl::Runtime::FileStoreManager& storeMgr);
|
void InitializeSubsystems(const hecl::Runtime::FileStoreManager& storeMgr);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -249,11 +252,13 @@ public:
|
||||||
|
|
||||||
//int RsMain(int argc, const boo::SystemChar* argv[]);
|
//int RsMain(int argc, const boo::SystemChar* argv[]);
|
||||||
void Init(const hecl::Runtime::FileStoreManager& storeMgr,
|
void Init(const hecl::Runtime::FileStoreManager& storeMgr,
|
||||||
|
boo::IWindow* window,
|
||||||
boo::IAudioVoiceEngine* voiceEngine,
|
boo::IAudioVoiceEngine* voiceEngine,
|
||||||
amuse::IBackendVoiceAllocator& backend);
|
amuse::IBackendVoiceAllocator& backend);
|
||||||
bool Proc();
|
bool Proc();
|
||||||
void Draw();
|
void Draw();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
|
boo::IWindow* GetMainWindow() const;
|
||||||
|
|
||||||
void MemoryCardInitializePump()
|
void MemoryCardInitializePump()
|
||||||
{
|
{
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
2
hecl
2
hecl
|
@ -1 +1 @@
|
||||||
Subproject commit 532fd0ede4078a0c3cf88868a53932a46f575676
|
Subproject commit 4ab6eab5641b4f77e187e602d812db4c43be8106
|
Loading…
Reference in New Issue