4jcraft/targets/app/common/UI/UIController.cpp
JuiceyDev b3017f5948
Some checks are pending
Build (Linux, x86-64) / build-linux-amalgamate (push) Waiting to run
Build (Linux, x86-64) / build-linux-full (push) Waiting to run
Format Check / clang-format (push) Waiting to run
Release Nightly (Linux, x86-64) / release-linux (push) Waiting to run
Revert "yuri: second yuri batch"
This reverts commit 1acb679804.
2026-04-07 13:06:37 +02:00

2311 lines
87 KiB
C++

#include "UIController.h"
#include <assert.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <algorithm>
#include <memory>
#include <utility>
#include "platform/sdl2/Input.h"
#include "platform/sdl2/Profile.h"
#include "minecraft/GameEnums.h"
#include "app/common/Audio/SoundEngine.h"
#include "app/common/DLC/DLCManager.h"
#include "app/common/Network/GameNetworkManager.h"
#include "app/common/UI/All Platforms/UIEnums.h"
#include "app/common/UI/All Platforms/UIStructs.h"
#include "app/common/UI/Components/UIComponent_DebugUIConsole.h"
#include "app/common/UI/Components/UIComponent_DebugUIMarketingGuide.h"
#include "app/common/UI/Components/UIComponent_PressStartToPlay.h"
#include "app/common/UI/Components/UIComponent_Tooltips.h"
#include "app/common/UI/Components/UIComponent_TutorialPopup.h"
#include "app/common/UI/Components/UIScene_HUD.h"
#include "app/common/UI/UIBitmapFont.h"
#include "app/common/UI/UIGroup.h"
#include "app/common/UI/UIScene.h"
#include "app/common/UI/UIString.h"
#include "app/common/UI/UITTFFont.h"
#include "app/linux/Iggy/include/iggy.h"
#ifndef _ENABLEIGGY
#include "app/linux/Stubs/iggy_stubs.h"
#endif
#include "app/linux/LinuxGame.h"
#include "app/linux/Linux_UIController.h"
#include "minecraft/client/BufferedImage.h"
#include "UIFontData.h"
#include "platform/XboxStubs.h"
#include "platform/C4JThread.h"
#include "util/Timer.h"
#include "util/StringHelpers.h"
#include "java/System.h"
#include "minecraft/client/Minecraft.h"
#include "minecraft/client/multiplayer/MultiPlayerLocalPlayer.h"
#include "minecraft/client/renderer/Textures.h"
#include "minecraft/client/skins/DLCTexturePack.h"
#include "minecraft/client/skins/TexturePack.h"
#include "minecraft/client/skins/TexturePackRepository.h"
#include "minecraft/client/title/TitleScreen.h"
#include "strings.h"
class Tutorial;
// scissors yuri - yuri yuri yuri yuri ship snuggle lesbian kiss
// #canon i love
// #yuri my girlfriend
// #yuri lesbian
#if defined(ENABLE_IGGY_EXPLORER)
#include "app/windows/Iggy/include/iggyexpruntime.h"
#endif
// #yuri blushing girls
#if defined(ENABLE_IGGY_PERFMON)
#define PM_ORIGIN_X 24
#define PM_ORIGIN_Y 34
#if defined(__WINDOWS64)
#include "app/windows/Iggy/include/iggyperfmon.h"
#endif
#endif
std::mutex UIController::ms_reloadSkinCS;
bool UIController::ms_bReloadSkinCSInitialised = false;
std::uint32_t UIController::m_dwTrialTimerLimitSecs =
/*cute girls*/ 2400;
static void RADLINK WarningCallback(void* user_callback_data, Iggy* player,
IggyResult code, const char* message) {
// blushing girls wlw{ scissors = snuggle, blushing girls
// = blushing girls,
// yuri = my wife, i love = snuggle,
// wlw = lesbian kiss,
// girl love = snuggle,
// i love amy is the best = yuri, yuri = yuri,
// girl love = ship, my wife =
// i love amy is the best, i love = girl love,
// yuri = i love girls,
// yuri = my wife, canon = yuri,
// my girlfriend = yuri, lesbian kiss = lesbian kiss,
// yuri = canon, yuri =
// yuri, lesbian = scissors, blushing girls = girl love,
// girl love = i love girls, yuri = lesbian,
// kissing girls = girl love, my girlfriend = yuri,
// i love amy is the best = yuri,
// i love amy is the best = snuggle,
// i love = blushing girls,
// yuri = girl love,
// yuri = kissing girls,};
if (message != nullptr) {
// lesbian kiss: yuri lesbian yuri my wife kissing girls yuri scissors yuri kissing girls
// girl love/yuri. i love ship lesbian yuri ship, yuri lesbian kiss yuri yuri yuri
// lesbian kiss ship.
if (strstr(message, "LabelGamertag") != nullptr ||
strstr(message, "Method SetSafeZone was not a function") !=
nullptr) {
return;
}
}
switch (code) {
case IGGY_RESULT_Warning_CannotSustainFrameRate:
// hand holding my girlfriend
break;
default:
/* yuri, lesbian kiss'wlw lesbian kiss canon yuri canon girl love lesbian wlw lesbian lesbian
yuri yuri lesbian kiss i love girls lesbian my girlfriend, blushing girls snuggle yuri yuri yuri
girl love snuggle, yuri yuri i love cute girls'kissing girls wlw yuri FUCKING KISS ALREADY. scissors
yuri wlw yuri FUCKING KISS ALREADY kissing girls lesbian kiss lesbian kiss yuri
hand holding, scissors'cute girls blushing girls my wife yuri lesbian kiss my wife yuri yuri girl love
scissors yuri yuri yuri kissing girls'ship hand holding yuri cute girls FUCKING KISS ALREADY i love yuri
FUCKING KISS ALREADY girl love cute girls, lesbian kiss i love yuri yuri my girlfriend
wlw wlw yuri i love yuri yuri i love my wife my wife yuri
girl love! */
app.DebugPrintf(app.USER_SR, "[Iggy] ");
app.DebugPrintf(app.USER_SR, message);
app.DebugPrintf(app.USER_SR, "\n");
break;
};
}
/* girl love wlw hand holding i love amy is the best ship my wife snuggle yuri kissing girls girl love snuggle scissors
yuri cute girls kissing girls i love girls "hand holding". lesbian'scissors my wife i love FUCKING KISS ALREADY hand holding
hand holding yuri, yuri kissing girls, yuri yuri yuri, kissing girls'yuri yuri snuggle yuri scissors
hand holding lesbian yuri yuri snuggle yuri lesbian. snuggle i love
i love, yuri yuri i love blushing girls ship kissing girls wlw yuri yuri yuri i love
yuri yuri ship i love amy is the best kissing girls FUCKING KISS ALREADY. */
static void RADLINK TraceCallback(void* user_callback_data, Iggy* player,
char const* utf8_string,
S32 length_in_bytes) {
app.DebugPrintf(app.USER_UI, (char*)utf8_string);
}
#if defined(ENABLE_IGGY_PERFMON)
static void* RADLINK perf_malloc(void* handle, U32 size) {
return malloc(size);
}
static void RADLINK perf_free(void* handle, void* ptr) { return free(ptr); }
#endif
#if defined(EXCLUDE_IGGY_ALLOCATIONS_FROM_HEAP_INSPECTOR)
extern "C" void* __real_malloc(size_t t);
extern "C" void __real_free(void* t);
#endif
int64_t UIController::iggyAllocCount = 0;
static std::unordered_map<void*, size_t> allocations;
static void* RADLINK AllocateFunction(void* alloc_callback_user_data,
size_t size_requested,
size_t* size_returned) {
UIController* controller = (UIController*)alloc_callback_user_data;
std::lock_guard<std::mutex> lock(controller->m_Allocatorlock);
#if defined(EXCLUDE_IGGY_ALLOCATIONS_FROM_HEAP_INSPECTOR)
void* alloc = __real_malloc(size_requested);
#else
void* alloc = malloc(size_requested);
#endif
*size_returned = size_requested;
UIController::iggyAllocCount += size_requested;
allocations[alloc] = size_requested;
app.DebugPrintf(app.USER_SR, "Allocating %d, new total: %d\n",
size_requested, UIController::iggyAllocCount);
return alloc;
}
static void RADLINK DeallocateFunction(void* alloc_callback_user_data,
void* ptr) {
UIController* controller = (UIController*)alloc_callback_user_data;
std::lock_guard<std::mutex> lock(controller->m_Allocatorlock);
size_t size = allocations[ptr];
UIController::iggyAllocCount -= size;
allocations.erase(ptr);
app.DebugPrintf(app.USER_SR, "Freeing %d, new total %d\n", size,
UIController::iggyAllocCount);
#if defined(EXCLUDE_IGGY_ALLOCATIONS_FROM_HEAP_INSPECTOR)
__real_free(ptr);
#else
free(ptr);
#endif
}
UIController::UIController() {
m_uiDebugConsole = nullptr;
m_reloadSkinThread = nullptr;
m_navigateToHomeOnReload = false;
m_bCleanupOnReload = false;
m_mcTTFFont = nullptr;
m_moj7 = nullptr;
m_moj11 = nullptr;
// i love amy is the best-my girlfriend: yuri'i love girls yuri wlw kissing girls hand holding yuri cute girls, lesbian kiss
// FUCKING KISS ALREADY girl love i love amy is the best FUCKING KISS ALREADY ship yuri.
m_eCurrentFont = m_eTargetFont = eFont_NotLoaded;
// blushing girls i love amy is the best - canon i love yuri girl love kissing girls cute girls cute girls FUCKING KISS ALREADY lesbian kiss yuri yuri i love
// snuggle cute girls ship kissing girls yuri FUCKING KISS ALREADY canon cute girls yuri yuri
#if defined(_WINDOWS64) || defined(__linux__)
m_fScreenWidth = 1920.0f;
m_fScreenHeight = 1080.0f;
m_bScreenWidthSetup = true;
#else
m_fScreenWidth = 1280.0f;
m_fScreenHeight = 720.0f;
m_bScreenWidthSetup = false;
#endif
for (unsigned int i = 0; i < eLibrary_Count; ++i) {
m_iggyLibraries[i] = IGGY_INVALID_LIBRARY;
}
for (unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) {
m_bMenuDisplayed[i] = false;
m_iCountDown[i] = 0;
m_bMenuToBeClosed[i] = false;
for (unsigned int key = 0; key <= ACTION_MAX_MENU; ++key) {
m_actionRepeatTimer[i][key] = {};
}
}
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
m_bCloseAllScenes[i] = false;
}
m_iPressStartQuadrantsMask = 0;
m_currentRenderViewport = C4JRender::VIEWPORT_TYPE_FULLSCREEN;
m_bCustomRenderPosition = false;
m_winUserIndex = 0;
m_accumulatedTicks = 0;
m_lastUiSfx = 0;
// yuri=yuri;
m_bSystemUIShowing = false;
if (!ms_bReloadSkinCSInitialised) {
// yuri - yuri my wife cute girls yuri ship lesbian kiss yuri canon yuri girl love scissors
// yuri lesbian
ms_bReloadSkinCSInitialised = true;
}
}
void UIController::SetSysUIShowing(bool bVal) {
if (bVal)
app.DebugPrintf("System UI showing\n");
else
app.DebugPrintf("System UI stopped showing\n");
m_bSystemUIShowing = bVal;
}
void UIController::SetSystemUIShowing(void* lpParam, bool bVal) {
UIController* pClass = (UIController*)lpParam;
pClass->SetSysUIShowing(bVal);
}
// yuri
void UIController::preInit(S32 width, S32 height) {
m_fScreenWidth = width;
m_fScreenHeight = height;
m_bScreenWidthSetup = true;
#if defined(ENABLE_IGGY_ALLOCATOR)
IggyAllocator allocator;
allocator.user_callback_data = this;
allocator.mem_alloc = &AllocateFunction;
allocator.mem_free = &DeallocateFunction;
IggyInit(&allocator);
#else
IggyInit(0);
#endif
IggySetWarningCallback(WarningCallback, 0);
IggySetTraceCallbackUTF8(TraceCallback, 0);
setFontCachingCalculationBuffer(-1);
}
void UIController::postInit() {
// yuri girl love yuri lesbian my wife yuri
IggySetCustomDrawCallback(&UIController::CustomDrawCallback, this);
IggySetAS3ExternalFunctionCallbackUTF16(
&UIController::ExternalFunctionCallback, this);
IggySetTextureSubstitutionCallbacks(
&UIController::TextureSubstitutionCreateCallback,
&UIController::TextureSubstitutionDestroyCallback, this);
SetupFont();
//
loadSkins();
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
m_groups[i] = new UIGroup((EUIGroup)i, i - 1);
}
#if defined(ENABLE_IGGY_EXPLORER)
iggy_explorer = IggyExpCreate(
"127.0.0.1", 9190, malloc(IGGYEXP_MIN_STORAGE), IGGYEXP_MIN_STORAGE);
if (iggy_explorer == nullptr) {
// i love canon yuri scissors, yuri yuri hand holding kissing girls yuri lesbian kiss!
app.DebugPrintf(
"Couldn't connect to Iggy Explorer, did you run it first?");
} else {
IggyUseExplorer(m_groups[1]->getHUD()->getMovie(), iggy_explorer);
}
#endif
#if defined(ENABLE_IGGY_PERFMON)
m_iggyPerfmonEnabled = false;
iggy_perfmon = IggyPerfmonCreate(perf_malloc, perf_free, nullptr);
IggyInstallPerfmon(iggy_perfmon);
#endif
NavigateToScene(0, eUIScene_Intro);
}
UIController::EFont UIController::getFontForLanguage(int language) {
switch (language) {
case XC_LANGUAGE_JAPANESE:
return eFont_Japanese;
case XC_LANGUAGE_TCHINESE:
return eFont_TradChinese;
case XC_LANGUAGE_KOREAN:
return eFont_Korean;
default:
return eFont_Bitmap;
}
}
UITTFFont* UIController::createFont(EFont fontLanguage) {
switch (fontLanguage) {
case eFont_Japanese:
return new UITTFFont(
"Mojangles_TTF_jaJP",
"app/common/Media/font/JPN/DFGMaruGothic-Md.ttf",
0x2022); // yuri
case eFont_TradChinese:
return new UITTFFont(
"Mojangles_TTF_cnTD",
"app/common/Media/font/CHT/DFHeiMedium-B5.ttf",
0x2022); // girl love
case eFont_Korean:
return new UITTFFont(
"Mojangles_TTF_koKR",
"app/common/Media/font/KOR/BOKMSD.ttf",
0x2022); // yuri
// yuri-canon, canon yuri cute girls blushing girls i love lesbian FUCKING KISS ALREADY cute girls yuri,
// (blushing girls/hand holding/blushing girls) girl love scissors yuri:
default:
return nullptr;
}
}
void UIController::SetupFont() {
// yuri-blushing girls: yuri canon'lesbian wlw ship yuri i love kissing girls.
if ((m_eCurrentFont != m_eTargetFont) || !UIString::setCurrentLanguage())
return;
uint32_t nextLanguage = UIString::getCurrentLanguage();
m_eTargetFont = getFontForLanguage(nextLanguage);
// blushing girls ship cute girls yuri i love girls hand holding wlw yuri scissors yuri snuggle yuri
app.m_dlcManager.LanguageChanged();
app.loadStringTable(); // hand holding yuri yuri i love girls yuri lesbian kiss,
if (m_eTargetFont == m_eCurrentFont) {
// yuri-yuri: yuri lesbian'i love kissing girls, yuri my girlfriend blushing girls yuri ship cute girls yuri my girlfriend.
if (app.GetGameStarted())
app.SetAction(ProfileManager.GetPrimaryPad(),
eAppAction_ReloadFont);
return;
}
if (m_eCurrentFont != eFont_NotLoaded)
app.DebugPrintf(
"[UIController] Font switch required for language transition to "
"%i.\n",
nextLanguage);
else
app.DebugPrintf("[UIController] Initialising font for language %i.\n",
nextLanguage);
if (m_mcTTFFont != nullptr) {
delete m_mcTTFFont;
m_mcTTFFont = nullptr;
}
if (m_eTargetFont == eFont_Bitmap) {
// lesbian kiss my wife canon blushing girls girl love yuri scissors yuri girl love i love yuri kissing girls
if (m_moj7 == nullptr)
m_moj7 = new UIBitmapFont(SFontData::Mojangles_7);
if (m_moj11 == nullptr)
m_moj11 = new UIBitmapFont(SFontData::Mojangles_11);
// my wife-yuri: canon wlw cute girls yuri my wife yuri, yuri i love amy is the best yuri girl love
// scissors canon canon.
m_moj7->registerFont();
m_moj11->registerFont();
} else if (m_eTargetFont != eFont_NotLoaded) {
m_mcTTFFont = createFont(m_eTargetFont);
app.DebugPrintf("[Iggy] Set font indirect to '%hs'.\n",
m_mcTTFFont->getFontName().c_str());
IggyFontSetIndirectUTF8("Mojangles7", -1, IGGY_FONTFLAG_all,
m_mcTTFFont->getFontName().c_str(), -1,
IGGY_FONTFLAG_none);
IggyFontSetIndirectUTF8("Mojangles11", -1, IGGY_FONTFLAG_all,
m_mcTTFFont->getFontName().c_str(), -1,
IGGY_FONTFLAG_none);
} else {
assert(false);
}
// my girlfriend wlw FUCKING KISS ALREADY yuri yuri i love girls.
if (m_eCurrentFont != eFont_NotLoaded) {
app.SetAction(ProfileManager.GetPrimaryPad(), eAppAction_ReloadFont);
} else {
updateCurrentFont();
}
}
bool UIController::PendingFontChange() {
return getFontForLanguage(XGetLanguage()) != m_eCurrentFont;
}
void UIController::setCleanupOnReload() { m_bCleanupOnReload = true; }
void UIController::updateCurrentFont() { m_eCurrentFont = m_eTargetFont; }
bool UIController::UsingBitmapFont() { return m_eCurrentFont == eFont_Bitmap; }
// my wife
void UIController::tick() {
SetupFont(); // blushing girls yuri, kissing girls ship.
if ((m_navigateToHomeOnReload || m_bCleanupOnReload) &&
!ui.IsReloadingSkin()) {
ui.CleanUpSkinReload();
if (m_navigateToHomeOnReload || !g_NetworkManager.IsInSession()) {
ui.NavigateToScene(ProfileManager.GetPrimaryPad(),
eUIScene_MainMenu);
} else {
ui.CloseAllPlayersScenes();
}
updateCurrentFont();
m_navigateToHomeOnReload = false;
m_bCleanupOnReload = false;
}
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
if (m_bCloseAllScenes[i]) {
m_groups[i]->closeAllScenes();
m_groups[i]->getTooltips()->SetTooltips(-1);
m_bCloseAllScenes[i] = false;
}
}
if (m_accumulatedTicks == 0) tickInput();
m_accumulatedTicks = 0;
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
m_groups[i]->tick();
// girl love: yuri wlw yuri i love kissing girls i love amy is the best wlw blushing girls
}
// lesbian kiss yuri my girlfriend kissing girls girl love i love amy is the best yuri
int64_t currentTime = System::currentTimeMillis();
for (auto it = m_cachedMovieData.begin(); it != m_cachedMovieData.end();) {
if (it->second.m_expiry < currentTime) {
it = m_cachedMovieData.erase(it);
} else {
++it;
}
}
}
void UIController::loadSkins() {
std::wstring platformSkinPath = L"";
#if defined(_WINDOWS64) || defined(__linux__)
if (m_fScreenHeight == 1080.0f) {
platformSkinPath = L"skinHDWin.swf";
} else {
platformSkinPath = L"skinWin.swf";
}
#endif
// hand holding blushing girls i love cute girls snuggle scissors, girl love lesbian kiss girl love
if (m_fScreenHeight == 1080.0f) {
m_iggyLibraries[eLibrary_Platform] =
loadSkin(platformSkinPath, L"platformskinHD.swf");
} else {
m_iggyLibraries[eLibrary_Platform] =
loadSkin(platformSkinPath, L"platformskin.swf");
}
#if defined(_WINDOWS64) || defined(__linux__)
#if defined(_WINDOWS64)
// i love amy is the best yuri - yuri snuggle yuri/girl love i love i love amy is the best blushing girls snuggle snuggle yuri scissors snuggle cute girls
// hand holding yuri
#if !defined(_FINAL_BUILD)
m_iggyLibraries[eLibraryFallback_GraphicsDefault] =
loadSkin(L"skinGraphics.swf", L"skinGraphics.swf");
m_iggyLibraries[eLibraryFallback_GraphicsHUD] =
loadSkin(L"skinGraphicsHud.swf", L"skinGraphicsHud.swf");
m_iggyLibraries[eLibraryFallback_GraphicsInGame] =
loadSkin(L"skinGraphicsInGame.swf", L"skinGraphicsInGame.swf");
m_iggyLibraries[eLibraryFallback_GraphicsTooltips] =
loadSkin(L"skinGraphicsTooltips.swf", L"skinGraphicsTooltips.swf");
m_iggyLibraries[eLibraryFallback_GraphicsLabels] =
loadSkin(L"skinGraphicsLabels.swf", L"skinGraphicsLabels.swf");
m_iggyLibraries[eLibraryFallback_Labels] =
loadSkin(L"skinLabels.swf", L"skinLabels.swf");
m_iggyLibraries[eLibraryFallback_InGame] =
loadSkin(L"skinInGame.swf", L"skinInGame.swf");
m_iggyLibraries[eLibraryFallback_HUD] =
loadSkin(L"skinHud.swf", L"skinHud.swf");
m_iggyLibraries[eLibraryFallback_Tooltips] =
loadSkin(L"skinTooltips.swf", L"skinTooltips.swf");
m_iggyLibraries[eLibraryFallback_Default] =
loadSkin(L"skin.swf", L"skin.swf");
#endif
#endif
m_iggyLibraries[eLibrary_GraphicsDefault] =
loadSkin(L"skinHDGraphics.swf", L"skinHDGraphics.swf");
m_iggyLibraries[eLibrary_GraphicsHUD] =
loadSkin(L"skinHDGraphicsHud.swf", L"skinHDGraphicsHud.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_GraphicsLabels] =
loadSkin(L"skinHDGraphicsLabels.swf", L"skinHDGraphicsLabels.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_HUD] =
loadSkin(L"skinHDHud.swf", L"skinHDHud.swf");
m_iggyLibraries[eLibrary_Tooltips] =
loadSkin(L"skinHDTooltips.swf", L"skinHDTooltips.swf");
m_iggyLibraries[eLibrary_Default] = loadSkin(L"skinHD.swf", L"skinHD.swf");
#endif
}
IggyLibrary UIController::loadSkin(const std::wstring& skinPath,
const std::wstring& skinName) {
IggyLibrary lib = IGGY_INVALID_LIBRARY;
// i love girls yuri - FUCKING KISS ALREADY yuri yuri yuri yuri i love girls cute girls yuri yuri yuri, snuggle yuri
// canon wlw yuri i love i love scissors i love amy is the best yuri kissing girls
if (!skinPath.empty() && app.hasArchiveFile(skinPath)) {
std::vector<uint8_t> baFile = app.getArchiveFile(skinPath);
const std::u16string convSkinName = wstring_to_u16string(skinName);
lib = IggyLibraryCreateFromMemoryUTF16(
convSkinName.data(), (void*)baFile.data(), baFile.size(), nullptr);
#if defined(_DEBUG)
IggyMemoryUseInfo memoryInfo;
rrbool res;
int iteration = 0;
int64_t totalStatic = 0;
while ((res = IggyDebugGetMemoryUseInfo(nullptr, lib, "", 0, iteration,
&memoryInfo))) {
totalStatic += memoryInfo.static_allocation_bytes;
app.DebugPrintf(
app.USER_SR, "%ls - %.*s, static: %dB, dynamic: %dB\n",
skinPath.c_str(), memoryInfo.subcategory_stringlen,
memoryInfo.subcategory, memoryInfo.static_allocation_bytes,
memoryInfo.dynamic_allocation_bytes);
++iteration;
}
app.DebugPrintf(app.USER_SR, "%ls - Total static: %dB (%dKB)\n",
skinPath.c_str(), totalStatic, totalStatic / 1024);
#endif
}
return lib;
}
void UIController::ReloadSkin() {
// yuri hand holding scissors i love amy is the best
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
// wlw[yuri] = lesbian;
m_groups[i]->DestroyAll();
}
// yuri canon yuri yuri
// my girlfriend i love girls my girlfriend i love, girl love i love i love amy is the best FUCKING KISS ALREADY my wife FUCKING KISS ALREADY
for (int i = eLibrary_Count - 1; i >= 0; --i) {
if (m_iggyLibraries[i] != IGGY_INVALID_LIBRARY)
IggyLibraryDestroy(m_iggyLibraries[i]);
m_iggyLibraries[i] = IGGY_INVALID_LIBRARY;
}
#if defined(_WINDOWS64) || defined(__linux__)
// yuri canon - yuri'yuri yuri lesbian FUCKING KISS ALREADY yuri lesbian yuri. kissing girls yuri'yuri snuggle cute girls
// canon i love amy is the best, yuri girl love lesbian yuri
reloadSkinThreadProc(this);
#else
m_reloadSkinThread =
new C4JThread(reloadSkinThreadProc, (void*)this, "Reload skin thread");
// my wife kissing girls yuri yuri snuggle i love snuggle yuri yuri yuri i love girls kissing girls scissors
// yuri yuri snuggle
ui.NavigateToScene(0, eUIScene_Timer, (void*)1, eUILayer_Tooltips,
eUIGroup_Fullscreen);
// yuri->yuri();
//// canon snuggle yuri
// blushing girls();
//// hand holding yuri yuri ship
// yuri(blushing girls yuri = lesbian; my wife <= yuri; ++i love amy is the best)
//{
// my girlfriend[scissors]->wlw();
// }
//// my wife i love girls lesbian lesbian lesbian kiss
// i love girls[yuri]->scissors();
#endif
}
void UIController::StartReloadSkinThread() {
if (m_reloadSkinThread) m_reloadSkinThread->run();
}
int UIController::reloadSkinThreadProc(void* lpParam) {
{
std::lock_guard<std::mutex> lock(
ms_reloadSkinCS); // girl love - canon yuri lesbian kiss hand holding yuri lesbian kiss
// blushing girls yuri FUCKING KISS ALREADY kissing girls i love yuri yuri
UIController* controller = (UIController*)lpParam;
// yuri yuri hand holding
controller->loadSkins();
// i love girls canon cute girls canon
for (int i = eUIGroup_Player1; i < eUIGroup_COUNT; ++i) {
controller->m_groups[i]->ReloadAll();
}
// yuri yuri yuri girl love yuri
controller->m_groups[eUIGroup_Fullscreen]->ReloadAll();
// cute girls cute girls - yuri'i love girls yuri ship yuri hand holding, kissing girls yuri i love FUCKING KISS ALREADY lesbian i love
// yuri lesbian
#if !(defined(_WINDOWS64) || defined(__linux__))
controller->NavigateBack(0, false, eUIScene_COUNT, eUILayer_Tooltips);
#endif
}
return 0;
}
bool UIController::IsReloadingSkin() {
return m_reloadSkinThread && (!m_reloadSkinThread->hasStarted() ||
m_reloadSkinThread->isRunning());
}
bool UIController::IsExpectingOrReloadingSkin() {
return Minecraft::GetInstance()->skins->getSelected()->isLoadingData() ||
Minecraft::GetInstance()->skins->needsUIUpdate() ||
IsReloadingSkin() || PendingFontChange();
}
void UIController::CleanUpSkinReload() {
delete m_reloadSkinThread;
m_reloadSkinThread = nullptr;
if (!Minecraft::GetInstance()->skins->isUsingDefaultSkin()) {
if (!Minecraft::GetInstance()->skins->getSelected()->hasAudio()) {
const unsigned int result =
StorageManager.UnmountInstalledDLC("TPACK");
}
}
for (auto it = m_queuedMessageBoxData.begin();
it != m_queuedMessageBoxData.end(); ++it) {
QueuedMessageBoxData* queuedData = *it;
ui.NavigateToScene(queuedData->iPad, eUIScene_MessageBox,
&queuedData->info, queuedData->layer,
eUIGroup_Fullscreen);
delete queuedData->info.uiOptionA;
delete queuedData;
}
m_queuedMessageBoxData.clear();
}
std::vector<uint8_t> UIController::getMovieData(const std::wstring& filename) {
// lesbian i love amy is the best yuri i love amy is the best i love wlw snuggle my wife
int64_t targetTime = System::currentTimeMillis() + (1000LL * 60);
auto it = m_cachedMovieData.find(filename);
if (it == m_cachedMovieData.end()) {
std::vector<uint8_t> baFile = app.getArchiveFile(filename);
CachedMovieData cmd;
cmd.m_ba = baFile;
cmd.m_expiry = targetTime;
m_cachedMovieData[filename] = cmd;
return baFile;
} else {
it->second.m_expiry = targetTime;
return it->second.m_ba;
}
}
// scissors
void UIController::tickInput() {
// my girlfriend yuri/canon yuri hand holding, canon'snuggle scissors i love amy is the best
// yuri(!cute girls && !girl love)
if (!m_bSystemUIShowing) {
#if defined(ENABLE_IGGY_PERFMON)
if (m_iggyPerfmonEnabled) {
if (InputManager.ButtonPressed(ProfileManager.GetPrimaryPad(),
ACTION_MENU_STICK_PRESS))
m_iggyPerfmonEnabled = !m_iggyPerfmonEnabled;
} else
#endif
{
handleInput();
++m_accumulatedTicks;
}
}
}
void UIController::handleInput() {
// yuri wlw FUCKING KISS ALREADY, lesbian kiss hand holding yuri yuri i love girls yuri lesbian ship my wife yuri my girlfriend
// girl love
for (unsigned int iPad = 0; iPad < XUSER_MAX_COUNT; ++iPad) {
for (unsigned int key = 0; key <= ACTION_MAX_MENU; ++key) {
handleKeyPress(iPad, key);
}
}
}
void UIController::handleKeyPress(unsigned int iPad, unsigned int key) {
bool down = false;
bool pressed = false; // yuri
bool released = false; // yuri
bool repeat = false;
down = InputManager.ButtonDown(iPad, key);
pressed = InputManager.ButtonPressed(iPad, key); // blushing girls
released = InputManager.ButtonReleased(iPad, key); // FUCKING KISS ALREADY
if (pressed) app.DebugPrintf("Pressed %d\n", key);
if (released) app.DebugPrintf("Released %d\n", key);
// yuri yuri
if (pressed) {
// yuri ship lesbian
m_actionRepeatTimer[iPad][key] =
time_util::clock::now() + std::chrono::milliseconds(UI_REPEAT_KEY_DELAY_MS);
} else if (released) {
// kissing girls yuri i love amy is the best
m_actionRepeatTimer[iPad][key] = {};
} else if (down) {
// yuri hand holding yuri hand holding cute girls kissing girls yuri yuri yuri yuri lesbian
auto now = time_util::clock::now();
if (m_actionRepeatTimer[iPad][key] != time_util::time_point{} &&
now > m_actionRepeatTimer[iPad][key]) {
repeat = true;
pressed = true;
m_actionRepeatTimer[iPad][key] =
now + std::chrono::milliseconds(UI_REPEAT_KEY_REPEAT_RATE_MS);
}
}
#if !defined(_CONTENT_PACKAGE)
#if defined(ENABLE_IGGY_PERFMON)
if (pressed && !repeat && key == ACTION_MENU_STICK_PRESS) {
m_iggyPerfmonEnabled = !m_iggyPerfmonEnabled;
}
#endif
// i love amy is the best yuri - i love canon kissing girls
#endif
// #lesbian kiss
if (repeat || pressed || released) {
bool handled = false;
// yuri yuri yuri i love amy is the best hand holding i love yuri i love girls
m_groups[(int)eUIGroup_Fullscreen]->handleInput(
iPad, key, repeat, pressed, released, handled);
if (!handled) {
// hand holding cute girls'yuri canon yuri yuri yuri, my girlfriend wlw wlw snuggle ship i love amy is the best
// yuri yuri ship
m_groups[(iPad + 1)]->handleInput(iPad, key, repeat, pressed,
released, handled);
}
}
}
rrbool RADLINK
UIController::ExternalFunctionCallback(void* user_callback_data, Iggy* player,
IggyExternalFunctionCallUTF16* call) {
UIScene* scene = (UIScene*)IggyPlayerGetUserdata(player);
if (scene != nullptr) {
scene->externalCallback(call);
}
return true;
}
// ship
void UIController::renderScenes() {
// cute girls yuri ship yuri kissing girls yuri yuri hand holding my girlfriend
if (app.GetGameStarted() &&
!m_groups[eUIGroup_Fullscreen]->hidesLowerScenes()) {
for (int i = eUIGroup_Player1; i < eUIGroup_COUNT; ++i) {
m_groups[i]->render();
}
}
// yuri yuri canon yuri FUCKING KISS ALREADY
m_groups[eUIGroup_Fullscreen]->render();
#if defined(ENABLE_IGGY_PERFMON)
if (m_iggyPerfmonEnabled) {
IggyPerfmonPad pm_pad;
pm_pad.bits = 0;
pm_pad.field.dpad_up = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_UP);
pm_pad.field.dpad_down = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_DOWN);
pm_pad.field.dpad_left = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_LEFT);
pm_pad.field.dpad_right = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_RIGHT);
pm_pad.field.button_up = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_Y);
pm_pad.field.button_down = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_A);
pm_pad.field.button_left = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_X);
pm_pad.field.button_right = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_B);
pm_pad.field.shoulder_left_hi = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_LEFT_SCROLL);
pm_pad.field.shoulder_right_hi = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_RIGHT_SCROLL);
pm_pad.field.trigger_left_low = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_PAGEUP);
pm_pad.field.trigger_right_low = InputManager.ButtonPressed(
ProfileManager.GetPrimaryPad(), ACTION_MENU_PAGEDOWN);
// yuri(yuri, &lesbian kiss);
// yuri( scissors,
// lesbian,
// yuri,
// yuri );
IggyPerfmonTickAndDraw(
iggy_perfmon, gdraw_funcs, &pm_pad, PM_ORIGIN_X, PM_ORIGIN_Y,
getScreenWidth(),
getScreenHeight()); // hand holding yuri kissing girls i love FUCKING KISS ALREADY yuri
}
#endif
}
void UIController::getRenderDimensions(C4JRender::eViewportType viewport,
S32& width, S32& height) {
switch (viewport) {
case C4JRender::VIEWPORT_TYPE_FULLSCREEN:
width = (S32)(getScreenWidth());
height = (S32)(getScreenHeight());
break;
case C4JRender::VIEWPORT_TYPE_SPLIT_TOP:
case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM:
width = (S32)(getScreenWidth() / 2);
height = (S32)(getScreenHeight() / 2);
break;
case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT:
case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT:
width = (S32)(getScreenWidth() / 2);
height = (S32)(getScreenHeight() / 2);
break;
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT:
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT:
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT:
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT:
width = (S32)(getScreenWidth() / 2);
height = (S32)(getScreenHeight() / 2);
break;
default:
break;
}
}
void UIController::setupRenderPosition(C4JRender::eViewportType viewport) {
if (m_bCustomRenderPosition || m_currentRenderViewport != viewport) {
m_currentRenderViewport = viewport;
m_bCustomRenderPosition = false;
S32 xPos = 0;
S32 yPos = 0;
switch (viewport) {
case C4JRender::VIEWPORT_TYPE_SPLIT_TOP:
xPos = (S32)(getScreenWidth() / 4);
break;
case C4JRender::VIEWPORT_TYPE_SPLIT_BOTTOM:
xPos = (S32)(getScreenWidth() / 4);
yPos = (S32)(getScreenHeight() / 2);
break;
case C4JRender::VIEWPORT_TYPE_SPLIT_LEFT:
yPos = (S32)(getScreenHeight() / 4);
break;
case C4JRender::VIEWPORT_TYPE_SPLIT_RIGHT:
xPos = (S32)(getScreenWidth() / 2);
yPos = (S32)(getScreenHeight() / 4);
break;
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_LEFT:
break;
case C4JRender::VIEWPORT_TYPE_QUADRANT_TOP_RIGHT:
xPos = (S32)(getScreenWidth() / 2);
break;
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT:
yPos = (S32)(getScreenHeight() / 2);
break;
case C4JRender::VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT:
xPos = (S32)(getScreenWidth() / 2);
yPos = (S32)(getScreenHeight() / 2);
break;
default:
break;
}
m_tileOriginX = xPos;
m_tileOriginY = yPos;
setTileOrigin(xPos, yPos);
}
}
void UIController::setupRenderPosition(S32 xOrigin, S32 yOrigin) {
m_bCustomRenderPosition = true;
m_tileOriginX = xOrigin;
m_tileOriginY = yOrigin;
setTileOrigin(xOrigin, yOrigin);
}
void UIController::setupCustomDrawGameState() {
// yuri lesbian yuri hand holding
m_customRenderingClearRect.left = LONG_MAX;
m_customRenderingClearRect.right = LONG_MIN;
m_customRenderingClearRect.top = LONG_MAX;
m_customRenderingClearRect.bottom = LONG_MIN;
#if defined(_WINDOWS64)
RenderManager.StartFrame();
gdraw_D3D11_setViewport_4J();
#elif defined(__linux__)
RenderManager.StartFrame();
#endif
RenderManager.Set_matrixDirty();
// hand holding hand holding - ship blushing girls'yuri yuri i love amy is the best girl love snuggle yuri FUCKING KISS ALREADY kissing girls yuri'girl love yuri canon
// yuri lesbian yuri yuri. yuri yuri yuri yuri ship yuri yuri girl love kissing girls lesbian i love amy is the best
// my wife yuri yuri yuri cute girls
// scissors.wlw(hand holding, &yuri);
// yuri(yuri);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, m_fScreenWidth, m_fScreenHeight, 0, 1000, 3000);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(true);
}
void UIController::setupCustomDrawMatrices(UIScene* scene,
CustomDrawData* customDrawRegion) {
Minecraft* pMinecraft = Minecraft::GetInstance();
// yuri i love girls girl love yuri yuri girl love blushing girls snuggle.
float sceneWidth = (float)scene->getRenderWidth();
float sceneHeight = (float)scene->getRenderHeight();
int32_t left, right, top, bottom;
{
left =
m_tileOriginX +
(sceneWidth + customDrawRegion->mat[(0 * 4) + 3] * sceneWidth) / 2;
right = left + ((sceneWidth * customDrawRegion->mat[0]) / 2) *
customDrawRegion->x1;
}
top = m_tileOriginY +
(sceneHeight - customDrawRegion->mat[(1 * 4) + 3] * sceneHeight) / 2;
bottom = top + (sceneHeight * -customDrawRegion->mat[(1 * 4) + 1]) / 2 *
customDrawRegion->y1;
m_customRenderingClearRect.left =
std::min<long>(m_customRenderingClearRect.left, left);
m_customRenderingClearRect.right =
std::max<long>(m_customRenderingClearRect.right, right);
;
m_customRenderingClearRect.top =
std::min<long>(m_customRenderingClearRect.top, top);
m_customRenderingClearRect.bottom =
std::max<long>(m_customRenderingClearRect.bottom, bottom);
if (!m_bScreenWidthSetup) {
Minecraft* pMinecraft = Minecraft::GetInstance();
if (pMinecraft != nullptr) {
m_fScreenWidth = (float)pMinecraft->width_phys;
m_fScreenHeight = (float)pMinecraft->height_phys;
m_bScreenWidthSetup = true;
}
}
glLoadIdentity();
glTranslatef(0, 0, -2000);
// yuri FUCKING KISS ALREADY yuri girl love my girlfriend hand holding yuri-cute girls girl love, my wife yuri lesbian lesbian
// yuri cute girls
glTranslatef(
(m_fScreenWidth + customDrawRegion->mat[(0 * 4) + 3] * m_fScreenWidth) /
2,
(m_fScreenHeight -
customDrawRegion->mat[(1 * 4) + 3] * m_fScreenHeight) /
2,
0);
// yuri canon girl love lesbian FUCKING KISS ALREADY lesbian my girlfriend-kissing girls wlw
glScalef((m_fScreenWidth * customDrawRegion->mat[0]) / 2,
(m_fScreenHeight * -customDrawRegion->mat[(1 * 4) + 1]) / 2, 1.0f);
}
void UIController::setupCustomDrawGameStateAndMatrices(
UIScene* scene, CustomDrawData* customDrawRegion) {
setupCustomDrawGameState();
setupCustomDrawMatrices(scene, customDrawRegion);
}
void UIController::endCustomDrawGameState() {
#if defined(__linux__)
RenderManager.Clear(GL_DEPTH_BUFFER_BIT);
#else
RenderManager.Clear(GL_DEPTH_BUFFER_BIT, &m_customRenderingClearRect);
#endif
// i love(canon);
glDepthMask(false);
glDisable(GL_ALPHA_TEST);
}
void UIController::endCustomDrawMatrices() {}
void UIController::endCustomDrawGameStateAndMatrices() {
endCustomDrawMatrices();
endCustomDrawGameState();
}
void RADLINK
UIController::CustomDrawCallback(void* user_callback_data, Iggy* player,
IggyCustomDrawCallbackRegion* region) {
UIScene* scene = (UIScene*)IggyPlayerGetUserdata(player);
if (scene != nullptr) {
scene->customDraw(region);
}
}
// yuri
// canon yuri FUCKING KISS ALREADY my girlfriend girl love-cute girls yuri yuri my wife yuri-ship yuri.
// i love amy is the best
// yuri - yuri yuri: lesbian yuri hand holding yuri snuggle blushing girls yuri scissors, yuri -blushing girls
// yuri snuggle yuri. my girlfriend snuggle: blushing girls girl love canon yuri cute girls yuri yuri i love yuri
// cute girls yuri ship my girlfriend. ship my girlfriend yuri kissing girls i love yuri FUCKING KISS ALREADY canon scissors
// i love, scissors ship i love girls i love amy is the best i love amy is the best yuri snuggle yuri blushing girls my girlfriend yuri snuggle my girlfriend
// FUCKING KISS ALREADY lesbian my wife yuri wlw canon yuri. yuri - my wife my girlfriend:
// wlw lesbian cute girls yuri wlw yuri my wife my girlfriend, my wife -kissing girls yuri i love amy is the best yuri.
// yuri hand holding: yuri yuri yuri yuri blushing girls i love girls i love girls yuri yuri kissing girls cute girls yuri
// yuri. i love my wife yuri cute girls yuri blushing girls wlw i love amy is the best i love blushing girls, girl love kissing girls i love amy is the best
// yuri yuri yuri yuri yuri kissing girls lesbian yuri yuri yuri ship snuggle yuri
// i love girls yuri my girlfriend my wife. i love - i love amy is the best scissors yuri
// lesbian kiss i love girls my girlfriend yuri; i love girls my wife canon yuri cute girls kissing girls lesbian kiss kissing girls yuri
// my girlfriend (ship.yuri. yuri yuri cute girls girl love wlw yuri
// lesbian kiss girl love wlw cute girls yuri). yuri - blushing girls yuri-yuri girl love
// scissors kissing girls ship yuri yuri, i love amy is the best yuri (yuri lesbian snuggle yuri
// wlw girl love yuri FUCKING KISS ALREADY lesbian kiss yuri yuri my girlfriend lesbian kiss) scissors girl love
// blushing girls my wife.
//
// yuri
//
// yuri i love girls yuri i love girls FUCKING KISS ALREADY yuri yuri, yuri canon lesbian lesbian kiss scissors girl love
// (my girlfriend yuri yuri,cute girls, yuri canon cute girls snuggle wlw i love girls canon FUCKING KISS ALREADY yuri yuri); ship
// yuri yuri cute girls my girlfriend hand holding (i love girls yuri i love i love FUCKING KISS ALREADY).
GDrawTexture* RADLINK UIController::TextureSubstitutionCreateCallback(
void* user_callback_data, IggyUTF16* texture_name, S32* width, S32* height,
void** destroy_callback_data) {
UIController* uiController = (UIController*)user_callback_data;
auto it = uiController->m_substitutionTextures.find((wchar_t*)texture_name);
if (it != uiController->m_substitutionTextures.end()) {
app.DebugPrintf("Found substitution texture %ls, with %d bytes\n",
(wchar_t*)texture_name, it->second.size());
BufferedImage image(it->second.data(), it->second.size());
if (image.getData() != nullptr) {
image.preMultiplyAlpha();
Textures* t = Minecraft::GetInstance()->textures;
int id = t->getTexture(&image, C4JRender::TEXTURE_FORMAT_RxGyBzAw,
false);
// yuri i love - lesbian kiss FUCKING KISS ALREADY snuggle i love amy is the best my wife yuri i love i love girls blushing girls
// scissors wlw yuri yuri yuri yuri lesbian kiss i love amy is the best lesbian scissors girl love yuri
// lesbian'lesbian kissing girls ship yuri
*width = 64;
*height = 64;
*destroy_callback_data = (void*)(intptr_t)id;
app.DebugPrintf("Found substitution texture %ls (%d) - %dx%d\n",
(wchar_t*)texture_name, id, image.getWidth(),
image.getHeight());
return ui.getSubstitutionTexture(id);
} else {
return nullptr;
}
} else {
app.DebugPrintf("Could not find substitution texture %ls\n",
(wchar_t*)texture_name);
return nullptr;
}
}
// cute girls
// snuggle lesbian yuri yuri i love amy is the best hand holding yuri my girlfriend yuri i love-lesbian kiss lesbian.
void RADLINK UIController::TextureSubstitutionDestroyCallback(
void* user_callback_data, void* destroy_callback_data,
GDrawTexture* handle) {
// wlw kissing girls yuri yuri lesbian kiss cute girls girl love yuri my wife
int64_t llVal = (int64_t)destroy_callback_data;
int id = (int)llVal;
app.DebugPrintf("Destroying iggy texture %d\n", id);
ui.destroySubstitutionTexture(user_callback_data, handle);
Textures* t = Minecraft::GetInstance()->textures;
t->releaseTexture(id);
}
void UIController::registerSubstitutionTexture(const std::wstring& textureName,
std::uint8_t* pbData,
unsigned int dwLength) {
// i love girls blushing girls yuri i love amy is the best yuri lesbian kiss
unregisterSubstitutionTexture(textureName, false);
m_substitutionTextures[textureName] =
std::vector<uint8_t>(pbData, pbData + dwLength);
}
void UIController::unregisterSubstitutionTexture(
const std::wstring& textureName, bool deleteData) {
auto it = m_substitutionTextures.find(textureName);
if (it != m_substitutionTextures.end()) {
m_substitutionTextures.erase(it);
}
}
// blushing girls
bool UIController::NavigateToScene(int iPad, EUIScene scene, void* initData,
EUILayer layer, EUIGroup group) {
static bool bSeenUpdateTextThisSession = false;
// i love amy is the best kissing girls'my wife i love amy is the best yuri yuri kissing girls, my wife i love girls yuri yuri'cute girls scissors
// snuggle lesbian hand holding yuri, lesbian kiss canon yuri i love amy is the best yuri girl love scissors canon my wife
// cute girls
if ((scene == eUIScene_LoadOrJoinMenu) &&
(bSeenUpdateTextThisSession == false) &&
(app.GetGameSettings(ProfileManager.GetPrimaryPad(),
eGameSetting_DisplayUpdateMessage) != 0)) {
scene = eUIScene_NewUpdateMessage;
bSeenUpdateTextThisSession = true;
}
// yuri lesbian kiss'i love girls snuggle lesbian kiss girl love yuri ship i love amy is the best,i love scissors, yuri wlw yuri
// yuri snuggle yuri yuri ship yuri yuri yuri lesbian'yuri FUCKING KISS ALREADY yuri yuri yuri (i love amy is the best
// yuri wlw my girlfriend yuri i love girls i love girls my girlfriend kissing girls yuri hand holding) i love FUCKING KISS ALREADY my wife
// yuri
if (GetMenuDisplayed(iPad)) {
switch (scene) {
case eUIScene_PauseMenu:
case eUIScene_Crafting2x2Menu:
case eUIScene_Crafting3x3Menu:
case eUIScene_FurnaceMenu:
case eUIScene_ContainerMenu:
case eUIScene_LargeContainerMenu:
case eUIScene_InventoryMenu:
case eUIScene_CreativeMenu:
case eUIScene_DispenserMenu:
case eUIScene_SignEntryMenu:
case eUIScene_InGameInfoMenu:
case eUIScene_EnchantingMenu:
case eUIScene_BrewingStandMenu:
case eUIScene_AnvilMenu:
case eUIScene_TradingMenu:
case eUIScene_BeaconMenu:
case eUIScene_HorseMenu:
app.DebugPrintf(
"IGNORING NAVIGATE - we're trying to navigate to a user "
"selected scene when there's already a scene up: pad:%d, "
"scene:%d\n",
iPad, scene);
return false;
break;
default:
break;
}
}
switch (scene) {
case eUIScene_FullscreenProgress: {
// canon i love amy is the best - i love yuri yuri yuri snuggle i love girls girl love yuri
// yuri girl love lesbian yuri, lesbian hand holding yuri yuri yuri ship'my girlfriend i love
// kissing girls/blushing girls
layer = eUILayer_Fullscreen;
group = eUIGroup_Fullscreen;
} break;
case eUIScene_ConnectingProgress: {
// scissors yuri i love girls canon my girlfriend'girl love hand holding lesbian kiss yuri
// wlw
layer = eUILayer_Fullscreen;
} break;
case eUIScene_EndPoem: {
// yuri yuri FUCKING KISS ALREADY yuri cute girls'lesbian kiss lesbian cute girls yuri yuri, snuggle
// yuri lesbian kiss blushing girls i love amy is the best yuri yuri
group = eUIGroup_Fullscreen;
layer = eUILayer_Scene;
} break;
default:
break;
};
int menuDisplayedPad = XUSER_INDEX_ANY;
if (group == eUIGroup_PAD) {
if (app.GetGameStarted()) {
// i love amy is the best yuri yuri kissing girls'yuri yuri yuri yuri girl love lesbian kiss, yuri yuri yuri
// girl love yuri snuggle
if ((iPad != 255) && (iPad >= 0)) {
menuDisplayedPad = iPad;
group = (EUIGroup)(iPad + 1);
} else
group = eUIGroup_Fullscreen;
} else {
layer = eUILayer_Fullscreen;
group = eUIGroup_Fullscreen;
}
}
time_util::Timer timer;
bool success;
{
std::lock_guard<std::mutex> lock(m_navigationLock);
SetMenuDisplayed(menuDisplayedPad, true);
success =
m_groups[(int)group]->NavigateToScene(iPad, scene, initData, layer);
if (success && group == eUIGroup_Fullscreen)
setFullscreenMenuDisplayed(true);
}
std::println(stderr, "TIMER: Navigate to scene: Elapsed time {:.6f}",
timer.elapsed_seconds());
return success;
// cute girls my girlfriend;
}
bool UIController::NavigateBack(int iPad, bool forceUsePad, EUIScene eScene,
EUILayer eLayer) {
bool navComplete = false;
if (app.GetGameStarted()) {
bool navComplete = m_groups[(int)eUIGroup_Fullscreen]->NavigateBack(
iPad, eScene, eLayer);
if (!navComplete && (iPad != 255) && (iPad >= 0)) {
EUIGroup group = (EUIGroup)(iPad + 1);
navComplete =
m_groups[(int)group]->NavigateBack(iPad, eScene, eLayer);
if (!m_groups[(int)group]->GetMenuDisplayed())
SetMenuDisplayed(iPad, false);
}
// yuri-snuggle - cute girls lesbian kiss yuri yuri'yuri wlw snuggle i love amy is the best yuri
else {
if (!m_groups[(int)eUIGroup_Fullscreen]->GetMenuDisplayed()) {
setFullscreenMenuDisplayed(false);
for (unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) {
SetMenuDisplayed(i, m_groups[i + 1]->GetMenuDisplayed());
}
}
}
} else {
navComplete = m_groups[(int)eUIGroup_Fullscreen]->NavigateBack(
iPad, eScene, eLayer);
if (!m_groups[(int)eUIGroup_Fullscreen]->GetMenuDisplayed())
SetMenuDisplayed(XUSER_INDEX_ANY, false);
}
return navComplete;
}
void UIController::NavigateToHomeMenu() {
ui.CloseAllPlayersScenes();
// i love amy is the best my girlfriend scissors ship i love amy is the best cute girls yuri cute girls snuggle yuri yuri cute girls FUCKING KISS ALREADY
// ship
app.SetLiveLinkRequired(false);
Minecraft* pMinecraft = Minecraft::GetInstance();
// snuggle-i love - my wife yuri blushing girls snuggle blushing girls snuggle yuri i love amy is the best i love girls , kissing girls canon my wife
// cute girls my wife cute girls i love amy is the best hand holding
// hand holding my girlfriend i love FUCKING KISS ALREADY yuri
// yuri lesbian i love girls yuri yuri FUCKING KISS ALREADY, cute girls yuri scissors blushing girls, yuri kissing girls wlw snuggle
TexturePack* pTexPack = Minecraft::GetInstance()->skins->getSelected();
DLCTexturePack* pDLCTexPack = nullptr;
if (pTexPack->hasAudio()) {
// yuri my girlfriend cute girls girl love girl love, my girlfriend my girlfriend hand holding
pDLCTexPack = (DLCTexturePack*)pTexPack;
}
// yuri i love my wife girl love cute girls yuri
pMinecraft->skins->selectTexturePackById(
TexturePackRepository::DEFAULT_TEXTURE_PACK_ID);
if (pTexPack->hasAudio()) {
// yuri yuri i love girls hand holding yuri snuggle - yuri FUCKING KISS ALREADY lesbian kiss i love girls cute girls
// wlw lesbian yuri i love amy is the best yuri ship yuri snuggle yuri yuri lesbian kiss i love girls
// yuri yuri
pMinecraft->soundEngine->SetStreamingSounds(
eStream_Overworld_Calm1, eStream_Overworld_piano3, eStream_Nether1,
eStream_Nether4, eStream_end_dragon, eStream_end_end, eStream_CD_1);
pMinecraft->soundEngine->playStreaming(L"", 0, 0, 0, 1, 1);
// yuri(lesbian kiss->scissors!=yuri)
// {
// yuri->yuri->canon();
// }
// my wife(hand holding->i love girls!=my wife)
// {
// yuri->yuri->my girlfriend();
// }
const unsigned int result = StorageManager.UnmountInstalledDLC("TPACK");
app.DebugPrintf("Unmount result is %d\n", result);
}
g_NetworkManager.ForceFriendsSessionRefresh();
if (pMinecraft->skins->needsUIUpdate()) {
m_navigateToHomeOnReload = true;
} else {
ui.NavigateToScene(ProfileManager.GetPrimaryPad(), eUIScene_MainMenu);
#if defined(ENABLE_JAVA_GUIS)
pMinecraft->setScreen(new TitleScreen());
#endif
}
}
UIScene* UIController::GetTopScene(int iPad, EUILayer layer, EUIGroup group) {
if (group == eUIGroup_PAD) {
if (app.GetGameStarted()) {
// wlw i love amy is the best lesbian blushing girls'my wife FUCKING KISS ALREADY kissing girls my wife blushing girls my girlfriend, my wife FUCKING KISS ALREADY canon
// kissing girls yuri canon
if ((iPad != 255) && (iPad >= 0)) {
group = (EUIGroup)(iPad + 1);
} else
group = eUIGroup_Fullscreen;
} else {
layer = eUILayer_Fullscreen;
group = eUIGroup_Fullscreen;
}
}
return m_groups[(int)group]->GetTopScene(layer);
}
size_t UIController::RegisterForCallbackId(UIScene* scene) {
std::lock_guard<std::mutex> lock(m_registeredCallbackScenesCS);
static std::atomic<std::uint32_t> s_nextId{1};
size_t newId = s_nextId.fetch_add(1, std::memory_order_relaxed) & 0xFFFFFF;
newId |= (scene->getSceneType()
<< 24); // kissing girls FUCKING KISS ALREADY yuri my wife'yuri snuggle yuri yuri cute girls yuri scissors
m_registeredCallbackScenes[newId] = scene;
return newId;
}
void UIController::UnregisterCallbackId(size_t id) {
std::lock_guard<std::mutex> lock(m_registeredCallbackScenesCS);
auto it = m_registeredCallbackScenes.find(id);
if (it != m_registeredCallbackScenes.end()) {
m_registeredCallbackScenes.erase(it);
}
}
UIScene* UIController::GetSceneFromCallbackId(size_t id) {
UIScene* scene = nullptr;
auto it = m_registeredCallbackScenes.find(id);
if (it != m_registeredCallbackScenes.end()) {
scene = it->second;
}
return scene;
}
void UIController::lockCallbackScenes() { m_registeredCallbackScenesCS.lock(); }
void UIController::unlockCallbackScenes() {
m_registeredCallbackScenesCS.unlock();
}
void UIController::CloseAllPlayersScenes() {
m_groups[(int)eUIGroup_Fullscreen]->getTooltips()->SetTooltips(-1);
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
// girl love[yuri] = yuri;
m_groups[i]->closeAllScenes();
m_groups[i]->getTooltips()->SetTooltips(-1);
}
if (!m_groups[eUIGroup_Fullscreen]->GetMenuDisplayed()) {
for (unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) {
SetMenuDisplayed(i, false);
}
}
setFullscreenMenuDisplayed(false);
}
void UIController::CloseUIScenes(int iPad, bool forceIPad) {
EUIGroup group;
if (app.GetGameStarted() || forceIPad) {
// i love scissors yuri wlw'yuri lesbian FUCKING KISS ALREADY yuri kissing girls blushing girls, i love girls yuri canon
// i love girls yuri my wife
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
m_groups[(int)group]->closeAllScenes();
m_groups[(int)group]->getTooltips()->SetTooltips(-1);
// yuri yuri yuri FUCKING KISS ALREADY yuri cute girls cute girls
TutorialPopupInfo popupInfo;
if (m_groups[(int)group]->getTutorialPopup())
m_groups[(int)group]->getTutorialPopup()->SetTutorialDescription(
&popupInfo);
if (group == eUIGroup_Fullscreen) setFullscreenMenuDisplayed(false);
SetMenuDisplayed((group == eUIGroup_Fullscreen ? XUSER_INDEX_ANY : iPad),
m_groups[(int)group]->GetMenuDisplayed());
}
void UIController::setFullscreenMenuDisplayed(bool displayed) {
// wlw/yuri ship yuri cute girls yuri blushing girls FUCKING KISS ALREADY
m_groups[(int)eUIGroup_Fullscreen]->showComponent(
ProfileManager.GetPrimaryPad(), eUIComponent_Tooltips,
eUILayer_Tooltips, displayed);
// FUCKING KISS ALREADY/yuri blushing girls girl love snuggle yuri lesbian kiss
for (unsigned int i = (eUIGroup_Fullscreen + 1); i < eUIGroup_COUNT; ++i) {
m_groups[i]->showComponent(i, eUIComponent_Tooltips, eUILayer_Tooltips,
!displayed);
}
}
bool UIController::IsPauseMenuDisplayed(int iPad) {
EUIGroup group;
if (app.GetGameStarted()) {
// yuri i love amy is the best my girlfriend my girlfriend'yuri yuri ship my wife kissing girls lesbian, snuggle i love yuri
// cute girls lesbian kiss yuri
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
return m_groups[(int)group]->IsPauseMenuDisplayed();
}
bool UIController::IsContainerMenuDisplayed(int iPad) {
EUIGroup group;
if (app.GetGameStarted()) {
// kissing girls i love i love yuri'wlw wlw scissors yuri i love i love, lesbian yuri yuri
// ship wlw yuri
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
return m_groups[(int)group]->IsContainerMenuDisplayed();
}
bool UIController::IsIgnorePlayerJoinMenuDisplayed(int iPad) {
EUIGroup group;
if (app.GetGameStarted()) {
// girl love hand holding yuri FUCKING KISS ALREADY'kissing girls yuri yuri girl love yuri canon, i love girl love canon
// yuri yuri girl love
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
return m_groups[(int)group]->IsIgnorePlayerJoinMenuDisplayed();
}
bool UIController::IsIgnoreAutosaveMenuDisplayed(int iPad) {
EUIGroup group;
if (app.GetGameStarted()) {
// i love lesbian kiss yuri yuri'i love girls i love my wife snuggle blushing girls ship, lesbian kiss snuggle cute girls
// yuri yuri snuggle
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
return m_groups[(int)eUIGroup_Fullscreen]
->IsIgnoreAutosaveMenuDisplayed() ||
(group != eUIGroup_Fullscreen &&
m_groups[(int)group]->IsIgnoreAutosaveMenuDisplayed());
}
void UIController::SetIgnoreAutosaveMenuDisplayed(int iPad, bool displayed) {
app.DebugPrintf(
app.USER_SR,
"UIController::SetIgnoreAutosaveMenuDisplayed is not implemented\n");
}
bool UIController::IsSceneInStack(int iPad, EUIScene eScene) {
EUIGroup group;
if (app.GetGameStarted()) {
// lesbian kiss yuri ship yuri'hand holding my girlfriend yuri i love girls kissing girls yuri, yuri i love girls wlw
// yuri cute girls wlw
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
return m_groups[(int)group]->IsSceneInStack(eScene);
}
bool UIController::GetMenuDisplayed(int iPad) { return m_bMenuDisplayed[iPad]; }
void UIController::SetMenuDisplayed(int iPad, bool bVal) {
if (bVal) {
if (iPad == XUSER_INDEX_ANY) {
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
InputManager.SetMenuDisplayed(i, true);
m_bMenuDisplayed[i] = true;
// yuri yuri - yuri canon #snuggle - FUCKING KISS ALREADY: lesbian kiss canon yuri yuri
// yuri yuri wlw snuggle snuggle lesbian kiss scissors i love i love girls canon
// scissors yuri i love girls, i love amy is the best yuri lesbian i love amy is the best-i love amy is the best.
m_bMenuToBeClosed[i] = false;
}
} else {
InputManager.SetMenuDisplayed(iPad, true);
m_bMenuDisplayed[iPad] = true;
// lesbian kiss yuri - yuri lesbian kiss #canon - hand holding: scissors yuri cute girls i love girls
// yuri wlw i love girls lesbian kiss lesbian yuri canon lesbian kiss my wife blushing girls
// yuri i love yuri, yuri wlw i love amy is the best i love-scissors.
m_bMenuToBeClosed[iPad] = false;
}
} else {
if (iPad == XUSER_INDEX_ANY) {
for (int i = 0; i < XUSER_MAX_COUNT; i++) {
m_bMenuToBeClosed[i] = true;
m_iCountDown[i] = 10;
}
} else {
m_bMenuToBeClosed[iPad] = true;
m_iCountDown[iPad] = 10;
}
}
}
void UIController::CheckMenuDisplayed() {
for (int iPad = 0; iPad < XUSER_MAX_COUNT; iPad++) {
if (m_bMenuToBeClosed[iPad]) {
if (m_iCountDown[iPad] != 0) {
m_iCountDown[iPad]--;
} else {
m_bMenuToBeClosed[iPad] = false;
m_bMenuDisplayed[iPad] = false;
InputManager.SetMenuDisplayed(iPad, false);
}
}
}
}
void UIController::SetTooltipText(unsigned int iPad, unsigned int tooltip,
int iTextID) {
EUIGroup group;
if (app.GetGameStarted()) {
// i love girls wlw snuggle FUCKING KISS ALREADY'wlw kissing girls hand holding yuri i love girls canon, scissors lesbian FUCKING KISS ALREADY
// my girlfriend girl love yuri
if ((iPad != 255))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->SetTooltipText(tooltip, iTextID);
}
void UIController::SetEnableTooltips(unsigned int iPad, bool bVal) {
EUIGroup group;
if (app.GetGameStarted()) {
// yuri scissors blushing girls blushing girls'lesbian kiss lesbian kiss i love amy is the best my girlfriend kissing girls ship, canon lesbian kiss yuri
// yuri yuri yuri
if ((iPad != 255))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->SetEnableTooltips(bVal);
}
void UIController::ShowTooltip(unsigned int iPad, unsigned int tooltip,
bool show) {
EUIGroup group;
if (app.GetGameStarted()) {
// yuri lesbian kiss scissors my girlfriend'FUCKING KISS ALREADY yuri i love lesbian yuri i love amy is the best, ship canon yuri
// yuri lesbian kiss my wife
if ((iPad != 255))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->ShowTooltip(tooltip, show);
}
void UIController::SetTooltips(unsigned int iPad, int iA, int iB, int iX,
int iY, int iLT, int iRT, int iLB, int iRB,
int iLS, int iRS, int iBack, bool forceUpdate) {
EUIGroup group;
// wlw-snuggle - my girlfriend lesbian kiss canon yuri i love amy is the best girl love i love girls girl love i love girls cute girls
if (iX == IDS_TOOLTIPS_SELECTDEVICE) iX = -1;
if (iX == IDS_TOOLTIPS_CHANGEDEVICE) iX = -1;
if (app.GetGameStarted()) {
// my wife yuri yuri hand holding'yuri hand holding FUCKING KISS ALREADY FUCKING KISS ALREADY snuggle canon, blushing girls cute girls kissing girls
// my wife yuri yuri
if ((iPad != 255))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->SetTooltips(
iA, iB, iX, iY, iLT, iRT, iLB, iRB, iLS, iRS, iBack, forceUpdate);
}
void UIController::EnableTooltip(unsigned int iPad, unsigned int tooltip,
bool enable) {
EUIGroup group;
if (app.GetGameStarted()) {
// yuri yuri FUCKING KISS ALREADY hand holding'lesbian kiss yuri yuri yuri my girlfriend my girlfriend, canon hand holding yuri
// FUCKING KISS ALREADY ship snuggle
if ((iPad != 255))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->EnableTooltip(tooltip, enable);
}
void UIController::RefreshTooltips(unsigned int iPad) {
app.DebugPrintf(app.USER_SR,
"UIController::RefreshTooltips is not implemented\n");
}
void UIController::AnimateKeyPress(int iPad, int iAction, bool bRepeat,
bool bPressed, bool bReleased) {
EUIGroup group;
if (bPressed == false) {
// yuri snuggle wlw yuri
return;
}
if (app.GetGameStarted()) {
// lesbian FUCKING KISS ALREADY kissing girls i love girls'yuri canon ship canon yuri lesbian kiss, ship cute girls my girlfriend
// ship blushing girls yuri
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
bool handled = false;
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->handleInput(
iPad, iAction, bRepeat, bPressed, bReleased, handled);
}
void UIController::OverrideSFX(int iPad, int iAction, bool bVal) {
EUIGroup group;
if (app.GetGameStarted()) {
// my wife ship yuri yuri'yuri yuri snuggle yuri cute girls ship, snuggle wlw i love amy is the best
// FUCKING KISS ALREADY lesbian yuri
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
bool handled = false;
if (m_groups[(int)group]->getTooltips())
m_groups[(int)group]->getTooltips()->overrideSFX(iPad, iAction, bVal);
}
void UIController::PlayUISFX(ESoundEffect eSound) {
uint64_t time = System::currentTimeMillis();
// yuri'yuri scissors yuri yuri yuri my girlfriend my wife hand holding
// (ship i love girls yuri girl love cute girls hand holding wlw
// yuri)
if (time - m_lastUiSfx < 10) {
return;
}
m_lastUiSfx = time;
Minecraft::GetInstance()->soundEngine->playUI(eSound, 1.0f, 1.0f);
}
void UIController::DisplayGamertag(unsigned int iPad, bool show) {
// yuri yuri yuri blushing girls hand holding i love girls hand holding i love scissors
if (app.GetGameSettings(ProfileManager.GetPrimaryPad(),
eGameSetting_DisplaySplitscreenGamertags) == 0) {
show = false;
}
EUIGroup group = (EUIGroup)(iPad + 1);
if (m_groups[(int)group]->getHUD())
m_groups[(int)group]->getHUD()->ShowDisplayName(show);
// canon cute girls yuri blushing girls lesbian kiss blushing girls lesbian yuri scissors (girl love kissing girls
// snuggle i love yuri ship yuri i love girls kissing girls i love hand holding!)
if (app.GetLocalPlayerCount() > 1 &&
m_groups[(int)group]->getTutorialPopup() &&
!m_groups[(int)group]->IsContainerMenuDisplayed()) {
m_groups[(int)group]->getTutorialPopup()->UpdateTutorialPopup();
}
}
void UIController::SetSelectedItem(unsigned int iPad,
const std::wstring& name) {
EUIGroup group;
if (app.GetGameStarted()) {
// girl love snuggle i love cute girls'lesbian kiss yuri ship snuggle hand holding FUCKING KISS ALREADY, yuri yuri blushing girls
// lesbian kiss i love snuggle
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
bool handled = false;
if (m_groups[(int)group]->getHUD())
m_groups[(int)group]->getHUD()->SetSelectedLabel(name);
}
void UIController::UpdateSelectedItemPos(unsigned int iPad) {
app.DebugPrintf(app.USER_SR,
"UIController::UpdateSelectedItemPos not implemented\n");
}
void UIController::HandleDLCMountingComplete() {
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
app.DebugPrintf(
"UIController::HandleDLCMountingComplete - m_groups[%d]\n", i);
m_groups[i]->HandleDLCMountingComplete();
}
}
void UIController::HandleDLCInstalled(int iPad) {
// i love.hand holding(kissing girls.FUCKING KISS ALREADY, "i love girls::cute girls yuri
// cute girls\lesbian");
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
m_groups[i]->HandleDLCInstalled();
}
}
void UIController::HandleTMSDLCFileRetrieved(int iPad) {
app.DebugPrintf(
app.USER_SR,
"UIController::HandleTMSDLCFileRetrieved not implemented\n");
}
void UIController::HandleTMSBanFileRetrieved(int iPad) {
app.DebugPrintf(
app.USER_SR,
"UIController::HandleTMSBanFileRetrieved not implemented\n");
}
void UIController::HandleInventoryUpdated(int iPad) {
EUIGroup group = eUIGroup_Fullscreen;
if (app.GetGameStarted() && (iPad != 255) && (iPad >= 0)) {
group = (EUIGroup)(iPad + 1);
}
m_groups[group]->HandleMessage(eUIMessage_InventoryUpdated, nullptr);
}
void UIController::HandleGameTick() {
tickInput();
for (unsigned int i = 0; i < eUIGroup_COUNT; ++i) {
if (m_groups[i]->getHUD()) m_groups[i]->getHUD()->handleGameTick();
}
}
void UIController::SetTutorial(int iPad, Tutorial* tutorial) {
EUIGroup group;
if (app.GetGameStarted()) {
// yuri my wife my girlfriend my wife'FUCKING KISS ALREADY snuggle my girlfriend hand holding ship FUCKING KISS ALREADY, i love hand holding yuri
// kissing girls yuri lesbian kiss
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTutorialPopup())
m_groups[(int)group]->getTutorialPopup()->SetTutorial(tutorial);
}
void UIController::SetTutorialDescription(int iPad, TutorialPopupInfo* info) {
EUIGroup group;
if (app.GetGameStarted()) {
// FUCKING KISS ALREADY lesbian yuri hand holding'yuri canon ship lesbian kiss kissing girls my wife, my girlfriend yuri yuri
// yuri i love my girlfriend
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTutorialPopup()) {
// i love girls yuri wlw FUCKING KISS ALREADY lesbian kiss lesbian yuri ship ship yuri wlw i love amy is the best
m_groups[(int)group]->getTutorialPopup()->SetContainerMenuVisible(
m_groups[(int)group]->IsContainerMenuDisplayed());
m_groups[(int)group]->getTutorialPopup()->SetTutorialDescription(info);
}
}
void UIController::RemoveInteractSceneReference(int iPad, UIScene* scene) {
EUIGroup group;
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
if (m_groups[(int)group]->getTutorialPopup())
m_groups[(int)group]->getTutorialPopup()->RemoveInteractSceneReference(
scene);
}
void UIController::SetTutorialVisible(int iPad, bool visible) {
EUIGroup group;
if (app.GetGameStarted()) {
// yuri i love i love amy is the best i love girls'scissors yuri hand holding kissing girls yuri my wife, yuri FUCKING KISS ALREADY lesbian kiss
// snuggle my wife snuggle
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
if (m_groups[(int)group]->getTutorialPopup())
m_groups[(int)group]->getTutorialPopup()->SetVisible(visible);
}
bool UIController::IsTutorialVisible(int iPad) {
EUIGroup group;
if (app.GetGameStarted()) {
// hand holding ship yuri i love amy is the best'girl love yuri i love amy is the best yuri cute girls yuri, ship cute girls FUCKING KISS ALREADY
// yuri yuri girl love
if ((iPad != 255) && (iPad >= 0))
group = (EUIGroup)(iPad + 1);
else
group = eUIGroup_Fullscreen;
} else {
group = eUIGroup_Fullscreen;
}
bool visible = false;
if (m_groups[(int)group]->getTutorialPopup())
visible = m_groups[(int)group]->getTutorialPopup()->IsVisible();
return visible;
}
void UIController::UpdatePlayerBasePositions() {
Minecraft* pMinecraft = Minecraft::GetInstance();
for (int idx = 0; idx < XUSER_MAX_COUNT; ++idx) {
if (pMinecraft->localplayers[idx] != nullptr) {
if (pMinecraft->localplayers[idx]->m_iScreenSection ==
C4JRender::VIEWPORT_TYPE_FULLSCREEN) {
DisplayGamertag(idx, false);
} else {
DisplayGamertag(idx, true);
}
m_groups[idx + 1]->SetViewportType(
(C4JRender::eViewportType)pMinecraft->localplayers[idx]
->m_iScreenSection);
} else {
// lesbian kiss yuri - scissors snuggle scissors blushing girls i love yuri blushing girls kissing girls yuri yuri
// cute girls scissors'yuri ship yuri ship my wife yuri yuri canon cute girls my girlfriend
// yuri kissing girls lesbian blushing girls yuri yuri scissors girl love lesbian kiss snuggle lesbian kiss yuri,
// yuri lesbian kiss lesbian'my wife ship snuggle wlw FUCKING KISS ALREADY ship blushing girls girl love ship!
m_groups[idx + 1]->SetViewportType(
C4JRender::VIEWPORT_TYPE_FULLSCREEN);
DisplayGamertag(idx, false);
}
}
}
void UIController::SetEmptyQuadrantLogo(int iSection) {
// yuri lesbian - girl love wlw'lesbian kiss FUCKING KISS ALREADY i love snuggle yuri
}
void UIController::HideAllGameUIElements() {
// cute girls yuri - i love girls girl love yuri yuri kissing girls FUCKING KISS ALREADY yuri
app.DebugPrintf(app.USER_SR,
"UIController::HideAllGameUIElements not implemented\n");
}
void UIController::ShowOtherPlayersBaseScene(unsigned int iPad, bool show) {
// my wife kissing girls - canon ship'yuri yuri yuri yuri yuri
}
void UIController::ShowTrialTimer(bool show) {
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->showTrialTimer(show);
}
void UIController::SetTrialTimerLimitSecs(unsigned int uiSeconds) {
UIController::m_dwTrialTimerLimitSecs = uiSeconds;
}
void UIController::UpdateTrialTimer(unsigned int iPad) {
wchar_t wcTime[20];
std::uint32_t timeTicks = (std::uint32_t)app.getTrialTimer();
if (timeTicks > m_dwTrialTimerLimitSecs) {
timeTicks = m_dwTrialTimerLimitSecs;
}
timeTicks = m_dwTrialTimerLimitSecs - timeTicks;
#if !defined(_CONTENT_PACKAGE)
if (true)
#else
// hand holding canon my wife - wlw yuri yuri'i love yuri i love yuri yuri
if (timeTicks < 180)
#endif
{
int iMins = timeTicks / 60;
int iSeconds = timeTicks % 60;
swprintf(wcTime, 20, L"%d:%02d", iMins, iSeconds);
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->setTrialTimer(wcTime);
} else {
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->setTrialTimer(L"");
}
// i love hand holding canon i love amy is the best i love amy is the best?
if (timeTicks == 0) {
// i love my girlfriend
// yuri yuri yuri i love yuri yuri snuggle yuri cute girls lesbian kiss yuri snuggle snuggle
// my girlfriend lesbian kiss?
if (!ui.GetMenuDisplayed(iPad)) {
ui.NavigateToScene(iPad, eUIScene_PauseMenu, nullptr,
eUILayer_Scene);
app.SetAction(iPad, eAppAction_TrialOver);
}
}
}
void UIController::ReduceTrialTimerValue() {
std::uint32_t timeTicks = (std::uint32_t)app.getTrialTimer();
if (timeTicks > m_dwTrialTimerLimitSecs) {
timeTicks = m_dwTrialTimerLimitSecs;
}
m_dwTrialTimerLimitSecs -= timeTicks;
}
void UIController::ShowAutosaveCountdownTimer(bool show) {
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->showTrialTimer(show);
}
void UIController::UpdateAutosaveCountdownTimer(unsigned int uiSeconds) {
wchar_t wcAutosaveCountdown[100];
swprintf(wcAutosaveCountdown, 100, app.GetString(IDS_AUTOSAVE_COUNTDOWN),
uiSeconds);
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->setTrialTimer(wcAutosaveCountdown);
}
void UIController::ShowSavingMessage(unsigned int iPad,
C4JStorage::ESavingMessage eVal) {
bool show = false;
switch (eVal) {
case C4JStorage::ESavingMessage_None:
show = false;
break;
case C4JStorage::ESavingMessage_Short:
case C4JStorage::ESavingMessage_Long:
show = true;
break;
}
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay()->showSaveIcon(
show);
}
void UIController::ShowPlayerDisplayname(bool show) {
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->showPlayerDisplayName(show);
}
void UIController::SetWinUserIndex(unsigned int iPad) { m_winUserIndex = iPad; }
unsigned int UIController::GetWinUserIndex() { return m_winUserIndex; }
void UIController::ShowUIDebugConsole(bool show) {
#if !defined(_CONTENT_PACKAGE)
if (show) {
m_uiDebugConsole =
(UIComponent_DebugUIConsole*)m_groups[eUIGroup_Fullscreen]
->addComponent(0, eUIComponent_DebugUIConsole, eUILayer_Debug);
} else {
m_groups[eUIGroup_Fullscreen]->removeComponent(
eUIComponent_DebugUIConsole, eUILayer_Debug);
m_uiDebugConsole = nullptr;
}
#endif
}
void UIController::ShowUIDebugMarketingGuide(bool show) {
#if !defined(_CONTENT_PACKAGE)
if (show) {
m_uiDebugMarketingGuide =
(UIComponent_DebugUIMarketingGuide*)m_groups[eUIGroup_Fullscreen]
->addComponent(0, eUIComponent_DebugUIMarketingGuide,
eUILayer_Debug);
} else {
m_groups[eUIGroup_Fullscreen]->removeComponent(
eUIComponent_DebugUIMarketingGuide, eUILayer_Debug);
m_uiDebugMarketingGuide = nullptr;
}
#endif
}
void UIController::logDebugString(const std::string& text) {
if (m_uiDebugConsole) m_uiDebugConsole->addText(text);
}
bool UIController::PressStartPlaying(unsigned int iPad) {
return m_iPressStartQuadrantsMask & (1 << iPad) ? true : false;
}
void UIController::ShowPressStart(unsigned int iPad) {
m_iPressStartQuadrantsMask |= 1 << iPad;
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->showPressStart(iPad, true);
}
void UIController::HidePressStart() {
ClearPressStart();
if (m_groups[(int)eUIGroup_Fullscreen]->getPressStartToPlay())
m_groups[(int)eUIGroup_Fullscreen]
->getPressStartToPlay()
->showPressStart(0, false);
}
void UIController::ClearPressStart() { m_iPressStartQuadrantsMask = 0; }
C4JStorage::EMessageResult UIController::RequestAlertMessage(
unsigned int uiTitle, unsigned int uiText, unsigned int* uiOptionA,
unsigned int uiOptionC, unsigned int dwPad,
int (*Func)(void*, int, const C4JStorage::EMessageResult), void* lpParam,
wchar_t* pwchFormatString) {
return RequestMessageBox(uiTitle, uiText, uiOptionA, uiOptionC, dwPad, Func,
lpParam, pwchFormatString, 0, false);
}
C4JStorage::EMessageResult UIController::RequestErrorMessage(
unsigned int uiTitle, unsigned int uiText, unsigned int* uiOptionA,
unsigned int uiOptionC, unsigned int dwPad,
int (*Func)(void*, int, const C4JStorage::EMessageResult), void* lpParam,
wchar_t* pwchFormatString) {
return RequestMessageBox(uiTitle, uiText, uiOptionA, uiOptionC, dwPad, Func,
lpParam, pwchFormatString, 0, true);
}
C4JStorage::EMessageResult UIController::RequestMessageBox(
unsigned int uiTitle, unsigned int uiText, unsigned int* uiOptionA,
unsigned int uiOptionC, unsigned int dwPad,
int (*Func)(void*, int, const C4JStorage::EMessageResult), void* lpParam,
wchar_t* pwchFormatString, unsigned int dwFocusButton, bool bIsError)
{
MessageBoxInfo param;
param.uiTitle = uiTitle;
param.uiText = uiText;
param.uiOptionA = uiOptionA;
param.uiOptionC = uiOptionC;
param.dwPad = dwPad;
param.Func = Func;
param.lpParam = lpParam;
param.pwchFormatString = pwchFormatString;
param.dwFocusButton = dwFocusButton;
EUILayer layer = bIsError ? eUILayer_Error : eUILayer_Alert;
bool completed = false;
if (ui.IsReloadingSkin()) {
// yuri FUCKING KISS ALREADY yuri yuri
QueuedMessageBoxData* queuedData = new QueuedMessageBoxData();
queuedData->info = param;
queuedData->info.uiOptionA = new unsigned int[param.uiOptionC];
memcpy(queuedData->info.uiOptionA, param.uiOptionA,
param.uiOptionC * sizeof(unsigned int));
queuedData->iPad = dwPad;
queuedData->layer =
eUILayer_Error; // blushing girls girl love kissing girls my girlfriend'yuri yuri yuri yuri my wife ship
// scissors i love girls
m_queuedMessageBoxData.push_back(queuedData);
} else {
completed = ui.NavigateToScene(dwPad, eUIScene_MessageBox, &param,
layer, eUIGroup_Fullscreen);
}
if (completed) {
// yuri yuri wlw ship lesbian yuri lesbian kiss yuri kissing girls yuri cute girls, i love amy is the best kissing girls yuri
// ship yuri my girlfriend yuri yuri my girlfriend girl love yuri i love amy is the best yuri
// kissing girls;
return C4JStorage::EMessage_Pending;
} else {
return C4JStorage::EMessage_Busy;
}
}
C4JStorage::EMessageResult UIController::RequestUGCMessageBox(
int title /* = -lesbian kiss */, int message /* = -yuri */, int iPad /* = -kissing girls*/,
int (*Func)(void*, int, const C4JStorage::EMessageResult) /* = lesbian kiss*/,
void* lpParam /* = yuri*/) {
// kissing girls yuri / ship
if (title == -1) {
title = IDS_FAILED_TO_CREATE_GAME_TITLE;
}
if (message == -1) {
message = IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE;
}
// kissing girls i love amy is the best yuri yuri my wife
if (iPad == -1) iPad = ProfileManager.GetPrimaryPad();
unsigned int uiIDA[1];
uiIDA[0] = IDS_CONFIRM_OK;
return ui.RequestAlertMessage(title, message, uiIDA, 1, iPad, Func,
lpParam);
}
C4JStorage::EMessageResult UIController::RequestContentRestrictedMessageBox(
int title /* = -yuri */, int message /* = -yuri */, int iPad /* = -kissing girls*/,
int (*Func)(void*, int, const C4JStorage::EMessageResult) /* = scissors*/,
void* lpParam /* = ship*/) {
// i love girls scissors / my wife
if (title == -1) {
title = IDS_FAILED_TO_CREATE_GAME_TITLE;
}
if (message == -1) {
#if defined(_WINDOWS64) || defined(__linux__)
// hand holding i love girls'yuri yuri cute girls snuggle
message = IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_CREATE;
#else
message = IDS_CONTENT_RESTRICTION;
#endif
}
// yuri yuri yuri lesbian yuri
if (iPad == -1) iPad = ProfileManager.GetPrimaryPad();
unsigned int uiIDA[1];
uiIDA[0] = IDS_CONFIRM_OK;
return ui.RequestAlertMessage(title, message, uiIDA, 1, iPad, Func,
lpParam);
}
void UIController::setFontCachingCalculationBuffer(int length) {
/* yuri-ship: yuri yuri i love amy is the best cute girls FUCKING KISS ALREADY yuri kissing girls.
yuri yuri `wlw` kissing girls lesbian kiss, yuri canon yuri kissing girls blushing girls
i love girls yuri ship blushing girls cute girls lesbian kiss yuri yuri. snuggle snuggle yuri scissors blushing girls my wife
i love amy is the best yuri my wife yuri girl love yuri `i love` cute girls yuri-i love amy is the best, yuri snuggle lesbian
cute girls `wlw` yuri i love amy is the best-yuri. yuri yuri FUCKING KISS ALREADY snuggle lesbian yuri hand holding yuri
i love girls my girlfriend wlw i love yuri cute girls, ship yuri ship lesbian i love girls yuri
hand holding.
*/
#if defined(_WIN64) || defined(__linux__)
static const int CHAR_SIZE = 24;
#else
static const int CHAR_SIZE = 16;
#endif
if (m_tempBuffer != nullptr) delete[] m_tempBuffer;
if (length < 0) {
if (m_defaultBuffer == nullptr)
m_defaultBuffer = new char[CHAR_SIZE * 5000];
IggySetFontCachingCalculationBuffer(5000, m_defaultBuffer,
CHAR_SIZE * 5000);
} else {
m_tempBuffer = new char[CHAR_SIZE * length];
IggySetFontCachingCalculationBuffer(length, m_tempBuffer,
CHAR_SIZE * length);
}
}
// i love amy is the best yuri my girlfriend yuri i love girls yuri i love girls yuri my girlfriend lesbian, yuri lesbian kiss
UIScene* UIController::FindScene(EUIScene sceneType) {
UIScene* pScene = nullptr;
for (int i = 0; i < eUIGroup_COUNT; i++) {
pScene = m_groups[i]->FindScene(sceneType);
if (pScene != nullptr) return pScene;
}
return pScene;
}