Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
11 kB · 356 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357#include "stdafx.h"
#include "..\..\ItemRenderer.h"#include "..\..\GameRenderer.h"#include "..\..\TileRenderer.h"#include "..\..\Lighting.h"#include "..\..\ScreenSizeCalculator.h"#include "..\..\LocalPlayer.h"#include "..\..\..\Minecraft.World\ItemInstance.h"#include "..\..\..\Minecraft.World\Item.h"#include "..\..\..\Minecraft.World\Tile.h"#include "XUI_Ctrl_MinecraftSlot.h"
//-----------------------------------------------------------------------------// CXuiCtrlMinecraftSlot class//-----------------------------------------------------------------------------
// The xzp path icons for the leaderboard
LPCWSTR CXuiCtrlMinecraftSlot::xzpIcons[15]={ L"Graphics\\Leaderboard\\LeaderBoard_Icon_Skeleton.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Creeper.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_SpiderJockey.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Spider.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Zombie.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_ZombiePigman.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Swam.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Walked.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Fallen.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Portal.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Climbed.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Ghast.png", L"Graphics\\Leaderboard\\LeaderBoard_Icon_Slime.png", L"Graphics\\CraftIcons\\icon_structures.png", L"Graphics\\CraftIcons\\icon_tools.png",};
//-----------------------------------------------------------------------------CXuiCtrlMinecraftSlot::CXuiCtrlMinecraftSlot() : //m_hBrush(NULL), m_bDirty(FALSE), m_iPassThroughDataAssociation(0), m_iPassThroughIdAssociation(0), m_fScale(1.0f), m_fAlpha(1.0f), m_iID(0), m_iCount(0), m_iAuxVal(0), m_bDecorations(false), m_isFoil(false), m_popTime(0){ m_pItemRenderer = new ItemRenderer(); m_item = nullptr;
m_bScreenWidthSetup = false;
Minecraft *pMinecraft=Minecraft::GetInstance();
if(pMinecraft != NULL) { m_fScreenWidth=(float)pMinecraft->width_phys; m_fScreenHeight=(float)pMinecraft->height_phys; m_bScreenWidthSetup = true; }}
CXuiCtrlMinecraftSlot::~CXuiCtrlMinecraftSlot(){ delete m_pItemRenderer;}
VOID CXuiCtrlMinecraftSlot::SetPassThroughDataAssociation(unsigned int iID, unsigned int iData){ m_item = nullptr; m_iPassThroughIdAssociation = iID; m_iPassThroughDataAssociation = iData;}
//-----------------------------------------------------------------------------HRESULT CXuiCtrlMinecraftSlot::OnGetSourceImage(XUIMessageGetSourceImage* pData, BOOL& rfHandled){ XUIMessage Message; CustomMessage_GetSlotItem_Struct MsgGetSlotItem; HRESULT hr; HXUIOBJ hObj;
CustomMessage_GetSlotItem(&Message, &MsgGetSlotItem, m_iPassThroughIdAssociation, m_iPassThroughDataAssociation);
hr = GetParent(&hObj);
if (HRESULT_SUCCEEDED(hr)) { hr = XuiBubbleMessage(hObj, &Message);
if(hr == XUI_ERR_SOURCEDATA_ITEM) { // Go up the parent chain one more HXUIOBJ hParent; hr = XuiElementGetParent(hObj,&hParent); hr = XuiBubbleMessage(hParent, &Message); }
if (Message.bHandled) { pData->szPath = MsgGetSlotItem.szPath; pData->bDirty = MsgGetSlotItem.bDirty;
if(MsgGetSlotItem.item != NULL) { m_item = MsgGetSlotItem.item; m_iID = m_item->id; m_iPad = GET_SLOTDISPLAY_USERINDEX_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField); m_fAlpha = ((float)GET_SLOTDISPLAY_ALPHA_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField))/31.0f; m_bDecorations = GET_SLOTDISPLAY_DECORATIONS_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField); m_fScale = ((float)GET_SLOTDISPLAY_SCALE_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField))/10.0f; } else { m_iID = GET_SLOTDISPLAY_ID_FROM_ITEM_BITMASK(MsgGetSlotItem.iItemBitField);
// if the id is greater than or equal to 32000, then it's an xzp icon, not a game icon if(m_iID<32000) { // 4J Stu - Some parent controls may overide this, others will leave it as what we passed in
m_iPad = GET_SLOTDISPLAY_USERINDEX_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField); m_fAlpha = ((float)GET_SLOTDISPLAY_ALPHA_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField))/31.0f; m_bDecorations = GET_SLOTDISPLAY_DECORATIONS_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField); m_iCount = GET_SLOTDISPLAY_COUNT_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField); m_fScale = ((float)GET_SLOTDISPLAY_SCALE_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField))/10.0f; m_popTime = GET_SLOTDISPLAY_POPTIME_FROM_DATA_BITMASK(MsgGetSlotItem.iDataBitField);
m_iAuxVal = GET_SLOTDISPLAY_AUXVAL_FROM_ITEM_BITMASK(MsgGetSlotItem.iItemBitField);
//m_iID = iID;
m_isFoil = GET_SLOTDISPLAY_FOIL_FROM_ITEM_BITMASK(MsgGetSlotItem.iItemBitField); } else { pData->szPath = xzpIcons[m_iID-32000]; }
if(m_item != NULL && (m_item->id != m_iID || m_item->getAuxValue() != m_iAuxVal || m_item->GetCount() != m_iCount) ) m_item = nullptr; }
rfHandled = TRUE; return hr; } else { pData->szPath = L""; } }
pData->bDirty = m_bDirty; m_bDirty = FALSE; rfHandled = TRUE; return S_OK;}
//-----------------------------------------------------------------------------HRESULT CXuiCtrlMinecraftSlot::OnInit(XUIMessageInit* pInitData, BOOL& rfHandled){ //DWORD dwPropId; HRESULT hr=S_OK; return hr;}
//-----------------------------------------------------------------------------
HRESULT CXuiCtrlMinecraftSlot::OnRender(XUIMessageRender *pRenderData, BOOL &bHandled ){ // Force an update of the id XUIMessage Message; XUIMessageGetSourceImage MsgGetImage; HRESULT hr; XuiMessageGetSourceImage(&Message, &MsgGetImage, m_iPassThroughIdAssociation, m_iPassThroughDataAssociation, FALSE); hr = XuiSendMessage(m_hObj, &Message);
// We cannot have an Item with id 0 if(m_item != NULL || (m_iID > 0 && m_iID<32000) ) { HXUIDC hDC = pRenderData->hDC; CXuiControl xuiControl(m_hObj); if(m_item == NULL) m_item = shared_ptr<ItemInstance>( new ItemInstance(m_iID, m_iCount, m_iAuxVal) );
// build and render with the game call
RenderManager.Set_matrixDirty();
Minecraft *pMinecraft=Minecraft::GetInstance();
D3DXMATRIX matrix; xuiControl.GetFullXForm(&matrix); float bwidth,bheight; xuiControl.GetBounds(&bwidth,&bheight);
float x = matrix._41; float y = matrix._42;
// Base scale on height of this control, compared to height of what the item renderer normally renders (16 pixels high). Potentially // we might want separate x & y scales here
float scaleX = bwidth / 16.0f; float scaleY = bheight / 16.0f;
// apply any scale in the matrix too scaleX *= matrix._11; scaleY *= matrix._22;
// Annoyingly, XUI renders everything to a z of 0 so if we want to render anything that needs the z-buffer on top of it, then we need to clear it. // Clear just the region required for this control. D3DRECT clearRect; clearRect.x1 = (int)(matrix._41) - 2; clearRect.y1 = (int)(matrix._42) - 2; clearRect.x2 = (int)(matrix._41 + ( bwidth * matrix._11 )) + 2; clearRect.y2 = (int)(matrix._42 + ( bheight * matrix._22 )) + 2;
if(!m_bScreenWidthSetup) { Minecraft *pMinecraft=Minecraft::GetInstance(); if(pMinecraft != NULL) { m_fScreenWidth=(float)pMinecraft->width_phys; m_fScreenHeight=(float)pMinecraft->height_phys; m_bScreenWidthSetup = true; } }
RenderManager.Clear(GL_DEPTH_BUFFER_BIT, &clearRect); // glClear(GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, m_fScreenWidth, m_fScreenHeight, 0, 1000, 3000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0, 0, -2000);
glEnable(GL_RESCALE_NORMAL); glPushMatrix(); glRotatef(120, 1, 0, 0); Lighting::turnOn(); glPopMatrix();
//Make sure that pMinecraft->player is the correct player so that player specific rendering // eg clock and compass, are rendered correctly shared_ptr<MultiplayerLocalPlayer> oldPlayer = pMinecraft->player;
if( m_iPad >= 0 && m_iPad < XUSER_MAX_COUNT ) pMinecraft->player = pMinecraft->localplayers[m_iPad];
float pop = m_popTime; if (pop > 0) { glPushMatrix(); float squeeze = 1 + pop / (float) Inventory::POP_TIME_DURATION; float sx = x; float sy = y; float sxoffs = 8 * scaleX; float syoffs = 12 * scaleY; glTranslatef((float)(sx + sxoffs), (float)(sy + syoffs), 0); glScalef(1 / squeeze, (squeeze + 1) / 2, 1); glTranslatef((float)-(sx + sxoffs), (float)-(sy + syoffs), 0); }
m_pItemRenderer->renderAndDecorateItem(pMinecraft->font, pMinecraft->textures, m_item, x, y,scaleX,scaleY,m_fAlpha,m_isFoil,false);
if (pop > 0) { glPopMatrix(); }
if(m_bDecorations) { if((scaleX!=1.0f) ||(scaleY!=1.0f)) { glPushMatrix(); glScalef(scaleX, scaleY, 1.0f); int iX= (int)(0.5f+((float)x)/scaleX); int iY= (int)(0.5f+((float)y)/scaleY);
m_pItemRenderer->renderGuiItemDecorations(pMinecraft->font, pMinecraft->textures, m_item, iX, iY, m_fAlpha); glPopMatrix(); } else { m_pItemRenderer->renderGuiItemDecorations(pMinecraft->font, pMinecraft->textures, m_item, (int)x, (int)y, m_fAlpha); } }
pMinecraft->player = oldPlayer;
Lighting::turnOff(); glDisable(GL_RESCALE_NORMAL);
XuiRenderRestoreState(hDC);
bHandled = TRUE; } return S_OK;}
void CXuiCtrlMinecraftSlot::SetIcon(int iPad, int iId,int iAuxVal, int iCount, int iScale, unsigned int uiAlpha,bool bDecorations,BOOL bShow, bool isFoil){ m_item = nullptr; m_iID=iId; m_iAuxVal=iAuxVal;
// aux value for diggers can go as high as 1561 //const _Tier *_Tier::DIAMOND = new _Tier(3, 1561, 8, 3); // // setMaxDamage(tier->getUses());
// int ItemInstance::getDamageValue() // { // return auxValue; // }
if( (m_iAuxVal & 0xFF) == 0xFF) // 4J Stu - If the aux value is set to match any m_iAuxVal = 0;
m_iCount=iCount; m_fScale = (float)(iScale)/10.0f; //m_uiAlpha=uiAlpha; m_fAlpha =((float)(uiAlpha)) / 255.0f; m_bDecorations = bDecorations; // mif(bDecorations) m_iDecorations=1; // else m_iDecorations=0;
m_iPad = iPad;
m_isFoil = isFoil;
XuiElementSetShow(m_hObj,bShow);}
void CXuiCtrlMinecraftSlot::SetIcon(int iPad, shared_ptr<ItemInstance> item, int iScale, unsigned int uiAlpha,bool bDecorations, BOOL bShow){ m_item = item; m_isFoil = item->isFoil(); m_iPad = iPad; m_fScale = (float)(iScale)/10.0f; m_fAlpha =((float)(uiAlpha)) / 31; m_bDecorations = bDecorations; m_bDirty = TRUE; XuiElementSetShow(m_hObj,bShow);}