Well, third way is really only widget.
Sorry for this brainstorming, I need it…
If we focus on widget, what it will do? We must think in MS-DOS programming. You need to implement the ability to look up, down, turn to right and left. Plus fire.
Fire is single keyboard/gamepad button. This is easy, it starts fire when you touch widget (ON_TOUCH_DOWN) and ends on widget’s event ON_TOUCH_UP. Easy.
Now, turn to left/right, aim up/down. How these actions can be performed in MS-DOS duke3d? Axis, mouse, keyboard, ….
Please write what do you expect.