diff options
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_DebugSchematicCreator.cpp')
| -rw-r--r-- | Minecraft.Client/Common/XUI/XUI_DebugSchematicCreator.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_DebugSchematicCreator.cpp b/Minecraft.Client/Common/XUI/XUI_DebugSchematicCreator.cpp new file mode 100644 index 00000000..66279d1f --- /dev/null +++ b/Minecraft.Client/Common/XUI/XUI_DebugSchematicCreator.cpp @@ -0,0 +1,178 @@ +#include "stdafx.h" +#include "..\..\..\Minecraft.World\StringHelpers.h" +#include "XUI_DebugSchematicCreator.h" +#include "..\..\..\Minecraft.World\ChunkSource.h" +#include "..\..\..\Minecraft.World\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; + + 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; + wstring value = m_startX.GetText(); + if(!value.empty()) iVal = _fromString<int>( value ); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + m_data->startX = iVal; + } + } + else if(hObjSource == m_startY) + { + int iVal = 0; + wstring value = m_startY.GetText(); + if(!value.empty()) iVal = _fromString<int>( value ); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + m_data->startY = iVal; + } + } + else if(hObjSource == m_startZ) + { + int iVal = 0; + wstring value = m_startZ.GetText(); + if(!value.empty()) iVal = _fromString<int>( value ); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + m_data->startZ = iVal; + } + } + else if(hObjSource == m_endX) + { + int iVal = 0; + wstring value = m_endX.GetText(); + if(!value.empty()) iVal = _fromString<int>( value ); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + m_data->endX = iVal; + } + } + else if(hObjSource == m_endY) + { + int iVal = 0; + wstring value = m_endY.GetText(); + if(!value.empty()) iVal = _fromString<int>( value ); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + m_data->endY = iVal; + } + } + else if(hObjSource == m_endZ) + { + int iVal = 0; + wstring value = m_endZ.GetText(); + if(!value.empty()) iVal = _fromString<int>( value ); + + if( iVal >= (LEVEL_MAX_WIDTH * -16) || iVal < (LEVEL_MAX_WIDTH * 16)) + { + m_data->endZ = iVal; + } + } + return S_OK; +} +#endif
\ No newline at end of file |
