GUI: mobile edit button only visible in pattern

This commit is contained in:
tildearrow 2022-12-11 16:29:22 -05:00
parent fe4f15fff2
commit 315d7595a5

View file

@ -221,107 +221,109 @@ void FurnaceGUI::drawMobileControls() {
} }
} }
if (mobileEditAnim>0.0f) { if (curWindowLast==GUI_WINDOW_PATTERN) {
ImGui::SetNextWindowPos(ImVec2(0.0f,0.0f)); if (mobileEditAnim>0.0f) {
ImGui::SetNextWindowSize(ImVec2(canvasW,canvasH)); ImGui::SetNextWindowPos(ImVec2(0.0f,0.0f));
} else { ImGui::SetNextWindowSize(ImVec2(canvasW,canvasH));
ImGui::SetNextWindowPos(ImVec2(mobileEditButtonPos.x*canvasW, mobileEditButtonPos.y*canvasH)); } else {
ImGui::SetNextWindowSize(portrait?ImVec2(0.16*canvasW,0.16*canvasW):ImVec2(0.16*canvasH,0.16*canvasH)); ImGui::SetNextWindowPos(ImVec2(mobileEditButtonPos.x*canvasW, mobileEditButtonPos.y*canvasH));
} ImGui::SetNextWindowSize(portrait?ImVec2(0.16*canvasW,0.16*canvasW):ImVec2(0.16*canvasH,0.16*canvasH));
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,ImVec2(0.0f,0.0f));
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding,mobileEditButtonSize.x);
if (ImGui::Begin("MobileEdit",NULL,ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground|ImGuiWindowFlags_NoDecoration)) {
bool mobileEditWas=mobileEdit;
if (ImGui::IsMouseReleased(ImGuiMouseButton_Left) && mobileEdit) {
mobileEdit=false;
} }
if (mobileEditAnim>0.0f) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,ImVec2(0.0f,0.0f));
int curButtonPos=0; ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding,mobileEditButtonSize.x);
float buttonDir, buttonDist; if (ImGui::Begin("MobileEdit",NULL,ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoScrollWithMouse|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground|ImGuiWindowFlags_NoDecoration)) {
float buttonMirrorX=1.0f; bool mobileEditWas=mobileEdit;
float buttonMirrorY=1.0f; if (ImGui::IsMouseReleased(ImGuiMouseButton_Left) && mobileEdit) {
mobileEdit=false;
int buttonLayout=0;
ImVec2 scaledButtonPos=ImVec2(
mobileEditButtonPos.x+((mobileEditButtonSize.x*0.5)/(float)canvasW),
mobileEditButtonPos.y+((mobileEditButtonSize.y*0.5)/(float)canvasH)
);
if (scaledButtonPos.x>0.25 &&
scaledButtonPos.x<0.75 &&
scaledButtonPos.y>0.2 &&
scaledButtonPos.y<0.8) {
buttonLayout=0;
} else if (scaledButtonPos.x>0.4 && scaledButtonPos.x<0.6) {
buttonLayout=2;
} else if (scaledButtonPos.y>0.25 && scaledButtonPos.y<0.75) {
buttonLayout=1;
} else {
buttonLayout=3;
} }
switch (buttonLayout) { if (mobileEditAnim>0.0f) {
case 1: int curButtonPos=0;
if (mobileEditButtonPos.x>0.5) buttonMirrorX=-1.0f; float buttonDir, buttonDist;
break; float buttonMirrorX=1.0f;
case 2: float buttonMirrorY=1.0f;
if (mobileEditButtonPos.y>0.5) buttonMirrorY=-1.0f;
break;
case 3:
if (mobileEditButtonPos.x>0.5) buttonMirrorX=-1.0f;
if (mobileEditButtonPos.y>0.5) buttonMirrorY=-1.0f;
break;
}
for (int i=0; i<8; i++) { int buttonLayout=0;
float anim=(mobileEditAnim*1.5)-(float)i*0.05;
if (anim<0.0f) anim=0.0f;
if (anim>1.0f) anim=1.0f;
anim=5*anim-7*pow(anim,2.0f)+3*pow(anim,3.0f);
buttonDir=mobileButtonAngles[buttonLayout][curButtonPos]; ImVec2 scaledButtonPos=ImVec2(
buttonDist=mobileButtonDistances[buttonLayout][curButtonPos]*mobileEditButtonSize.x*1.6f; mobileEditButtonPos.x+((mobileEditButtonSize.x*0.5)/(float)canvasW),
mobileEditButtonPos.y+((mobileEditButtonSize.y*0.5)/(float)canvasH)
);
ImGui::SetCursorPos(ImVec2( if (scaledButtonPos.x>0.25 &&
(mobileEditButtonPos.x*canvasW)+cos(buttonDir*2.0*M_PI)*buttonDist*buttonMirrorX*anim, scaledButtonPos.x<0.75 &&
(mobileEditButtonPos.y*canvasH)+sin(buttonDir*2.0*M_PI)*buttonDist*buttonMirrorY*anim scaledButtonPos.y>0.2 &&
)); scaledButtonPos.y<0.8) {
if (ImGui::Button(mobileButtonLabels[i+mobileEditPage*8],mobileEditButtonSize)) { buttonLayout=0;
if (mobileButtonActions[i+mobileEditPage*8]) { } else if (scaledButtonPos.x>0.4 && scaledButtonPos.x<0.6) {
doAction(mobileButtonActions[i+mobileEditPage*8]); buttonLayout=2;
} } else if (scaledButtonPos.y>0.25 && scaledButtonPos.y<0.75) {
if (mobileButtonPersist[i+mobileEditPage*8]) { buttonLayout=1;
mobileEdit=true; } else {
} buttonLayout=3;
} }
curButtonPos++; switch (buttonLayout) {
case 1:
if (mobileEditButtonPos.x>0.5) buttonMirrorX=-1.0f;
break;
case 2:
if (mobileEditButtonPos.y>0.5) buttonMirrorY=-1.0f;
break;
case 3:
if (mobileEditButtonPos.x>0.5) buttonMirrorX=-1.0f;
if (mobileEditButtonPos.y>0.5) buttonMirrorY=-1.0f;
break;
}
for (int i=0; i<8; i++) {
float anim=(mobileEditAnim*1.5)-(float)i*0.05;
if (anim<0.0f) anim=0.0f;
if (anim>1.0f) anim=1.0f;
anim=5*anim-7*pow(anim,2.0f)+3*pow(anim,3.0f);
buttonDir=mobileButtonAngles[buttonLayout][curButtonPos];
buttonDist=mobileButtonDistances[buttonLayout][curButtonPos]*mobileEditButtonSize.x*1.6f;
ImGui::SetCursorPos(ImVec2(
(mobileEditButtonPos.x*canvasW)+cos(buttonDir*2.0*M_PI)*buttonDist*buttonMirrorX*anim,
(mobileEditButtonPos.y*canvasH)+sin(buttonDir*2.0*M_PI)*buttonDist*buttonMirrorY*anim
));
if (ImGui::Button(mobileButtonLabels[i+mobileEditPage*8],mobileEditButtonSize)) {
if (mobileButtonActions[i+mobileEditPage*8]) {
doAction(mobileButtonActions[i+mobileEditPage*8]);
}
if (mobileButtonPersist[i+mobileEditPage*8]) {
mobileEdit=true;
}
}
curButtonPos++;
}
ImGui::SetCursorPos(ImVec2(mobileEditButtonPos.x*canvasW,mobileEditButtonPos.y*canvasH));
} else {
float avail=portrait?ImGui::GetContentRegionAvail().y:ImGui::GetContentRegionAvail().x;
mobileEditButtonSize=ImVec2(avail,avail);
} }
ImGui::SetCursorPos(ImVec2(mobileEditButtonPos.x*canvasW,mobileEditButtonPos.y*canvasH)); if (ImGui::Button(ICON_FA_PENCIL "##Edit",mobileEditButtonSize)) {
} else { // click
float avail=portrait?ImGui::GetContentRegionAvail().y:ImGui::GetContentRegionAvail().x; if (mobileEditWas) {
mobileEditButtonSize=ImVec2(avail,avail); if (++mobileEditPage>3) mobileEditPage=0;
} }
if (ImGui::GetIO().MouseDragMaxDistanceSqr[ImGuiMouseButton_Left]<=ImGui::GetIO().ConfigInertialScrollToleranceSqr) {
if (ImGui::Button(ICON_FA_PENCIL "##Edit",mobileEditButtonSize)) { mobileEdit=true;
// click }
if (mobileEditWas) {
if (++mobileEditPage>3) mobileEditPage=0;
} }
if (ImGui::GetIO().MouseDragMaxDistanceSqr[ImGuiMouseButton_Left]<=ImGui::GetIO().ConfigInertialScrollToleranceSqr) { if (ImGui::IsItemClicked() && !mobileEdit) {
mobileEdit=true; dragMobileEditButton=true;
} }
} }
if (ImGui::IsItemClicked() && !mobileEdit) { ImGui::End();
dragMobileEditButton=true; ImGui::PopStyleVar(2);
}
} }
ImGui::End();
ImGui::PopStyleVar(2);
ImGui::SetNextWindowPos(portrait?ImVec2(0.0f,((1.0-mobileMenuPos*0.65)*canvasH)-(0.16*canvasW)):ImVec2(0.5*canvasW*mobileMenuPos,0.0f)); ImGui::SetNextWindowPos(portrait?ImVec2(0.0f,((1.0-mobileMenuPos*0.65)*canvasH)-(0.16*canvasW)):ImVec2(0.5*canvasW*mobileMenuPos,0.0f));
ImGui::SetNextWindowSize(portrait?ImVec2(canvasW,0.16*canvasW):ImVec2(0.16*canvasH,canvasH)); ImGui::SetNextWindowSize(portrait?ImVec2(canvasW,0.16*canvasW):ImVec2(0.16*canvasH,canvasH));