Tischel / TPie

FFXIV Dalamud plugin for ring-shaped hotbars
GNU Affero General Public License v3.0
34 stars 16 forks source link

Add controller/gamepad support #10

Open ryankhart opened 2 years ago

ryankhart commented 2 years ago

Due to the radial menus, this seems like it would be a perfect fit for controller support. I'm currently about to set it up for controller on my end using Steam's radial menu configuration. I'm just leaving this idea here in the issues so maybe it can be easier for controller users in the future.

I'm thinking that there can be a combination of controller buttons/triggers not yet used by the game, that could serve as the hotkey to trigger the radial menu, then either the left or right thumbstick can control the mouse originating from the center of the screen and, when the user tilts the thumbstick, it can move the mouse pointer away from the center point, and either A or a controller trigger may select an option.

That just my rough idea. I got no expectations that this will get implemented any time soon, if at all, but I wanted to show my support by contributing ideas to improve the plugin. Thanks for your consideration!

Tischel commented 2 years ago

Very unlikely that this will ever happen.

Drew-L commented 2 years ago

I know owner said no but I would also love for this to be implemented.

I'm thinking that there can be a combination of controller buttons/triggers not yet used by the game

Following up on the button combo, most controllers nowadays have a home, select, and start button, plus the touchpad for Playstation controllers, but the game leaves at least one unused (share button and home on DS4 for me). A Select + R-stick combo isn't too uncomfortable for me not to get used to. Can't hurt to dream amirite...

TomNCatz commented 1 year ago

This functionality would be incredibly useful. Even just one ring button on controller would make this a viable solution.

This mostly looks like it's written in C#, maybe I'll take a look at it over the weekend and see if I can figure it out.

TomNCatz commented 1 year ago

I got a first pass implementation of controllers working with some caveats. Since I can't submit to this repo I've forked and put them in the gh10-controller-support branch here : https://github.com/TomNCatz/TPie I've not set up packages yet, but I can look into that if people really want it and Tischel does not express interest in pulling it in at some point(the work I've done is rather small compared to the original plugin and it doesn't really feel right to publish an alternative version of their work without talking to them)

If you pull this down and load it up I recommend exporting your ring settings and backing them up somewhere. The conversion from the main plugin to this branch has been tested and should be fine, but I have not tested conversion back.

As for the state of the work I did it:

Known Issues:

ryankhart commented 1 year ago

I got a first pass implementation of controllers working with some caveats. Since I can't submit to this repo I've forked and put them in the gh10-controller-support branch here : https://github.com/TomNCatz/TPie

That's great! I don't see a pull request from you yet on this repo. Does it not let you even pull request?

I've not set up packages yet, but I can look into that if people really want it and Tischel does not express interest in pulling it in at some point(the work I've done is rather small compared to the original plugin and it doesn't really feel right to publish an alternative version of their work without talking to them)

It's an open-source project under the AGPL-3.0 license, so you can do what you want, as long as your derivative work is also under the AGPL-3.0 license even if a pull request is not accepted.

Anyway, this motivates me to get back into the game and build your project for myself to test out.

Tischel commented 1 year ago
  • Dalamud does not currently give plugins access to gamepad input blocking, so any buttons you press or movement of the analog stick is still detected by the game(it can be a bit nauseating) I have spoken with the Dalamud devs and this seems to partially be a result of a core game issue, and partially be intentional. I'm working with them for a long term solution, but there is a short term work around. If you press L1 and L3 at the same time it blocks all controller input to the game, pressing it again will unlock it. If you do this and then use your TPie gestures they will not affect the gameplay, but it is slower then just doing the action.

This is the main reason why I never even bothered with controller support. To me this defeats the entire purpose.

That being said I'm not against adding the functionality behind some kind of warning message to the user describing the known issues of using a controller with the plugin.

Feel free to open a PR and I'll take a look when I have the time. The PR could be merged as is or I could also use it as the foundation to build the feature myself if there's stuff I don't like about it. I'm not gonna make any promises on timing because all of this is a lot of work so it can take a while.

You could also make your own version of the plugin with a more hacky approach for controller support and distribute it as 3rd party. I would personally prefer to ultimately have the feature added to TPie but for that to happen I need to be happy with it.

ryankhart commented 1 year ago

Oh I must have read about that issue too quickly to notice. Perhaps there's a way to emulate the L1+L3 gamepad controls so it triggers to gamepad blocking feature of Dalamud while the ring is showing and gamepad support is active in the TPie settings? Then, when the ring is dismissed, another L1+L3 could be triggered again? It's a shot in the dark, and I don't know if that is feasible or not or if I'm even using the right terminology with the word 'emulate'.

TomNCatz commented 1 year ago

Pull request submitted.

This is just a first pass, so I would not expect you to pull it in 'as is' anyway. one big code callout I will make is that right now the gamepad bindings just copy all of the keybind info about jobs. This is unfavorable in several ways, but all of the solutions I could think of would have stood a large chance of disrupting the way keybinds currently work.