Code:
#include"StdAfx.h"
#include"Pivot.h"
usingnamespacestd;
PivotHost::PivotHost(void){height=0;AnimationOffset=0;scrollOffset=0;reservedInt=0;smallIncrementCounter=0;bottomAlpha=0;sliderColor=D3DCOLOR_ARGB(255,30,30,30);descBarColor=D3DCOLOR_ARGB(100,10,10,10);selectedItem=-1;selectedItemSpot=0;descBarHeight=0;dLeftMouse=0;dRightMouse=0;mouseOverLength=0;addToMouseOverLength=false;selectedSubItem=-1;lastSelectedSubItem=-1;lastSelectedSubItemDescOpac=0;selectedSubItemDescOpac=0;selectedSubItemDescOffset=0;quickHoverSelectedSubItem=-1;}PivotHost::~PivotHost(void){}voidPivotHost::AddItem(PivotItempiv){Columns.push_back(piv);}voidPivotHost::D3DObjects(LPDIRECT3DDEVICE9pDevice){for(it=Columns.begin();it<Columns.end();it++){it->D3DObjects(pDevice);for(it->it=it->Items.begin();it->it<it->Items.end();it->it++)it->it->SetTextSize();}for(inti=0;i<Columns.size();i++){for(intj=0;j<Columns[i].Items.size();j++){PivotSubItemTitleFont->GetTextExtent(Columns[i].Items[j].hotkey->friendlyName,&Columns[i].Items[j].hotkey->textSize);}}}voidPivotHost::Draw(LPDIRECT3DDEVICE9pDevice,SpriteBatch*sprite){if(Input::IsKeyDown(xLBUTTON)){dLeftMouse2++;}elsedLeftMouse2=0;if(Input::IsKeyDown(xRBUTTON)){dRightMouse2++;}elsedRightMouse2=0;if(height>0){dx::FillRGB(0,sys::screenSize.cy-height-descBarHeight,sys::screenSize.cx,descBarHeight,descBarColor,pDevice);if(selectedSubItem>=0){font::fontSegoe14->DrawTextA(5,sys::screenSize.cy-height-descBarHeight+selectedSubItemDescOffset+2,D3DCOLOR_ARGB(selectedSubItemDescOpac,255,255,255),(TCHAR*)Columns[selectedItem].Items[selectedSubItem].text);if(lastSelectedSubItem>=0)font::fontSegoe14->DrawTextA(5,sys::screenSize.cy-height-descBarHeight+2,D3DCOLOR_ARGB(lastSelectedSubItemDescOpac,255,255,255),(TCHAR*)Columns[selectedItem].Items[lastSelectedSubItem].text);}dx::FillRGB(0,sys::screenSize.cy-height,sys::screenSize.cx,height,sliderColor,pDevice);spot=PivotItemMargin;reservedInt=AnimationOffset+scrollOffset;count=0;for(it=Columns.begin();it<Columns.end();it++){if(MouseState::isIn(spot+reservedInt,sys::screenSize.cy-height,it->titleSize.cx+PivotItemHorizontalSpacing,100)){PivotItemFont->DrawTextA(spot+reservedInt,sys::screenSize.cy-55,D3DCOLOR_ARGB(bottomAlpha,180,180,180),it->title);if(dLeftMouse2==1&&selectedItem!=count){selectedItem=count;lastSelectedSubItem=-1;selectedSubItem=-1;}}elsePivotItemFont->DrawTextA(spot+reservedInt,sys::screenSize.cy-55,D3DCOLOR_ARGB(bottomAlpha,255,255,255),it->title);it->spot=spot;spot+=it->titleSize.cx+PivotItemHorizontalSpacing;count++;}for(inti=0;i<Columns.size();i++){if(i==selectedItem){intspot2=sys::screenSize.cy-PivotSubItemDistanceFromBottom;intspot3=Columns[selectedItem].spot+scrollOffset+AnimationOffset;for(intj=Columns[selectedItem].Items.size()-1;j>=0;j--){if(Columns[selectedItem].Items[j].activation==ACTIVATION_NORMAL){if(MouseState::isIn(spot3,spot2+Columns[selectedItem].verticalOffset,Columns[selectedItem].Items[j].titleSize.cx<150?150:Columns[selectedItem].Items[j].titleSize.cx,PivotSubItemLineSpacing)){if(Columns[selectedItem].Items[j].modifer[0]){PivotSubItemTitleFont->DrawTextA(spot3<0?0:spot3,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,sys::accentTR,sys::accentTG,sys::accentTB):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,sys::accentTR,sys::accentTG,sys::accentTB),(TCHAR*)Columns[selectedItem].Items[j].title);PivotSubItemSuperScriptFont->DrawTextA(spot3<0?0+Columns[selectedItem].Items[j].titleSize.cx:spot3+Columns[selectedItem].Items[j].titleSize.cx,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,sys::accentTR,sys::accentTG,sys::accentTB):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,sys::accentTR,sys::accentTG,sys::accentTB),Columns[selectedItem].Items[j].itemType==TYPE_TEXT_MASK?(TCHAR*)Columns[selectedItem].Items[j].textmask[Columns[selectedItem].Items[j].modifer[0]-1].c_str():(TCHAR*)Columns[selectedItem].Items[j].displayValue);}else{PivotSubItemTitleFont->DrawTextA(spot3<0?0:spot3,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,255,255,255):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,255,255,255),(TCHAR*)Columns[selectedItem].Items[j].title);}if(j!=selectedSubItem&&mouseOverLength>50&&selectedItem==i){lastSelectedSubItem=selectedSubItem;lastSelectedSubItemDescOpac=255;selectedSubItemDescOpac=0;selectedSubItemDescOffset=30;selectedSubItem=j;mouseOverLength=0;}elseif(j!=quickHoverSelectedSubItem&&selectedItem==i){quickHoverSelectedSubItem=j;mouseOverLength=0;addToMouseOverLength=false;}elseif(selectedItem==i)addToMouseOverLength=true;else{mouseOverLength==0;addToMouseOverLength=false;}if(dLeftMouse2==1||dLeftMouse>40){switch(Columns[selectedItem].Items[j].itemType){caseTYPE_BOOL:Columns[selectedItem].Items[j].modifer[0]=!Columns[selectedItem].Items[j].modifer[0];break;caseTYPE_TEXT_MASK:if(Columns[selectedItem].Items[j].modifer[0]>0)Columns[selectedItem].Items[j].modifer[0]--;break;caseTYPE_INT:if(Columns[selectedItem].Items[j].modifer[0]>0)Columns[selectedItem].Items[j].modifer[0]--;if(Columns[selectedItem].Items[j].modifer[0]>0)sprintf_s(Columns[selectedItem].Items[j].displayValue,sizeof(Columns[selectedItem].Items[j].displayValue),"%d",Columns[selectedItem].Items[j].modifer[0]);elsesprintf_s(Columns[selectedItem].Items[j].displayValue,sizeof(Columns[selectedItem].Items[j].displayValue),"");break;caseTYPE_INT_MASK_AS_FLOAT:if(Columns[selectedItem].Items[j].modifer[0]>0)Columns[selectedItem].Items[j].modifer[0]--;if(Columns[selectedItem].Items[j].modifer[0]>0)sprintf_s(Columns[selectedItem].Items[j].displayValue,sizeof(Columns[selectedItem].Items[j].displayValue),"%.1f",1+(float)Columns[selectedItem].Items[j].modifer[0]/10);elsesprintf_s(Columns[selectedItem].Items[j].displayValue,sizeof(Columns[selectedItem].Items[j].displayValue),"");break;}}if(dRightMouse2==1||dRightMouse>40){switch(Columns[selectedItem].Items[j].itemType){caseTYPE_BOOL:Columns[selectedItem].Items[j].modifer[0]=!Columns[selectedItem].Items[j].modifer[0];break;caseTYPE_TEXT_MASK:if(Columns[selectedItem].Items[j].modifer[0]<Columns[selectedItem].Items[j].MaximumValue)Columns[selectedItem].Items[j].modifer[0]++;break;caseTYPE_INT:if(Columns[selectedItem].Items[j].modifer[0]<Columns[selectedItem].Items[j].MaximumValue)Columns[selectedItem].Items[j].modifer[0]++;sprintf_s(Columns[selectedItem].Items[j].displayValue,sizeof(Columns[selectedItem].Items[j].displayValue),"%d",Columns[selectedItem].Items[j].modifer[0]);break;caseTYPE_INT_MASK_AS_FLOAT:if(Columns[selectedItem].Items[j].modifer[0]<Columns[selectedItem].Items[j].MaximumValue)Columns[selectedItem].Items[j].modifer[0]++;sprintf_s(Columns[selectedItem].Items[j].displayValue,sizeof(Columns[selectedItem].Items[j].displayValue),"%.1f",1+(float)Columns[selectedItem].Items[j].modifer[0]/10);break;}}}else{if(Columns[selectedItem].Items[j].modifer[0]){PivotSubItemTitleFont->DrawTextA(spot3<0?0:spot3,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,sys::accentR,sys::accentG,sys::accentB):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,sys::accentR,sys::accentG,sys::accentB),(TCHAR*)Columns[selectedItem].Items[j].title);PivotSubItemSuperScriptFont->DrawTextA(spot3<0?0+Columns[selectedItem].Items[j].titleSize.cx:spot3+Columns[selectedItem].Items[j].titleSize.cx,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,sys::accentR,sys::accentG,sys::accentB):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,sys::accentR,sys::accentG,sys::accentB),Columns[selectedItem].Items[j].itemType==TYPE_TEXT_MASK?(TCHAR*)Columns[selectedItem].Items[j].textmask[Columns[selectedItem].Items[j].modifer[0]-1].c_str():(TCHAR*)Columns[selectedItem].Items[j].displayValue);}else{PivotSubItemTitleFont->DrawTextA(spot3<0?0:spot3,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,200,200,200):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,200,200,200),(TCHAR*)Columns[selectedItem].Items[j].title);}}}else{PivotSubItemTitleFont->DrawTextA(spot3<0?0:spot3,spot2+Columns[selectedItem].verticalOffset,bottomAlpha<250?D3DCOLOR_ARGB(bottomAlpha,100,100,100):D3DCOLOR_ARGB(Columns[selectedItem].Alpha,100,100,100),(TCHAR*)Columns[selectedItem].Items[j].title);}spot2-=PivotSubItemLineSpacing;}}elseif(Columns[i].Alpha>0){intspot2=sys::screenSize.cy-PivotSubItemDistanceFromBottom;intspot3=Columns[i].spot+scrollOffset+AnimationOffset;for(Columns[i].rit=Columns[i].Items.rbegin();Columns[i].rit<Columns[i].Items.rend();Columns[i].rit++){PivotSubItemTitleFont->DrawTextA(spot3<0?0:spot3,spot2+Columns[i].verticalOffset,D3DCOLOR_ARGB(Columns[i].Alpha,180,180,180),(TCHAR*)Columns[i].rit->title);spot2-=PivotSubItemLineSpacing;}}}}}voidPivotHost::KeyUpdate(SHotkey*menuHotkey){kMenu[0]=Input::IsKeyDown(menuHotkey->vKey);if(MouseState::left[0])dLeftMouse++;elsedLeftMouse=0;if(MouseState::right[0])dRightMouse++;elsedRightMouse=0;}voidPivotHost::KeyComplete(){kMenu[1]=kMenu[0];}boolPivotHost::smallIncrement(intincrement){if(smallIncrementCounter==0||smallIncrementCounter%increment==0)returntrue;returnfalse;}voidPivotHost::Update(SHotkey*menuHotkey){KeyUpdate(menuHotkey);smallIncrementCounter++;if(kMenu[0]&&!kMenu[1]){isShown=!isShown;
#ifdefNDEBUGif(*(int*)GAMEADDRESS_GAMESTATUS==1){keybd_event(xESCAPE,0,NULL,NULL);keybd_event(xESCAPE,0,KEYEVENTF_KEYUP,NULL);}
#endifif(isShown){for(it=Columns.begin();it<Columns.end();it++){it->Alpha=0;it->verticalOffset=0;}AnimationOffset=100;scrollOffset=0;bottomAlpha=0;selectedItem=-1;selectedSubItem=-1;lastSelectedSubItem=-1;lastSelectedSubItemDescOpac=0;selectedSubItemDescOpac=0;}}if(isShown){if(addToMouseOverLength)mouseOverLength++;if(height<PivotHeight)height+=5;elseif(descBarHeight<DescriptionBarHeight&&smallIncrement(2))descBarHeight++;if(AnimationOffset>10)AnimationOffset-=5;elseif(scrollOffset>-55&&smallIncrement(4))scrollOffset--;if(bottomAlpha<240)bottomAlpha+=10;elseif(bottomAlpha<255)bottomAlpha=255;if(selectedSubItemDescOpac<255)selectedSubItemDescOpac+=15;if(lastSelectedSubItemDescOpac>0)lastSelectedSubItemDescOpac-=15;if(selectedSubItemDescOffset>0)selectedSubItemDescOffset-=2;}elseif(!isShown&&height>0){descBarHeight--;height-=5;bottomAlpha-=15;}if(isShown){for(inti=0;i<Columns.size();i++){if(i==selectedItem){if(Columns[i].Alpha<250)Columns[i].Alpha+=10;if(Columns[i].verticalOffset>-30)Columns[i].verticalOffset-=2;}else{if(Columns[i].Alpha>0)Columns[i].Alpha-=20;if(Columns[i].verticalOffset<0)Columns[i].verticalOffset+=2;}}}if(smallIncrementCounter>3600)smallIncrementCounter=0;KeyComplete();}