From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- .../Common/UI/UIScene_DebugCreateSchematic.cpp | 216 +++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp (limited to 'Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp') diff --git a/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp b/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp new file mode 100644 index 00000000..2a8ac9f8 --- /dev/null +++ b/Minecraft.Client/Common/UI/UIScene_DebugCreateSchematic.cpp @@ -0,0 +1,216 @@ +#include "stdafx.h" + +#ifdef _DEBUG_MENUS_ENABLED +#include "UI.h" +#include "UIScene_DebugCreateSchematic.h" +#include "Minecraft.h" +#include "..\..\..\Minecraft.World\StringHelpers.h" +#include "..\..\..\Minecraft.World\net.minecraft.world.level.h" + +UIScene_DebugCreateSchematic::UIScene_DebugCreateSchematic(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) +{ + // Setup all the Iggy references we need for this scene + initialiseMovie(); + + m_labelTitle.init(L"Name"); + m_labelStartX.init(L"StartX"); + m_labelStartY.init(L"StartY"); + m_labelStartZ.init(L"StartZ"); + m_labelEndX.init(L"EndX"); + m_labelEndY.init(L"EndY"); + m_labelEndZ.init(L"EndZ"); + + m_textInputStartX.init(L"",eControl_StartX); + m_textInputStartY.init(L"",eControl_StartY); + m_textInputStartZ.init(L"",eControl_StartZ); + m_textInputEndX.init(L"",eControl_EndX); + m_textInputEndY.init(L"",eControl_EndY); + m_textInputEndZ.init(L"",eControl_EndZ); + m_textInputName.init(L"",eControl_Name); + + m_checkboxSaveMobs.init(L"Save Mobs", eControl_SaveMobs,false); + m_checkboxUseCompression.init(L"Use Compression", eControl_UseCompression, false); + + m_buttonCreate.init(L"Create",eControl_Create); + + m_data = new ConsoleSchematicFile::XboxSchematicInitParam(); +} + +wstring UIScene_DebugCreateSchematic::getMoviePath() +{ + return L"DebugCreateSchematic"; +} + +void UIScene_DebugCreateSchematic::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) +{ + ui.AnimateKeyPress(iPad, key, repeat, pressed, released); + + switch(key) + { + case ACTION_MENU_CANCEL: + if(pressed) + { + navigateBack(); + } + break; + case ACTION_MENU_OK: + case ACTION_MENU_UP: + case ACTION_MENU_DOWN: + case ACTION_MENU_PAGEUP: + case ACTION_MENU_PAGEDOWN: + case ACTION_MENU_LEFT: + case ACTION_MENU_RIGHT: + sendInputToMovie(key, repeat, pressed, released); + break; + } +} + +void UIScene_DebugCreateSchematic::handlePress(F64 controlId, F64 childId) +{ + switch((int)controlId) + { + case eControl_Create: + { + // We want the start to be even + if(m_data->startX > 0 && m_data->startX%2 != 0) + m_data->startX-=1; + else if(m_data->startX < 0 && m_data->startX%2 !=0) + m_data->startX-=1; + if(m_data->startY < 0) m_data->startY = 0; + else if(m_data->startY > 0 && m_data->startY%2 != 0) + m_data->startY-=1; + if(m_data->startZ > 0 && m_data->startZ%2 != 0) + m_data->startZ-=1; + else if(m_data->startZ < 0 && m_data->startZ%2 !=0) + m_data->startZ-=1; + + // We want the end to be odd to have a total size that is even + if(m_data->endX > 0 && m_data->endX%2 == 0) + m_data->endX+=1; + else if(m_data->endX < 0 && m_data->endX%2 ==0) + m_data->endX+=1; + if(m_data->endY > Level::maxBuildHeight) + m_data->endY = Level::maxBuildHeight; + else if(m_data->endY > 0 && m_data->endY%2 == 0) + m_data->endY+=1; + else if(m_data->endY < 0 && m_data->endY%2 ==0) + m_data->endY+=1; + if(m_data->endZ > 0 && m_data->endZ%2 == 0) + m_data->endZ+=1; + else if(m_data->endZ < 0 && m_data->endZ%2 ==0) + m_data->endZ+=1; + + app.SetXuiServerAction(ProfileManager.GetPrimaryPad(), eXuiServerAction_ExportSchematic, (void *)m_data); + + navigateBack(); + } + break; + case eControl_Name: + case eControl_StartX: + case eControl_StartY: + case eControl_StartZ: + case eControl_EndX: + case eControl_EndY: + case eControl_EndZ: + m_keyboardCallbackControl = (eControls)((int)controlId); + InputManager.RequestKeyboard(L"Enter something",L"",(DWORD)0,25,&UIScene_DebugCreateSchematic::KeyboardCompleteCallback,this,C_4JInput::EKeyboardMode_Default); + break; + }; +} + +void UIScene_DebugCreateSchematic::handleCheckboxToggled(F64 controlId, bool selected) +{ + switch((int)controlId) + { + case eControl_SaveMobs: + m_data->bSaveMobs = selected; + break; + case eControl_UseCompression: + if (selected) + m_data->compressionType = APPROPRIATE_COMPRESSION_TYPE; + else + m_data->compressionType = Compression::eCompressionType_RLE; + break; + } +} + +int UIScene_DebugCreateSchematic::KeyboardCompleteCallback(LPVOID lpParam,bool bRes) +{ + UIScene_DebugCreateSchematic *pClass=(UIScene_DebugCreateSchematic *)lpParam; + + uint16_t pchText[128]; + ZeroMemory(pchText, 128 * sizeof(uint16_t) ); + InputManager.GetText(pchText); + + if(pchText[0]!=0) + { + wstring value = (wchar_t *)pchText; + int iVal = 0; + if(!value.empty()) iVal = _fromString( value ); + switch(pClass->m_keyboardCallbackControl) + { + case eControl_Name: + pClass->m_textInputName.setLabel(value); + if(!value.empty()) + { + swprintf(pClass->m_data->name,64,L"%ls", value.c_str()); + } + else + { + swprintf(pClass->m_data->name,64,L"schematic"); + } + break; + case eControl_StartX: + pClass->m_textInputStartX.setLabel(value); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + pClass->m_data->startX = iVal; + } + break; + case eControl_StartY: + pClass->m_textInputStartY.setLabel(value); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + pClass->m_data->startY = iVal; + } + break; + case eControl_StartZ: + pClass->m_textInputStartZ.setLabel(value); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + pClass->m_data->startZ = iVal; + } + break; + case eControl_EndX: + pClass->m_textInputEndX.setLabel(value); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + pClass->m_data->endX = iVal; + } + break; + case eControl_EndY: + pClass->m_textInputEndY.setLabel(value); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + pClass->m_data->endY = iVal; + } + break; + case eControl_EndZ: + pClass->m_textInputEndZ.setLabel(value); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + pClass->m_data->endZ = iVal; + } + break; + } + } + + return 0; +} +#endif \ No newline at end of file -- cgit v1.2.3