Skip to content

Commit

Permalink
More menu refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
jimrandomh committed Apr 30, 2015
1 parent 77f6e7a commit fc79154
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 64 deletions.
1 change: 0 additions & 1 deletion DxProxy/DxProxy/D3DProxyDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,6 @@ class D3DProxyDevice : public BaseDirect3DDevice9
bool VPMENU_IsOpen();
MenuBuilder *VPMENU_NewFrame();
void VPMENU_DrawBorder(int top);
int VPMENU_GetCurrentSelection();
void VPMENU_StartDrawing(MenuBuilder *menu, const char *pageTitle);
void VPMENU_StartDrawing_NonMenu();
void VPMENU_FinishDrawing(MenuBuilder *menu);
Expand Down
90 changes: 36 additions & 54 deletions DxProxy/DxProxy/DataGatherer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -804,7 +804,6 @@ void DataGatherer::VPMENU_ChangeRules()
FLAG_RULECLASS = (1<<31)
};

UINT menuEntryCount = 2;
UINT constantIndex = 0;
std::vector<std::string> menuEntries;
std::vector<D3DCOLOR> menuColor;
Expand Down Expand Up @@ -837,7 +836,6 @@ void DataGatherer::VPMENU_ChangeRules()
menuEntries.push_back(" D3DXPC_MATRIX_COLUMNS");
break;
}
menuEntryCount++;

// output the class
menuColor.push_back(entryColor);
Expand All @@ -846,7 +844,6 @@ void DataGatherer::VPMENU_ChangeRules()
menuEntries.push_back(" "+itShaderConstants->ruleName);
else
menuEntries.push_back(" No Rule assigned");
menuEntryCount++;

// output wether transposed or not
if ((itShaderConstants->hasRule) && (itShaderConstants->desc.Class != D3DXPC_VECTOR))
Expand All @@ -857,34 +854,30 @@ void DataGatherer::VPMENU_ChangeRules()
menuEntries.push_back(" Transposed");
else
menuEntries.push_back(" Non-Transposed");
menuEntryCount++;
}
}

constantIndex++;
menuEntryCount++;
}

MenuBuilder *menu = VPMENU_NewFrame();
UINT entryID = VPMENU_GetCurrentSelection();;

VPMENU_StartDrawing(menu, NULL);

for (UINT i=0; i<menuEntries.size(); i++)
menu->AddItem(menuEntries[i], menuColor[i], [&]()
menu->AddItem(menuEntries[i], menuColor[i], [i,this,&menuID]()
{
// switch shader rule node
if (VPMENU_Input_Selected() && HotkeysActive())
{
// constant node entry ?
if ((menuID[entryID] & FLAG_RULECLASS) == FLAG_RULECLASS)
if ((menuID[i] & FLAG_RULECLASS) == FLAG_RULECLASS)
{
// no influence on class node entry
}
else if ((menuID[entryID] & FLAG_RULENAME) == FLAG_RULENAME) // add/delete rule
else if ((menuID[i] & FLAG_RULENAME) == FLAG_RULENAME) // add/delete rule
{
// no rule present, so add
if (!m_relevantVSConstantNames[menuID[entryID]].hasRule)
if (!m_relevantVSConstantNames[menuID[i]].hasRule)
{
for(auto itShaderConstantMap = m_relevantVSConstants.begin();
itShaderConstantMap != m_relevantVSConstants.end();
Expand All @@ -895,7 +888,7 @@ void DataGatherer::VPMENU_ChangeRules()
itShaderConstants++)
{
// constant name in menu entries already present
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

// never assign "transposed" to vector
Expand All @@ -911,7 +904,7 @@ void DataGatherer::VPMENU_ChangeRules()
itShaderConstants1++)
{
// set rule bool for all relevant constant names
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

UINT operation;
Expand All @@ -922,25 +915,25 @@ void DataGatherer::VPMENU_ChangeRules()
}
else // rule present, so delete
{
deleteRule(m_relevantVSConstantNames[menuID[entryID]].name);
deleteRule(m_relevantVSConstantNames[menuID[i]].name);

// set the menu output accordingly
for(auto itShaderConstants1 = m_relevantVSConstantNames.begin();
itShaderConstants1 != m_relevantVSConstantNames.end();
itShaderConstants1++)
{
// set rule bool for all relevant constant names
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

UINT operation;
itShaderConstants1->hasRule = m_pGameHandler->GetShaderModificationRepository()->ConstantHasRule(itShaderConstants1->name, itShaderConstants1->ruleName, operation, itShaderConstants1->isTransposed);
}
}
}
else if ((menuID[entryID] & FLAG_TRANSPOSITION) == FLAG_TRANSPOSITION)
else if ((menuID[i] & FLAG_TRANSPOSITION) == FLAG_TRANSPOSITION)
{
bool newTrans = !m_relevantVSConstantNames[menuID[entryID]].isTransposed;
bool newTrans = !m_relevantVSConstantNames[menuID[i]].isTransposed;
// transposed or non-transposed
for(auto itShaderConstantMap = m_relevantVSConstants.begin();
itShaderConstantMap != m_relevantVSConstants.end();
Expand All @@ -951,7 +944,7 @@ void DataGatherer::VPMENU_ChangeRules()
itShaderConstants++)
{
// constant name in menu entries already present
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) == 0)
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[i]].name) == 0)
{
// get the operation id
UINT operation;
Expand All @@ -964,7 +957,7 @@ void DataGatherer::VPMENU_ChangeRules()
itShaderConstants1++)
{
// set rule bool for all relevant constant names
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

itShaderConstants1->hasRule = m_pGameHandler->GetShaderModificationRepository()->ConstantHasRule(itShaderConstants1->name, itShaderConstants1->ruleName, operation, itShaderConstants1->isTransposed);
Expand All @@ -976,7 +969,7 @@ void DataGatherer::VPMENU_ChangeRules()
else
{
// open or close node
m_relevantVSConstantNames[menuID[entryID]].nodeOpen = !m_relevantVSConstantNames[menuID[entryID]].nodeOpen;
m_relevantVSConstantNames[menuID[i]].nodeOpen = !m_relevantVSConstantNames[menuID[i]].nodeOpen;

for(auto itShaderConstantMap = m_relevantVSConstants.begin();
itShaderConstantMap != m_relevantVSConstants.end();
Expand All @@ -987,11 +980,11 @@ void DataGatherer::VPMENU_ChangeRules()
itShaderConstants++)
{
// constant name in menu entries already present?
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

// show blinking if shader is drawn
if (m_relevantVSConstantNames[menuID[entryID]].nodeOpen)
if (m_relevantVSConstantNames[menuID[i]].nodeOpen)
{
if (std::find(m_excludedVShaders.begin(), m_excludedVShaders.end(), itShaderConstants->hash) == m_excludedVShaders.end()) {
m_excludedVShaders.push_back(itShaderConstants->hash);
Expand All @@ -1012,17 +1005,17 @@ void DataGatherer::VPMENU_ChangeRules()
// switch shader rule node
if (VPMENU_Input_IsAdjustment() && HotkeysActive())
{
if ((menuID[entryID] & FLAG_RULENAME) == FLAG_RULENAME) // rule node entry
if ((menuID[i] & FLAG_RULENAME) == FLAG_RULENAME) // rule node entry
{
// rule present, so modify
if (m_relevantVSConstantNames[menuID[entryID]].hasRule)
if (m_relevantVSConstantNames[menuID[i]].hasRule)
{
// get the operation id
UINT operation;
m_pGameHandler->GetShaderModificationRepository()
->ConstantHasRule(m_relevantVSConstantNames[menuID[entryID]].name,
m_relevantVSConstantNames[menuID[entryID]].ruleName,
operation, m_relevantVSConstantNames[menuID[entryID]].isTransposed);
->ConstantHasRule(m_relevantVSConstantNames[menuID[i]].name,
m_relevantVSConstantNames[menuID[i]].ruleName,
operation, m_relevantVSConstantNames[menuID[i]].isTransposed);

if (VPMENU_Input_Left())
{
Expand All @@ -1032,7 +1025,7 @@ void DataGatherer::VPMENU_ChangeRules()
else if (VPMENU_Input_Right())
{
UINT maxValue;
if (m_relevantVSConstantNames[menuID[entryID]].desc.Class == D3DXPARAMETER_CLASS::D3DXPC_VECTOR) {
if (m_relevantVSConstantNames[menuID[i]].desc.Class == D3DXPARAMETER_CLASS::D3DXPC_VECTOR) {
maxValue = (UINT)ShaderConstantModificationFactory::Vec4EyeShiftUnity;
} else {
maxValue = (UINT)ShaderConstantModificationFactory::MatConvergenceOffset;
Expand All @@ -1051,7 +1044,7 @@ void DataGatherer::VPMENU_ChangeRules()
itShaderConstants++)
{
// constant name in menu entries already present?
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

modifyRule(itShaderConstants->name, operation, itShaderConstants->isTransposed);
Expand All @@ -1062,7 +1055,7 @@ void DataGatherer::VPMENU_ChangeRules()
++itShaderConstants1)
{
// set rule bool for all relevant constant names
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[entryID]].name) != 0)
if (itShaderConstants1->name.compare(m_relevantVSConstantNames[menuID[i]].name) != 0)
continue;

itShaderConstants1->hasRule = m_pGameHandler->GetShaderModificationRepository()->ConstantHasRule(itShaderConstants1->name, itShaderConstants1->ruleName, operation, itShaderConstants1->isTransposed);
Expand Down Expand Up @@ -1192,50 +1185,39 @@ void DataGatherer::VPMENU_ShowActiveShaders()
}

MenuBuilder *menu = VPMENU_NewFrame();
UINT entryID = VPMENU_GetCurrentSelection();

if ((entryID >= 0) && (entryID < menuEntryCount-2) && (menuEntryCount>2))
// output menu
VPMENU_StartDrawing(menu, NULL);

for (UINT i = 0; i < menuEntries.size(); i++)
{
// switch shader node (drawn/not-drawn)
if (VPMENU_Input_Selected())
menu->AddButton(menuEntries[i].c_str(), menuColor[i], [=]()
{
if (entryID < endOfVertexShaderEntries)
if (i < endOfVertexShaderEntries)
{
// show colored if shader is drawn
if (std::find(m_excludedVShaders.begin(), m_excludedVShaders.end(), menuID[entryID]) == m_excludedVShaders.end()) {
m_excludedVShaders.push_back(menuID[entryID]);
if (std::find(m_excludedVShaders.begin(), m_excludedVShaders.end(), menuID[i]) == m_excludedVShaders.end()) {
m_excludedVShaders.push_back(menuID[i]);
}
else
{
// erase all entries for that hash
m_excludedVShaders.erase(std::remove(m_excludedVShaders.begin(), m_excludedVShaders.end(), menuID[entryID]), m_excludedVShaders.end());
m_excludedVShaders.erase(std::remove(m_excludedVShaders.begin(), m_excludedVShaders.end(), menuID[i]), m_excludedVShaders.end());
}
}
else
{
// show colored if shader is drawn
if (std::find(m_excludedPShaders.begin(), m_excludedPShaders.end(), menuID[entryID]) == m_excludedPShaders.end()) {
m_excludedPShaders.push_back(menuID[entryID]);
if (std::find(m_excludedPShaders.begin(), m_excludedPShaders.end(), menuID[i]) == m_excludedPShaders.end()) {
m_excludedPShaders.push_back(menuID[i]);
}
else
{
// erase all entries for that hash
m_excludedPShaders.erase(std::remove(m_excludedPShaders.begin(), m_excludedPShaders.end(), menuID[entryID]), m_excludedPShaders.end());
m_excludedPShaders.erase(std::remove(m_excludedPShaders.begin(), m_excludedPShaders.end(), menuID[i]), m_excludedPShaders.end());
}
}

HotkeyCooldown(COOLDOWN_SHORT);
}
}



// output menu
VPMENU_StartDrawing(menu, NULL);

for (UINT i = 0; i < menuEntryCount-2; i++)
{
menu->DrawItem(menuEntries[i].c_str(), menuColor[i]);
});
}

menu->AddBackButtons();
Expand Down
11 changes: 2 additions & 9 deletions DxProxy/DxProxy/InGameMenus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,11 +176,6 @@ void D3DProxyDevice::VPMENU_DrawBorder(int top)
ClearEmptyRect(vireio::RenderPosition::Right, rect, COLOR_MENU_BORDER, 2);
}

int D3DProxyDevice::VPMENU_GetCurrentSelection()
{
return menuState.selectedIndex;
}

/**
*
*/
Expand Down Expand Up @@ -389,8 +384,6 @@ void D3DProxyDevice::VPMENU_MainMenu()

menu->AddNavigation("World-Scale Calibration\n", [=]() { VPMENU_WorldScale(); });
menu->AddNavigation("Convergence Adjustment\n", [=]() { VPMENU_Convergence(); });
//menu->AddNavigation("HUD Calibration\n", [=]() { VPMENU_HUD(); });
//menu->AddNavigation("GUI Calibration\n", [=]() { VPMENU_GUI(); });

menu->AddEnumPicker("HUD Settings : %s", (int*)&hud3DDepthMode,
HUD_3D_Depth_Modes::HUD_ENUM_RANGE, [](int val) {
Expand Down Expand Up @@ -1613,7 +1606,7 @@ void MenuBuilder::AddItem(std::string text, std::function<void()> onHover)

void MenuBuilder::AddItem(std::string text, D3DCOLOR color, std::function<void()> onHover)
{
int selection = device->VPMENU_GetCurrentSelection();
int selection = device->menuState.selectedIndex;
int entryID = menuConstructionCurrentEntry;
DrawItem(text.c_str(), color);
if(entryID == selection)
Expand Down Expand Up @@ -1652,7 +1645,7 @@ void MenuBuilder::AddNavigation(std::string text, std::function<void()> menuHand
void MenuBuilder::AddGameKeypress(std::string text, byte *binding)
{
std::string description;
if (device->hotkeyCatch && device->VPMENU_GetCurrentSelection() == menuConstructionCurrentEntry) {
if (device->hotkeyCatch && device->menuState.selectedIndex == menuConstructionCurrentEntry) {
description = "Press the desired key.";
} else {
description = retprintf("%s : %s",
Expand Down

0 comments on commit fc79154

Please sign in to comment.