diff options
| author | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
|---|---|---|
| committer | daoge_cmd <3523206925@qq.com> | 2026-03-01 12:16:08 +0800 |
| commit | b691c43c44ff180d10e7d4a9afc83b98551ff586 (patch) | |
| tree | 3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/XUI/XUI_debug.cpp | |
| parent | def8cb415354ac390b7e89052a50605285f1aca9 (diff) | |
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/XUI/XUI_debug.cpp')
| -rw-r--r-- | Minecraft.Client/Common/XUI/XUI_debug.cpp | 391 |
1 files changed, 391 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/XUI/XUI_debug.cpp b/Minecraft.Client/Common/XUI/XUI_debug.cpp new file mode 100644 index 00000000..61b818a0 --- /dev/null +++ b/Minecraft.Client/Common/XUI/XUI_debug.cpp @@ -0,0 +1,391 @@ +// Minecraft.cpp : Defines the entry point for the application. +// + +#include "stdafx.h" + +#include <assert.h> +#include "XUI_Debug.h" +#include "..\..\..\Minecraft.Client\StatsCounter.h" + +LPCWSTR CScene_Debug::m_DebugCheckboxTextA[eDebugSetting_Max+1]= +{ + L"Load Saves From Local Folder Mode", + L"Write Saves To Local Folder Mode", + L"Freeze Players", //L"Not Used", + L"Display Safe Area", + L"Mobs don't attack", + L"Freeze Time", + L"Disable Weather", + L"Craft Anything", + L"Use DPad for debug", + L"Mobs don't tick", + L"Instant Mine", + L"Show UI Console", + L"Distributable Save", + L"Debug Leaderboards", + L"Height-Water-Biome Maps", + L"Superflat nether", + //L"Light/Dark background", + L"More lightning when thundering", + L"", +}; + +LPCWSTR CScene_Debug::m_DebugButtonTextA[eDebugButton_Max+1]= +{ + L"Award Theme", + L"Award Avatar Item 1", + L"Award Avatar Item 2", + L"Award Avatar Item 3", + L"Award Gamerpic 1", + L"Award Gamerpic 2", + L"Check Tips", + L"Wipe Leaderboards", + L"", +}; + + + +//---------------------------------------------------------------------------------- +// Performs initialization tasks - retrieves controls. +//---------------------------------------------------------------------------------- +HRESULT CScene_Debug::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) +{ + m_iPad=*(int *)pInitData->pvInitData; + + // set text and enable any debug options required + int iCheckboxIndex=0; + int iButtonIndex=0; + float fWidth=500.0f; + float fX=240.0f; + float fY=200.0f; + float fYInc=5.0f; + float fControlHeight=25.0f; + + if((!RenderManager.IsHiDef() && !RenderManager.IsWidescreen()) || app.GetLocalPlayerCount()>1) + { + fWidth=250.0f; + fX=30.0f; + fY=30.0f; + fYInc=5.0f; + fControlHeight=15.0f; + } + + CXuiCheckbox *pCheckbox; + CXuiControl *pButton; + m_iTotalCheckboxElements=0; + m_iTotalButtonElements=0; + m_bOnCheckboxes=true; + + // count the items + while((*m_DebugCheckboxTextA[m_iTotalCheckboxElements])!=0) + { + m_iTotalCheckboxElements++; + } + + m_DebugCheckboxDataA= new DEBUGDATA [m_iTotalCheckboxElements]; + + while((*m_DebugCheckboxTextA[iCheckboxIndex])!=0) + { + XuiCreateObject( XUI_CLASS_CHECKBOX, &m_DebugCheckboxDataA[iCheckboxIndex].hXuiObj ); + XuiObjectFromHandle( m_DebugCheckboxDataA[iCheckboxIndex].hXuiObj, &m_DebugCheckboxDataA[iCheckboxIndex].pvData ); + + pCheckbox = (CXuiCheckbox *)m_DebugCheckboxDataA[iCheckboxIndex].pvData; + //m_phXuiObjA[iElementIndex] = pCheckbox->m_hObj; + pCheckbox->SetText(m_DebugCheckboxTextA[iCheckboxIndex]); + pCheckbox->SetShow(TRUE); + + D3DXVECTOR3 vPos; + float tx,ty; + pCheckbox->GetBounds(&tx,&ty); + pCheckbox->SetBounds(fWidth,fControlHeight); + vPos.x=fX; + vPos.y=fY; + vPos.z=0.0f; + pCheckbox->SetPosition(&vPos); + fY+=fControlHeight+fYInc; + + XuiElementAddChild(m_hObj,m_DebugCheckboxDataA[iCheckboxIndex].hXuiObj); + + iCheckboxIndex++; + } + + // and the buttons + if((!RenderManager.IsHiDef() && !RenderManager.IsWidescreen())|| app.GetLocalPlayerCount()>1) + { + fWidth=260.0f; + fX=300.0f; + fY=30.0f; + fControlHeight=40.0f; + } + else + { + fWidth=350.0f; + fX=750.0f; + fY=200.0f; + fControlHeight=40.0f; + } + + + + while((*m_DebugButtonTextA[m_iTotalButtonElements])!=0) + { + m_iTotalButtonElements++; + } + + m_DebugButtonDataA= new DEBUGDATA [m_iTotalButtonElements]; + + while((*m_DebugButtonTextA[iButtonIndex])!=0) + { + XuiCreateObject( XUI_CLASS_BUTTON, &m_DebugButtonDataA[iButtonIndex].hXuiObj ); + XuiObjectFromHandle( m_DebugButtonDataA[iButtonIndex].hXuiObj, &m_DebugButtonDataA[iButtonIndex].pvData ); + + pButton = (CXuiControl *)m_DebugButtonDataA[iButtonIndex].pvData; + //m_phXuiObjA[iElementIndex] = pCheckbox->m_hObj; + pButton->SetText(m_DebugButtonTextA[iButtonIndex]); + pButton->SetShow(TRUE); + + D3DXVECTOR3 vPos; + float tx,ty; + pButton->GetBounds(&tx,&ty); + pButton->SetBounds(fWidth,fControlHeight); + vPos.x=fX; + vPos.y=fY; + vPos.z=0.0f; + pButton->SetPosition(&vPos); + fY+=fControlHeight+fYInc; + + XuiElementAddChild(m_hObj,m_DebugButtonDataA[iButtonIndex].hXuiObj); + + // if you're not the primary player, disable all these - you need a storage device for them + + if(ProfileManager.GetPrimaryPad()!=m_iPad) + { + XuiControlSetEnable(m_DebugButtonDataA[iButtonIndex].hXuiObj,FALSE); + } + iButtonIndex++; + } + + + + unsigned int uiDebugBitmask=app.GetGameSettingsDebugMask(m_iPad); + + for(int i=0;i<iCheckboxIndex;i++) + { + CXuiCheckbox *pCheckbox = (CXuiCheckbox *)m_DebugCheckboxDataA[i].pvData; + pCheckbox->SetCheck( (uiDebugBitmask&(1<<i)) ?TRUE:FALSE); + } + + + if(m_DebugCheckboxDataA[0].hXuiObj) + { + XuiElementSetUserFocus(m_DebugCheckboxDataA[0].hXuiObj,m_iPad); + } + + m_iCurrentCheckboxElement=0; + m_iCurrentButtonElement=0; + +#ifdef _DEBUG + // testing the upload of the player custom skin +// wstring wsTemp; +// +// wsTemp=L"Deadmau5_Skin.png"; +// app.UploadFileToGlobalStorage(m_iPad,C4JStorage::eGlobalStorage_TitleUser,&wsTemp); +// wsTemp=L"Mojang_Cape.png"; +// app.UploadFileToGlobalStorage(m_iPad,C4JStorage::eGlobalStorage_TitleUser,&wsTemp); +// wsTemp=L"4J_Cape.png"; +// app.UploadFileToGlobalStorage(m_iPad,C4JStorage::eGlobalStorage_TitleUser,&wsTemp); +#endif + + return S_OK; +} + +HRESULT CScene_Debug::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled) +{ + ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode); + + HRESULT hr=S_OK; + int iCurrentBitmaskIndex=0; + unsigned int uiDebugBitmask=0L; + + // Explicitly handle X button presses + if (pInputData->dwKeyCode == VK_PAD_B) + { + // check all the settings + for(int i=0;i<m_iTotalCheckboxElements;i++) + { + CXuiCheckbox *pCheckbox = (CXuiCheckbox *)m_DebugCheckboxDataA[i].pvData; + uiDebugBitmask|=pCheckbox->IsChecked()?(1<<iCurrentBitmaskIndex):0; + iCurrentBitmaskIndex++; + } + + if(uiDebugBitmask!=app.GetGameSettingsDebugMask(pInputData->UserIndex)) + { + app.SetGameSettingsDebugMask(pInputData->UserIndex,uiDebugBitmask); + if(app.DebugSettingsOn()) + { + app.ActionDebugMask(pInputData->UserIndex); + } + else + { + // force debug mask off + app.ActionDebugMask(pInputData->UserIndex,true); + } + + app.CheckGameSettingsChanged(true,pInputData->UserIndex); + } + app.NavigateBack(pInputData->UserIndex); + rfHandled = TRUE; + } + + + return hr; +} + + +HRESULT CScene_Debug::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled) +{ + if(m_bOnCheckboxes) + { + // If it's not from the current control, ignore it + if(m_DebugCheckboxDataA[m_iCurrentCheckboxElement].hXuiObj!=pControlNavigateData->hObjSource) return S_OK; + + switch(pControlNavigateData->nControlNavigate) + { + case XUI_CONTROL_NAVIGATE_UP: + if(m_iCurrentCheckboxElement>0) + { + m_iCurrentCheckboxElement--; + XuiElementSetUserFocus(m_DebugCheckboxDataA[m_iCurrentCheckboxElement].hXuiObj, m_iPad); + } + break; + case XUI_CONTROL_NAVIGATE_DOWN: + if((m_iCurrentCheckboxElement+1)<m_iTotalCheckboxElements) + { + m_iCurrentCheckboxElement++; + XuiElementSetUserFocus(m_DebugCheckboxDataA[m_iCurrentCheckboxElement].hXuiObj, m_iPad); + } + break; + case XUI_CONTROL_NAVIGATE_RIGHT: + m_bOnCheckboxes=false; + if(m_iCurrentCheckboxElement<m_iTotalButtonElements) + { + m_iCurrentButtonElement=m_iCurrentCheckboxElement; + } + XuiElementSetUserFocus(m_DebugButtonDataA[m_iCurrentButtonElement].hXuiObj, m_iPad); + break; + } + } + else + { + // If it's not from the current control, ignore it + if(m_DebugButtonDataA[m_iCurrentButtonElement].hXuiObj!=pControlNavigateData->hObjSource) return S_OK; + + switch(pControlNavigateData->nControlNavigate) + { + case XUI_CONTROL_NAVIGATE_UP: + if(m_iCurrentButtonElement>0) + { + m_iCurrentButtonElement--; + XuiElementSetUserFocus(m_DebugButtonDataA[m_iCurrentButtonElement].hXuiObj, m_iPad); + } + break; + case XUI_CONTROL_NAVIGATE_DOWN: + if((m_iCurrentButtonElement+1)<m_iTotalButtonElements) + { + m_iCurrentButtonElement++; + XuiElementSetUserFocus(m_DebugButtonDataA[m_iCurrentButtonElement].hXuiObj, m_iPad); + } + break; + + case XUI_CONTROL_NAVIGATE_LEFT: + m_bOnCheckboxes=true; + if(m_iCurrentButtonElement<m_iTotalCheckboxElements) + { + m_iCurrentCheckboxElement=m_iCurrentButtonElement; + } + XuiElementSetUserFocus(m_DebugCheckboxDataA[m_iCurrentCheckboxElement].hXuiObj, m_iPad); + break; + } + } + + + + return S_OK; +} +//---------------------------------------------------------------------------------- +// Updates the UI when the list selection changes. +//---------------------------------------------------------------------------------- +HRESULT CScene_Debug::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged* pNotifyValueChanged, BOOL& bHandled ) +{ + + return S_OK; +} +//---------------------------------------------------------------------------------- +// Updates the UI when the list selection changes. +//---------------------------------------------------------------------------------- +HRESULT CScene_Debug::OnNotifySelChanged( HXUIOBJ hObjSource, XUINotifySelChanged* pNotifySelChangedData, BOOL& bHandled ) +{ + + + return S_OK; +} + +//---------------------------------------------------------------------------------- +// Handler for the button press message. +//---------------------------------------------------------------------------------- +HRESULT CScene_Debug::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); + + int iButton=0; + + while((iButton<m_iTotalButtonElements) && m_DebugButtonDataA[iButton].hXuiObj!=hObjPressed) + { + iButton++; + } + + if(iButton==m_iTotalButtonElements) + { + // it's not a button then + return S_OK; + } + + // you need to be the primary player to be able to earn these, since you need a storage device + + switch(iButton) + { + case eDebugButton_Theme: + ProfileManager.Award( pNotifyPressData->UserIndex, eAward_socialPost ); + break; + case eDebugButton_Avatar_Item_1: + ProfileManager.Award( pNotifyPressData->UserIndex, eAward_eatPorkChop ); + break; + case eDebugButton_Avatar_Item_2: + ProfileManager.Award( pNotifyPressData->UserIndex, eAward_play100Days ); + break; + case eDebugButton_Avatar_Item_3: + ProfileManager.Award( pNotifyPressData->UserIndex, eAward_arrowKillCreeper ); + break; + case eDebugButton_Gamerpic_1: + ProfileManager.Award( pNotifyPressData->UserIndex, eAward_mine100Blocks ); + break; + case eDebugButton_Gamerpic_2: + ProfileManager.Award( pNotifyPressData->UserIndex, eAward_kill10Creepers ); + break; + case eDebugButton_CheckTips: + app.NavigateToScene(pNotifyPressData->UserIndex,eUIScene_DebugTips); + break; + + case eDebugButton_WipeLeaderboards: +#ifdef _DEBUG +// commenting out so it doesn't get done by mistake +// Minecraft::GetInstance()->stats[pNotifyPressData->UserIndex]->WipeLeaderboards(); +#endif + break; + + } + + return S_OK; +} + |
