forked from cafeberry/cafeberry
feat: initial controller tooltips hotswap
This commit is contained in:
Binary file not shown.
@@ -47,9 +47,19 @@
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
wstring controlTooltipsPath = L"";
|
||||||
|
wstring skinName = L"";
|
||||||
|
#endif
|
||||||
|
|
||||||
CRITICAL_SECTION UIController::ms_reloadSkinCS;
|
CRITICAL_SECTION UIController::ms_reloadSkinCS;
|
||||||
bool UIController::ms_bReloadSkinCSInitialised = false;
|
bool UIController::ms_bReloadSkinCSInitialised = false;
|
||||||
|
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
CRITICAL_SECTION UIController::ms_controllerPollCS;
|
||||||
|
bool UIController::ms_bControllerPollCSInitialised = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
DWORD UIController::m_dwTrialTimerLimitSecs=DYNAMIC_CONFIG_DEFAULT_TRIAL_TIME;
|
DWORD UIController::m_dwTrialTimerLimitSecs=DYNAMIC_CONFIG_DEFAULT_TRIAL_TIME;
|
||||||
|
|
||||||
static void RADLINK WarningCallback(void *user_callback_data, Iggy *player, IggyResult code, const char *message)
|
static void RADLINK WarningCallback(void *user_callback_data, Iggy *player, IggyResult code, const char *message)
|
||||||
@@ -233,6 +243,12 @@ UIController::UIController()
|
|||||||
InitializeCriticalSection(&ms_reloadSkinCS);
|
InitializeCriticalSection(&ms_reloadSkinCS);
|
||||||
ms_bReloadSkinCSInitialised = true;
|
ms_bReloadSkinCSInitialised = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!ms_bControllerPollCSInitialised)
|
||||||
|
{
|
||||||
|
InitializeCriticalSection(&ms_controllerPollCS);
|
||||||
|
ms_bControllerPollCSInitialised = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UIController::SetSysUIShowing(bool bVal)
|
void UIController::SetSysUIShowing(bool bVal)
|
||||||
@@ -282,6 +298,14 @@ void UIController::postInit()
|
|||||||
//
|
//
|
||||||
loadSkins();
|
loadSkins();
|
||||||
|
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
m_LastControllerType = UNKNOWN;
|
||||||
|
m_bControllerTypeChanged = false;
|
||||||
|
|
||||||
|
m_controllerPollThread = new C4JThread(controllerPollThreadProc, (void*)this, "Controller poll thread");
|
||||||
|
m_controllerPollThread->Run();
|
||||||
|
#endif
|
||||||
|
|
||||||
for(unsigned int i = 0; i < eUIGroup_COUNT; ++i)
|
for(unsigned int i = 0; i < eUIGroup_COUNT; ++i)
|
||||||
{
|
{
|
||||||
m_groups[i] = new UIGroup((EUIGroup)i,i-1);
|
m_groups[i] = new UIGroup((EUIGroup)i,i-1);
|
||||||
@@ -489,8 +513,112 @@ void UIController::tick()
|
|||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
fetchControlTooltipSWF();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
int UIController::controllerPollThreadProc(void* lpParam)
|
||||||
|
{
|
||||||
|
UIController *controller = (UIController *)lpParam;
|
||||||
|
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
EControllerType polled = controller->GetControllerType(InputManager.PollControllerType(0));
|
||||||
|
EnterCriticalSection(&ms_controllerPollCS);
|
||||||
|
|
||||||
|
if(polled != EControllerType::UNKNOWN && polled != controller->m_LastControllerType)
|
||||||
|
{
|
||||||
|
controller->m_bControllerTypeChanged = true;
|
||||||
|
|
||||||
|
wstring path = controller->GetControlTooltipsPath(polled);
|
||||||
|
controller->getMovieData(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
LeaveCriticalSection(&ms_controllerPollCS);
|
||||||
|
Sleep(250);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
wstring UIController::GetControlTooltipsPath(EControllerType ControllerType)
|
||||||
|
{
|
||||||
|
if(ControllerType == EControllerType::UNSET)
|
||||||
|
{
|
||||||
|
EControllerType ControllerType = GetControllerType(InputManager.PollControllerType(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(ControllerType)
|
||||||
|
{
|
||||||
|
case EControllerType::PS3:
|
||||||
|
return m_fScreenHeight >= 1080.0f
|
||||||
|
? L"ControlTooltips\\HD\\PS3HDControls.swf"
|
||||||
|
: L"ControlTooltips\\PS3Controls.swf";
|
||||||
|
case EControllerType::PS4:
|
||||||
|
return m_fScreenHeight >= 1080.0f
|
||||||
|
? L"ControlTooltips\\HD\\OrbisHDControls.swf"
|
||||||
|
: L"ControlTooltips\\OrbisControls.swf";
|
||||||
|
case EControllerType::XBOXONE:
|
||||||
|
return m_fScreenHeight >= 1080.0f
|
||||||
|
? L"ControlTooltips\\HD\\DurangoHDControls.swf"
|
||||||
|
: L"ControlTooltips\\DurangoControls.swf";
|
||||||
|
case EControllerType::XBOX360:
|
||||||
|
return m_fScreenHeight >= 1080.0f
|
||||||
|
? L"ControlTooltips\\HD\\XboxHDControls.swf"
|
||||||
|
: L"ControlTooltips\\XboxControls.swf";
|
||||||
|
default:
|
||||||
|
return m_fScreenHeight >= 1080.0f
|
||||||
|
? L"ControlTooltips\\HD\\Windows64HDControls.swf"
|
||||||
|
: L"ControlTooltips\\Windows64Controls.swf";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UIController::EControllerType UIController::GetControllerType(const char* controllerType)
|
||||||
|
{
|
||||||
|
if (strcmp(controllerType, "PS3") == 0) return EControllerType::PS3;
|
||||||
|
if (strcmp(controllerType, "PS4") == 0) return EControllerType::PS4;
|
||||||
|
if (strcmp(controllerType, "PS5") == 0) return EControllerType::PS5;
|
||||||
|
if (strcmp(controllerType, "XBOXONE") == 0) return EControllerType::XBOXONE;
|
||||||
|
if (strcmp(controllerType, "XBOX360") == 0) return EControllerType::XBOX360;
|
||||||
|
if (strcmp(controllerType, "SWITCH") == 0) return EControllerType::SWITCH;
|
||||||
|
if (strcmp(controllerType, "GAMECUBE") == 0) return EControllerType::GAMECUBE;
|
||||||
|
if (strcmp(controllerType, "STANDARD") == 0) return EControllerType::STANDARD;
|
||||||
|
|
||||||
|
return EControllerType::UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UIController::fetchControlTooltipSWF()
|
||||||
|
{
|
||||||
|
if (!m_bControllerTypeChanged)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (IsReloadingSkin())
|
||||||
|
return;
|
||||||
|
|
||||||
|
EControllerType ControllerType = GetControllerType(InputManager.PollControllerType(0));
|
||||||
|
|
||||||
|
if (ControllerType == EControllerType::UNKNOWN)
|
||||||
|
return; // str1k3r - ignore UNKNOWN, keep last tooltip
|
||||||
|
|
||||||
|
if (ControllerType == m_LastControllerType)
|
||||||
|
{
|
||||||
|
m_bControllerTypeChanged = false;
|
||||||
|
return; // str1k3r - nothing changed, skip reload
|
||||||
|
}
|
||||||
|
|
||||||
|
m_LastControllerType = ControllerType;
|
||||||
|
m_bControllerTypeChanged = false;
|
||||||
|
|
||||||
|
controlTooltipsPath = GetControlTooltipsPath(ControllerType);
|
||||||
|
skinName = (m_fScreenHeight >= 1080.0f) ? L"skinControlTooltipsHD.swf" : L"skinControlTooltips.swf";
|
||||||
|
|
||||||
|
reloadSingleSkin(eLibrary_ControlTooltips, controlTooltipsPath, skinName);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void UIController::loadSkins()
|
void UIController::loadSkins()
|
||||||
{
|
{
|
||||||
wstring platformSkinPath = L"";
|
wstring platformSkinPath = L"";
|
||||||
@@ -503,10 +631,12 @@ void UIController::loadSkins()
|
|||||||
if(m_fScreenHeight >= 1080.0f)
|
if(m_fScreenHeight >= 1080.0f)
|
||||||
{
|
{
|
||||||
platformSkinPath = L"skinHDWin.swf";
|
platformSkinPath = L"skinHDWin.swf";
|
||||||
|
controlTooltipsPath = GetControlTooltipsPath();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
platformSkinPath = L"skinWin.swf";
|
platformSkinPath = L"skinWin.swf";
|
||||||
|
controlTooltipsPath = GetControlTooltipsPath();
|
||||||
}
|
}
|
||||||
#elif defined _DURANGO
|
#elif defined _DURANGO
|
||||||
if(m_fScreenHeight==1080.0f)
|
if(m_fScreenHeight==1080.0f)
|
||||||
@@ -539,6 +669,9 @@ void UIController::loadSkins()
|
|||||||
m_iggyLibraries[eLibrary_GraphicsInGame] = loadSkin(L"skinHDGraphicsInGame.swf", L"skinHDGraphicsInGame.swf");
|
m_iggyLibraries[eLibrary_GraphicsInGame] = loadSkin(L"skinHDGraphicsInGame.swf", L"skinHDGraphicsInGame.swf");
|
||||||
m_iggyLibraries[eLibrary_GraphicsTooltips] = loadSkin(L"skinHDGraphicsTooltips.swf", L"skinHDGraphicsTooltips.swf");
|
m_iggyLibraries[eLibrary_GraphicsTooltips] = loadSkin(L"skinHDGraphicsTooltips.swf", L"skinHDGraphicsTooltips.swf");
|
||||||
m_iggyLibraries[eLibrary_GraphicsLabels] = loadSkin(L"skinHDGraphicsLabels.swf", L"skinHDGraphicsLabels.swf");
|
m_iggyLibraries[eLibrary_GraphicsLabels] = loadSkin(L"skinHDGraphicsLabels.swf", L"skinHDGraphicsLabels.swf");
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
m_iggyLibraries[eLibrary_ControlTooltips] = loadSkin(controlTooltipsPath, L"skinControlTooltipsHD.swf");
|
||||||
|
#endif
|
||||||
m_iggyLibraries[eLibrary_Labels] = loadSkin(L"skinHDLabels.swf", L"skinHDLabels.swf");
|
m_iggyLibraries[eLibrary_Labels] = loadSkin(L"skinHDLabels.swf", L"skinHDLabels.swf");
|
||||||
m_iggyLibraries[eLibrary_InGame] = loadSkin(L"skinHDInGame.swf", L"skinHDInGame.swf");
|
m_iggyLibraries[eLibrary_InGame] = loadSkin(L"skinHDInGame.swf", L"skinHDInGame.swf");
|
||||||
m_iggyLibraries[eLibrary_HUD] = loadSkin(L"skinHDHud.swf", L"skinHDHud.swf");
|
m_iggyLibraries[eLibrary_HUD] = loadSkin(L"skinHDHud.swf", L"skinHDHud.swf");
|
||||||
@@ -553,6 +686,9 @@ void UIController::loadSkins()
|
|||||||
m_iggyLibraries[eLibrary_GraphicsInGame] = loadSkin(L"skinGraphicsInGame.swf", L"skinGraphicsInGame.swf");
|
m_iggyLibraries[eLibrary_GraphicsInGame] = loadSkin(L"skinGraphicsInGame.swf", L"skinGraphicsInGame.swf");
|
||||||
m_iggyLibraries[eLibrary_GraphicsTooltips] = loadSkin(L"skinGraphicsTooltips.swf", L"skinGraphicsTooltips.swf");
|
m_iggyLibraries[eLibrary_GraphicsTooltips] = loadSkin(L"skinGraphicsTooltips.swf", L"skinGraphicsTooltips.swf");
|
||||||
m_iggyLibraries[eLibrary_GraphicsLabels] = loadSkin(L"skinGraphicsLabels.swf", L"skinGraphicsLabels.swf");
|
m_iggyLibraries[eLibrary_GraphicsLabels] = loadSkin(L"skinGraphicsLabels.swf", L"skinGraphicsLabels.swf");
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
m_iggyLibraries[eLibrary_ControlTooltips] = loadSkin(controlTooltipsPath, L"skinControlTooltips.swf");
|
||||||
|
#endif
|
||||||
m_iggyLibraries[eLibrary_Labels] = loadSkin(L"skinLabels.swf", L"skinLabels.swf");
|
m_iggyLibraries[eLibrary_Labels] = loadSkin(L"skinLabels.swf", L"skinLabels.swf");
|
||||||
m_iggyLibraries[eLibrary_InGame] = loadSkin(L"skinInGame.swf", L"skinInGame.swf");
|
m_iggyLibraries[eLibrary_InGame] = loadSkin(L"skinInGame.swf", L"skinInGame.swf");
|
||||||
m_iggyLibraries[eLibrary_HUD] = loadSkin(L"skinHud.swf", L"skinHud.swf");
|
m_iggyLibraries[eLibrary_HUD] = loadSkin(L"skinHud.swf", L"skinHud.swf");
|
||||||
@@ -567,10 +703,10 @@ IggyLibrary UIController::loadSkin(const wstring &skinPath, const wstring &skinN
|
|||||||
// 4J Stu - We need to load the platformskin before the normal skin, as the normal skin requires some elements from the platform skin
|
// 4J Stu - We need to load the platformskin before the normal skin, as the normal skin requires some elements from the platform skin
|
||||||
if(!skinPath.empty() && app.hasArchiveFile(skinPath))
|
if(!skinPath.empty() && app.hasArchiveFile(skinPath))
|
||||||
{
|
{
|
||||||
byteArray baFile = app.getArchiveFile(skinPath);
|
byteArray baFile = getMovieData(skinPath); // str1k3r - replaced app.getArchiveFile(skinPath); with this to try and prevent any stutters
|
||||||
lib = IggyLibraryCreateFromMemoryUTF16( (IggyUTF16 *)skinName.c_str() , (void *)baFile.data, baFile.length, NULL );
|
lib = IggyLibraryCreateFromMemoryUTF16( (IggyUTF16 *)skinName.c_str() , (void *)baFile.data, baFile.length, NULL );
|
||||||
|
|
||||||
delete[] baFile.data;
|
//delete[] baFile.data;
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
IggyMemoryUseInfo memoryInfo;
|
IggyMemoryUseInfo memoryInfo;
|
||||||
rrbool res;
|
rrbool res;
|
||||||
@@ -594,6 +730,36 @@ IggyLibrary UIController::loadSkin(const wstring &skinPath, const wstring &skinN
|
|||||||
return lib;
|
return lib;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UIController::reloadSingleSkin(ELibraries lib, const wstring &skinPath, const wstring &skinName)
|
||||||
|
{
|
||||||
|
if(m_iggyLibraries[lib] != IGGY_INVALID_LIBRARY)
|
||||||
|
{
|
||||||
|
IggyLibraryDestroy(m_iggyLibraries[lib]);
|
||||||
|
m_iggyLibraries[lib] = IGGY_INVALID_LIBRARY;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_iggyLibraries[lib] = loadSkin(skinPath, skinName);
|
||||||
|
|
||||||
|
if(skinName == L"skinControlTooltipsHD.swf" || skinName == L"skinControlTooltips.swf")
|
||||||
|
{
|
||||||
|
for(unsigned int i = 0; i < eUIGroup_COUNT; ++i)
|
||||||
|
{
|
||||||
|
if(m_groups[i]->getTooltips())
|
||||||
|
m_groups[i]->getTooltips()->destroyMovie();
|
||||||
|
if(m_groups[i]->getPressStartToPlay())
|
||||||
|
m_groups[i]->getPressStartToPlay()->destroyMovie();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(unsigned int i = 0; i < eUIGroup_COUNT; ++i)
|
||||||
|
{
|
||||||
|
if(m_groups[i]->getTooltips())
|
||||||
|
m_groups[i]->getTooltips()->reloadMovie(true);
|
||||||
|
if(m_groups[i]->getPressStartToPlay())
|
||||||
|
m_groups[i]->getPressStartToPlay()->reloadMovie(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void UIController::ReloadSkin()
|
void UIController::ReloadSkin()
|
||||||
{
|
{
|
||||||
// Destroy all scene swf
|
// Destroy all scene swf
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ public:
|
|||||||
static CRITICAL_SECTION ms_reloadSkinCS;
|
static CRITICAL_SECTION ms_reloadSkinCS;
|
||||||
static bool ms_bReloadSkinCSInitialised;
|
static bool ms_bReloadSkinCSInitialised;
|
||||||
|
|
||||||
|
static CRITICAL_SECTION UIController::ms_controllerPollCS;
|
||||||
|
static bool UIController::ms_bControllerPollCSInitialised;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
UIComponent_DebugUIConsole *m_uiDebugConsole;
|
UIComponent_DebugUIConsole *m_uiDebugConsole;
|
||||||
UIComponent_DebugUIMarketingGuide *m_uiDebugMarketingGuide;
|
UIComponent_DebugUIMarketingGuide *m_uiDebugMarketingGuide;
|
||||||
@@ -49,6 +52,35 @@ private:
|
|||||||
eFont_Korean,
|
eFont_Korean,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
enum EControllerType
|
||||||
|
{
|
||||||
|
// SONY
|
||||||
|
PS3,
|
||||||
|
PS4,
|
||||||
|
PS5,
|
||||||
|
|
||||||
|
// MICROSOFT
|
||||||
|
XBOXONE,
|
||||||
|
XBOX360,
|
||||||
|
|
||||||
|
// NINTENDO
|
||||||
|
SWITCH,
|
||||||
|
GAMECUBE,
|
||||||
|
|
||||||
|
// MISC
|
||||||
|
STANDARD,
|
||||||
|
UNKNOWN,
|
||||||
|
UNSET
|
||||||
|
};
|
||||||
|
|
||||||
|
EControllerType m_LastControllerType;
|
||||||
|
C4JThread *m_controllerPollThread;
|
||||||
|
volatile bool m_bControllerTypeChanged;
|
||||||
|
|
||||||
|
static int controllerPollThreadProc(void *lpParam);
|
||||||
|
#endif
|
||||||
|
|
||||||
// 4J-JEV: It's important that currentFont == targetFont, unless updateCurrentLanguage is going to be called.
|
// 4J-JEV: It's important that currentFont == targetFont, unless updateCurrentLanguage is going to be called.
|
||||||
EFont m_eCurrentFont, m_eTargetFont;
|
EFont m_eCurrentFont, m_eTargetFont;
|
||||||
@@ -91,6 +123,9 @@ private:
|
|||||||
eLibrary_GraphicsInGame,
|
eLibrary_GraphicsInGame,
|
||||||
eLibrary_GraphicsTooltips,
|
eLibrary_GraphicsTooltips,
|
||||||
eLibrary_GraphicsLabels,
|
eLibrary_GraphicsLabels,
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
eLibrary_ControlTooltips,
|
||||||
|
#endif
|
||||||
eLibrary_Labels,
|
eLibrary_Labels,
|
||||||
eLibrary_InGame,
|
eLibrary_InGame,
|
||||||
eLibrary_HUD,
|
eLibrary_HUD,
|
||||||
@@ -199,12 +234,18 @@ public:
|
|||||||
public:
|
public:
|
||||||
// TICKING
|
// TICKING
|
||||||
virtual void tick();
|
virtual void tick();
|
||||||
|
#ifdef _WINDOWS64
|
||||||
|
wstring GetControlTooltipsPath(EControllerType ControllerType = EControllerType::UNSET);
|
||||||
|
EControllerType GetControllerType(const char* controllerType);
|
||||||
|
void fetchControlTooltipSWF();
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void loadSkins();
|
void loadSkins();
|
||||||
IggyLibrary loadSkin(const wstring &skinPath, const wstring &skinName);
|
IggyLibrary loadSkin(const wstring &skinPath, const wstring &skinName);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void reloadSingleSkin(ELibraries lib, const wstring &skinPath, const wstring &skinName);
|
||||||
void ReloadSkin();
|
void ReloadSkin();
|
||||||
virtual void StartReloadSkinThread();
|
virtual void StartReloadSkinThread();
|
||||||
virtual bool IsReloadingSkin();
|
virtual bool IsReloadingSkin();
|
||||||
|
|||||||
Reference in New Issue
Block a user