cstimer icon indicating copy to clipboard operation
cstimer copied to clipboard

Add feature to automatically change keybinds after specific part of cube is solved.

Open Carmen14edo opened this issue 3 years ago • 1 comments

I know this might take a lot of programming, but please hear me out.

I was talking about csTimer in a virtual cubing Discord server I'm in, and multiple of us agreed that it'd be immensely useful if there was an option for our keybinds to automatically change upon solving a part of the cube. For instance, you could customize the options so once you get to LSE in Roux your M' and M moves go where your L and R' would normally be.

We agreed that using Roux in csTimer is more difficult than it has to be due to difficulty with keybinding during LSE, but this could go much further than that, and I hope that it will. One could customize the keybinds of each individual step of the method they're using. Personally, I'd be so much faster at 4x4 and 5x5 if this were implemented. Due to the default keybinds of csTimer, it's finicky for me to solve my half-centers when using Yau (especially on 5x5), but with the addition of this feature, it'd be a breeze. It's also more of a hassle than it has to be on 4x4 and impossible on 5x5 for me to do M' and M moves during 3x3 stage as well as r and r', but with this feature it'd be easy as could be. I'm a supporter of exploring alternate methods, so what if I could solve a Petrus block in the DB part of my 3x3 then automatically have back moves, left moves, and right moves be mapped to left moves, front moves, and right moves respectively? That would be a game changer.

The way this would functionally work would actually be reasonably simple. First off, there'd be a section in csTimer where you could change your default keybinds, since some people including myself would benefit from being able to modify a few things. In addition, there'd be a new section in the options for custom automatically-triggered keybinds. Someone would click "New", then choose which virtual puzzle it'd be for. In this example, I'll choose 3x3 and implement custom keybinds for the modified Petrus method I mentioned above. I'd click "Add step", then a new solving step would be created with a custom name I could type. In this example, I'll name it "Petrus block in back". Now that I added this step, next I'd choose the custom keybinds for the different turns that my layout would be changed to upon solving the Petrus block in back. There'd be a list of types of turns, U, U', L, L', R, R', and so on, including turns like M, M', f, f', r, r', and whatnot, and for each type of turn I'd have the optional choice to type next to it what keyboard key I'd like it to be binded to (I don't have to choose a key, since, say, if I don't ever use f moves, I don't need to have them binded to an easily reachable key). Upon having completed binding certain turns to certain keyboard keys, next I'd click "Add new case to trigger keybinds" and a 2D cross-shaped six-sided currently all-gray virtual 3x3 would show up alongside the familiar 3D virtual 3x3 right next to it. The 2D cross-shaped 3x3 would be mapped to the 3D virtual 3x3, and the 2D one would be used for drawing colors on it. If you've ever used the software Cube Explorer, it has the option to draw colors on the cube, so for instance I could draw a solved petrus block centered around the orange and white edge on the left down side of the 3D cube. After drawing that, I could choose whether or not to tick "require exact rotation", which would mean A) I'd have to solve those 7 pieces of that orange and white edge Petrus block and B) I'd have to have my cube rotated specifically so it's in the left down part of the cube, and once A and B are met, csTimer would trigger the custom keybind layout.

Now you might be thinking "they only explained how to tell csTimer to trigger the custom keybind layout for solving an orange and white edge Petrus block, and if you're a white-side-first solver, that's only one of four possible Petrus blocks you could solve in a given solve. Well- and this is the important part- you could add multiple cases for triggering the same keybind by just clicking again "Add new case to trigger keybinds" and drawing say the green and white edge Petrus block, doing it again then drawing the blue and white edge Petrus block, then doing it again and drawing the red and white edge Petrus block, then you have all four required cases specified that, upon completing any of the four, would trigger the custom keybind layout.

You could also have multiple "Add step"s. In the previous paragraph, we added the step of solving a white-side Petrus block specifically in the back down side of the cube triggering a custom keybind layout, and let's say, as briefly mentioned before, the triggered custom keybind would make back moves, left moves, and right moves be mapped to left moves, front moves, and right moves respectively (which would effectively make the Petrus block look like it's solved in the back but your keybinds would act as if the block was actually solved on the left side of your puzzle like normal Petrus, but with the added benefit that it being solved in the back helps your lookahead due to being able to see pieces easier, yet still being able to solve the rest of F2L with the same keyboard keys as you'd need after solving a Petrus block on left down). So that new custom keybind is triggered upon solving the Petrus block in back. You could add another "Add step" and specify it to, upon you solving F2L, to say, change the keybinds back to default (it's up to you if you think there should be a tickable "default keybinds" box or if one would have to manually input in the specific keybinds for each type of turn to what the default would be. Personally I'm ok with either since either would get the job done, though the former would probably help with ease of using the new feature). Anyway, now you solved F2L and the default keybinds were triggered.

What about triggering a custom keybind layout upon solving OLL? It'd be as simple as clicking "Add step" then drawing the F2L solved and drawing the top layer as all yellow without specifying what exact pieces each yellow piece is- just that yellow is completely solved on the top side of the cube. Easy peasy.

The above features would ideally be implementable for all virtual WCA puzzles that are choosable in csTimer, though a good first step would be a beta version of the feature that's specifically for 3x3, then after that's tested and works well the feature could be expanded to other WCA puzzles, since in my opinion this feature wouldn't just be extremely useful for 3x3 but also for every other virtual puzzle, including 4x4 and 5x5 as previously mentioned, but all puzzles would have benefits from the addition of this feature.

I'm sorry if that's a lot of work, and if you don't want to implement it you don't have to. I'm just an idea guy, but I can promise you that this would be a game changer. This would literally be one of the most important features ever added to csTimer if you were to add it. If you're interested in implementing this feature, feel free to contact me as much as you want for any beta testing and I'll help in any way I possibly can, including feature testing and bug testing. There might've been one or more important aspects of this feature that I didn't mention that, if you designed it solely based on what I said above, wouldn't be added, so I think beta testing the idea itself before officially releasing would help me think/realize if there's anything else important to add to it that I didn't think of. Godspeed.

-Carmen14edo

Carmen14edo avatar Oct 01 '21 19:10 Carmen14edo

One other feature that could be implemented alongside this is keybinding keyboard keys to 180 degree moves like U2, R2, etc. So I could press like U and do an R2. This would also be one of the most potentially revolutionary features ever added to csTimer if it were to be added.

Carmen14edo avatar Oct 01 '21 19:10 Carmen14edo