#include "../../Minecraft.World/Platform/stdafx.h" #include "../../Minecraft.World/Util/StringHelpers.h" #include "XUI_DebugSchematicCreator.h" #include "../../Minecraft.World/Level/ChunkSource.h" #include "../../Minecraft.World/Headers/net.minecraft.world.level.h" #ifndef _CONTENT_PACKAGE HRESULT CScene_DebugSchematicCreator::OnInit(XUIMessageInit* pInitData, BOOL& bHandled) { MapChildControls(); m_startX.SetKeyboardType(C_4JInput::EKeyboardMode_Numeric); m_startY.SetKeyboardType(C_4JInput::EKeyboardMode_Numeric); m_startZ.SetKeyboardType(C_4JInput::EKeyboardMode_Numeric); m_endX.SetKeyboardType(C_4JInput::EKeyboardMode_Numeric); m_endY.SetKeyboardType(C_4JInput::EKeyboardMode_Numeric); m_endZ.SetKeyboardType(C_4JInput::EKeyboardMode_Numeric); m_data = new ConsoleSchematicFile::XboxSchematicInitParam(); return S_OK; } HRESULT CScene_DebugSchematicCreator::OnNotifyPressEx( HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled) { // This assumes all buttons can only be pressed with the A button ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A); if (hObjPressed == m_createButton) { // 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; std::wstring value = m_name.GetText(); if (!value.empty()) { swprintf(m_data->name, 64, L"%ls", value.c_str()); } else { swprintf(m_data->name, 64, L"schematic"); } m_data->bSaveMobs = m_saveMobs.IsChecked(); #ifdef _XBOX if (m_useXboxCompr.IsChecked()) m_data->compressionType = Compression::eCompressionType_LZXRLE; else #endif m_data->compressionType = Compression::eCompressionType_RLE; app.SetXuiServerAction(ProfileManager.GetPrimaryPad(), eXuiServerAction_ExportSchematic, (void*)m_data); NavigateBack(); rfHandled = TRUE; } return S_OK; } HRESULT CScene_DebugSchematicCreator::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled) { ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); switch (pInputData->dwKeyCode) { case VK_PAD_B: case VK_PAD_START: case VK_PAD_BACK: NavigateBack(); rfHandled = TRUE; break; } return S_OK; } HRESULT CScene_DebugSchematicCreator::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged* pNotifyValueChangedData, BOOL& bHandled) { if (hObjSource == m_startX) { int iVal = 0; std::wstring value = m_startX.GetText(); if (!value.empty()) iVal = _fromString(value); if (iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) { m_data->startX = iVal; } } else if (hObjSource == m_startY) { int iVal = 0; std::wstring value = m_startY.GetText(); if (!value.empty()) iVal = _fromString(value); if (iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) { m_data->startY = iVal; } } else if (hObjSource == m_startZ) { int iVal = 0; std::wstring value = m_startZ.GetText(); if (!value.empty()) iVal = _fromString(value); if (iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) { m_data->startZ = iVal; } } else if (hObjSource == m_endX) { int iVal = 0; std::wstring value = m_endX.GetText(); if (!value.empty()) iVal = _fromString(value); if (iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) { m_data->endX = iVal; } } else if (hObjSource == m_endY) { int iVal = 0; std::wstring value = m_endY.GetText(); if (!value.empty()) iVal = _fromString(value); if (iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) { m_data->endY = iVal; } } else if (hObjSource == m_endZ) { int iVal = 0; std::wstring value = m_endZ.GetText(); if (!value.empty()) iVal = _fromString(value); if (iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) { m_data->endZ = iVal; } } return S_OK; } #endif