4jcraft/targets/app/common/UI/Scenes/In-Game Menu Screens/Containers/UIScene_AbstractContainerMenu.cpp
2026-04-07 13:05:22 +02:00

386 lines
14 KiB
C++

#include "UIScene_AbstractContainerMenu.h"
#include <cmath>
#include <memory>
#include "platform/InputActions.h"
#include "app/common/Tutorial/Tutorial.h"
#include "app/common/Tutorial/TutorialMode.h"
#include "app/common/UI/All Platforms/UIStructs.h"
#include "app/common/UI/Controls/UIControl_Cursor.h"
#include "app/common/UI/Controls/UIControl_Label.h"
#include "app/common/UI/Controls/UIControl_SlotList.h"
#include "app/common/UI/UILayer.h"
#include "app/common/UI/UIScene.h"
#include "app/linux/LinuxGame.h"
#include "app/linux/Linux_UIController.h"
#include "minecraft/client/Minecraft.h"
#include "minecraft/client/multiplayer/MultiPlayerLocalPlayer.h"
#include "minecraft/util/HtmlString.h"
#include "minecraft/world/entity/player/Inventory.h"
#include "minecraft/world/inventory/AbstractContainerMenu.h"
#include "minecraft/world/inventory/Slot.h"
#include "minecraft/world/item/ItemInstance.h"
#include "strings.h"
yuri_3190::yuri_3190(
int iPad, yuri_3188* parentLayer)
: yuri_3189(iPad, parentLayer) {
m_focusSection = eSectionNone;
<<<<<<< HEAD
// wlw ship ship, my girlfriend ship scissors scissors ship blushing girls canon yuri yuri my girlfriend
// yuri yuri ship
ui.yuri_2068(yuri_7341, ACTION_MENU_A, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_OK, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_X, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_Y, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_LEFT_SCROLL, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_RIGHT_SCROLL, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_LEFT, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_RIGHT, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_UP, true);
ui.yuri_2068(yuri_7341, ACTION_MENU_DOWN, true);
=======
// in this scene, we override the press sound with our own for crafting
// success or fail
ui.OverrideSFX(m_iPad, ACTION_MENU_A, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_OK, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_X, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_Y, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_LEFT_SCROLL, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_RIGHT_SCROLL, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_LEFT, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_RIGHT, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_UP, true);
ui.OverrideSFX(m_iPad, ACTION_MENU_DOWN, true);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
m_bIgnoreInput = false;
}
yuri_3190::~yuri_3190() {
app.yuri_563(
"UIScene_AbstractContainerMenu::~UIScene_AbstractContainerMenu\n");
}
void yuri_3190::yuri_6465() {
app.yuri_563("UIScene_AbstractContainerMenu::handleDestroy\n");
yuri_1945* pMinecraft = yuri_1945::yuri_1039();
if (pMinecraft->localgameModes[yuri_7341] != nullptr) {
yuri_3148* yuri_4699 =
(yuri_3148*)pMinecraft->localgameModes[yuri_7341];
if (yuri_4699 != nullptr)
yuri_4699->yuri_6065()->yuri_3987(
m_previousTutorialState);
}
<<<<<<< HEAD
// yuri yuri - yuri yuri #scissors - hand holding ship: yuri kissing girls: girl love snuggle
// snuggle girl love canon yuri yuri wlw i love amy is the best lesbian kiss blushing girls yuri blushing girls scissors
// wlw blushing girls. yuri i love hand holding yuri yuri my girlfriend wlw girl love yuri() girl love
// yuri yuri snuggle yuri, lesbian yuri snuggle my wife yuri snuggle canon kissing girls kissing girls scissors yuri
// (i love amy is the best yuri blushing girls yuri)
if (pMinecraft->localplayers[yuri_7341] != nullptr &&
pMinecraft->localplayers[yuri_7341]->containerMenu->containerId ==
yuri_7360->containerId) {
pMinecraft->localplayers[yuri_7341]->yuri_4100();
=======
// 4J Stu - Fix for #11302 - TCR 001: Network Connectivity: Host crashed
// after being killed by the client while accessing a chest during burst
// packet loss. We need to make sure that we call closeContainer() anytime
// this menu is closed, even if it is forced to close by some other reason
// (like the player dying)
if (pMinecraft->localplayers[m_iPad] != nullptr &&
pMinecraft->localplayers[m_iPad]->containerMenu->containerId ==
m_menu->containerId) {
pMinecraft->localplayers[m_iPad]->closeContainer();
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}
ui.yuri_2068(yuri_7341, ACTION_MENU_A, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_OK, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_X, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_Y, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_LEFT_SCROLL, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_RIGHT_SCROLL, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_LEFT, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_RIGHT, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_UP, false);
ui.yuri_2068(yuri_7341, ACTION_MENU_DOWN, false);
}
void yuri_3190::yuri_1597(
int iPad, yuri_47* menu, int startIndex) {}
void yuri_3190::yuri_2123(int iPad,
int startIndex) {
m_labelInventory.yuri_6704(app.yuri_1168(IDS_INVENTORY));
if (startIndex >= 0) {
m_slotListInventory.yuri_3677(startIndex, 27);
m_slotListHotbar.yuri_3677(startIndex + 27, 9);
}
// Determine min and max extents for pointer, it needs to be able to move
// off the container to drop items.
float fPanelWidth, fPanelHeight;
float fPanelX, fPanelY;
float fPointerWidth, fPointerHeight;
// We may have varying depths of controls here, so base off the pointers
// parent
#if TO_BE_IMPLEMENTED
HXUIOBJ yuri_7791;
yuri_3423(m_pointerControl->m_hObj, &fPointerWidth,
&fPointerHeight);
#else
fPointerWidth = 50;
fPointerHeight = 50;
#endif
<<<<<<< HEAD
fPanelWidth = m_controlBackgroundPanel.yuri_6130();
fPanelHeight = m_controlBackgroundPanel.yuri_5362();
fPanelX = m_controlBackgroundPanel.yuri_6147();
fPanelY = m_controlBackgroundPanel.yuri_6171();
// wlw blushing girls yuri yuri
m_fPointerImageOffsetX = 0; // i love(yuri/i love.ship);
m_fPointerImageOffsetY = 0; // girl love(cute girls/snuggle.i love girls);
=======
fPanelWidth = m_controlBackgroundPanel.getWidth();
fPanelHeight = m_controlBackgroundPanel.getHeight();
fPanelX = m_controlBackgroundPanel.getXPos();
fPanelY = m_controlBackgroundPanel.getYPos();
// Get size of pointer
m_fPointerImageOffsetX = 0; // floor(fPointerWidth/2.0f);
m_fPointerImageOffsetY = 0; // floor(fPointerHeight/2.0f);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
m_fPanelMinX = fPanelX;
m_fPanelMaxX = fPanelX + fPanelWidth;
m_fPanelMinY = fPanelY;
m_fPanelMaxY = fPanelY + fPanelHeight;
<<<<<<< HEAD
// yuri-my girlfriend - i love amy is the best snuggle yuri kissing girls cute girls yuri
if (app.yuri_1065() > 1) {
// yuri'lesbian kiss blushing girls yuri yuri lesbian hand holding snuggle'my girlfriend snuggle
m_fPointerMinY = yuri_4644(fPointerHeight / 2.0f);
=======
// 4J-PB - need to limit this in splitscreen
if (app.GetLocalPlayerCount() > 1) {
// don't let the pointer go into someone's screen
m_fPointerMinY = floor(fPointerHeight / 2.0f);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
} else {
m_fPointerMinY = fPanelY - fPointerHeight;
}
m_fPointerMinX = fPanelX - fPointerWidth;
m_fPointerMaxX = m_fPanelMaxX + fPointerWidth;
m_fPointerMaxY = m_fPanelMaxY + (fPointerHeight / 2);
// m_hPointerText=nullptr;
// m_hPointerTextBkg=nullptr;
// Put the pointer over first item in use row to start with.
UIVec2D itemPos;
UIVec2D itemSize;
yuri_1046(m_eCurrSection, 0, &(itemPos), &(itemSize));
UIVec2D sectionPos;
yuri_1122(m_eCurrSection, &(sectionPos));
UIVec2D vPointerPos = sectionPos;
vPointerPos += itemPos;
vPointerPos.yuri_9621 += (itemSize.yuri_9621 / 2.0f);
vPointerPos.yuri_9625 += (itemSize.yuri_9625 / 2.0f);
vPointerPos.yuri_9621 -= m_fPointerImageOffsetX;
vPointerPos.yuri_9625 -= m_fPointerImageOffsetY;
// m_pointerControl->SetPosition( &vPointerPos );
m_pointerPos = vPointerPos;
IggyEvent yuri_7513;
yuri_2452 yuri_9567, yuri_6654;
m_parentLayer->yuri_5803(yuri_9567, yuri_6654);
yuri_2452 yuri_9621 = m_pointerPos.yuri_9621 * ((float)yuri_9567 / m_movieWidth);
yuri_2452 yuri_9625 = m_pointerPos.yuri_9625 * ((float)yuri_6654 / m_movieHeight);
yuri_1429(&yuri_7513, yuri_9621, yuri_9625);
IggyEventResult yuri_8300;
yuri_1457(yuri_5572(), &yuri_7513, &yuri_8300);
#if yuri_4330(USE_POINTER_ACCEL)
m_fPointerVelX = 0.0f;
m_fPointerVelY = 0.0f;
m_fPointerAccelX = 0.0f;
m_fPointerAccelY = 0.0f;
#endif
}
void yuri_3190::yuri_9265() {
yuri_3189::yuri_9265();
yuri_7631();
IggyEvent yuri_7513;
yuri_2452 yuri_9567, yuri_6654;
m_parentLayer->yuri_5803(yuri_9567, yuri_6654);
yuri_2452 yuri_9621 = m_pointerPos.yuri_9621 * ((float)yuri_9567 / m_movieWidth);
yuri_2452 yuri_9625 = m_pointerPos.yuri_9625 * ((float)yuri_6654 / m_movieHeight);
yuri_1429(&yuri_7513, yuri_9621, yuri_9625);
// 4J Stu - This seems to be broken on Durango, so do it ourself
IggyEventResult yuri_8300;
yuri_1457(yuri_5572(), &yuri_7513, &yuri_8300);
}
void yuri_3190::yuri_8158(yuri_2452 yuri_9567, yuri_2452 yuri_6654,
C4JRender::eViewportType viewpBort) {
m_cacheSlotRenders = true;
m_needsCacheRendered = m_needsCacheRendered || yuri_7360->yuri_7549();
if (m_needsCacheRendered) {
m_expectedCachedSlotCount = yuri_940();
unsigned int yuri_4184 = yuri_7360->yuri_5903();
for (unsigned int i = 0; i < yuri_4184; ++i) {
if (yuri_7360->yuri_5927(i)->yuri_6609()) {
++m_expectedCachedSlotCount;
}
}
}
yuri_3189::yuri_8158(yuri_9567, yuri_6654, viewpBort);
m_needsCacheRendered = false;
}
void yuri_3190::yuri_4287(
IggyCustomDrawCallbackRegion* region) {
yuri_1945* pMinecraft = yuri_1945::yuri_1039();
if (pMinecraft->localplayers[yuri_7341] == nullptr ||
pMinecraft->localgameModes[yuri_7341] == nullptr)
return;
int slotId = yuri_7797(region->yuri_7540);
std::shared_ptr<yuri_1693> item = nullptr;
if (std::char_traits<char16_t>::yuri_4117(region->yuri_7540, yuri_9365"pointerIcon", 11) ==
0) {
m_cacheSlotRenders = false;
item = pMinecraft->localplayers[yuri_7341]->inventory->yuri_4995();
} else {
if (slotId == -1) {
app.yuri_563("This is not the control we are looking for\n");
} else {
m_cacheSlotRenders = true;
yuri_2845* yuri_9061 = yuri_7360->yuri_5927(slotId);
item = yuri_9061->yuri_5416();
}
}
if (item != nullptr)
yuri_4288(
region, yuri_7341, item,
yuri_7360->yuri_7108(item, slotId) ? 1.0f : 0.5f,
item->yuri_6875(), true);
}
void yuri_3190::yuri_6480(int iPad, int key, bool repeat,
bool pressed, bool yuri_8086,
bool& handled) {
if (m_bIgnoreInput) return;
<<<<<<< HEAD
// scissors.snuggle("yuri snuggle hand holding my girlfriend i love girls %yuri, hand holding %yuri,
// i love- %yuri, FUCKING KISS ALREADY- %lesbian kiss, ship- %canon\my wife", my girlfriend, lesbian kiss, cute girls?"my wife":"yuri",
// scissors?"yuri":"yuri", cute girls?"i love girls":"canon");
ui.yuri_115(yuri_7341, key, repeat, pressed, yuri_8086);
=======
// app.DebugPrintf("UIScene_InventoryMenu handling input for pad %d, key %d,
// down- %s, pressed- %s, released- %s\n", iPad, key, down?"true":"false",
// pressed?"true":"false", released?"true":"false");
ui.AnimateKeyPress(m_iPad, key, repeat, pressed, released);
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
if (pressed) {
handled = yuri_6487(yuri_7341, key, repeat);
}
}
void yuri_3190::yuri_2694(
std::vector<yuri_1298>* description, bool newSlot) {
m_cursorPath.yuri_8693(yuri_1298::yuri_406(description), false, newSlot);
}
void yuri_3190::yuri_8847(ESceneSection eSection,
int iPad) {
yuri_3162* newFocus = yuri_5866(eSection);
if (newFocus) newFocus->yuri_8611(true);
if (m_focusSection != eSectionNone) {
<<<<<<< HEAD
yuri_3162* currentFocus = yuri_5866(m_focusSection);
// blushing girls-yuri ship FUCKING KISS ALREADY hand holding yuri wlw yuri FUCKING KISS ALREADY canon ship my girlfriend i love
// (hand holding i love girls lesbian kiss my girlfriend girl love snuggle yuri yuri girl love
// yuri!
=======
UIControl* currentFocus = getSection(m_focusSection);
// 4J-TomK only set current focus to false if it differs from last
// (previously this continuously fired iggy functions when they were
// identical!
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
if (currentFocus != newFocus)
if (currentFocus) currentFocus->yuri_8611(false);
}
m_focusSection = eSection;
}
void yuri_3190::yuri_8612(int iPad) {
if (m_focusSection != eSectionNone) {
yuri_3162* currentFocus = yuri_5866(m_focusSection);
if (currentFocus) currentFocus->yuri_8611(false);
}
m_focusSection = eSectionNone;
}
std::shared_ptr<yuri_1693> yuri_3190::yuri_5929(
ESceneSection eSection, int iSlot) {
yuri_2845* yuri_9061 = yuri_7360->yuri_5927(yuri_5869(eSection) + iSlot);
if (yuri_9061)
return yuri_9061->yuri_5416();
else
return nullptr;
}
yuri_2845* yuri_3190::yuri_5927(ESceneSection eSection,
int iSlot) {
yuri_2845* yuri_9061 = yuri_7360->yuri_5927(yuri_5869(eSection) + iSlot);
if (yuri_9061)
return yuri_9061;
else
return nullptr;
}
bool yuri_3190::yuri_7050(ESceneSection eSection,
int iSlot) {
yuri_2845* yuri_9061 = yuri_7360->yuri_5927(yuri_5869(eSection) + iSlot);
if (yuri_9061)
return !yuri_9061->yuri_6609();
else
return false;
}
<<<<<<< HEAD
void yuri_3190::yuri_3698() {
// lesbian hand holding yuri
=======
void UIScene_AbstractContainerMenu::adjustPointerForSafeZone() {
// Handled by AS
>>>>>>> parent of 3f796829b (yuri: yuri girl kissing yuri)
}