Kończę klepać kod obsługi UI w swoim silniku, na liście TODO zostało mi jeszcze kilka pozycji, w tym ta dotycząca kursora myszy. Nie mam bogatego doświadczenia z graniem w bardziej nowoczesne tytuły, dlatego potrzebuję porady w tej sprawie.
Otóż kernel UI, w obecnej formie, pozwala obsługiwać główne menu dowolnym urządzeniem — myszą, klawiaturą i gamepadami. Jeśli kursor znajduje się w obrębie kontenera UI, aktualizator sprawdza czy jakaś kontrolka znajduje się pod kursorem — jeśli tak to ją fokusuje i przekazuje jej zdarzenia myszy (ruch kursora, klikanie, scrollowanie itd.). Jeśli pod kursorem nie ma żadnej kontrolki, to żadna nie jest aktywna (nie ma fokusu) — jeśli kontrolka była sfokusowana, ale kursor wyjechał poza jej obszar, to traci ona fokus.
Ogólnie chodzi o to, że jeśli gracz rusza myszą i coś klika/scrolluje, to kontener UI będzie posiadał sfokusowaną (aktywną) kontrolkę tylko wtedy, gdy kursor nad jakąś kontrolką się znajduje. Jeśli kursor jest nad pustym obszarem kontenera, to nie ma fokusu.
Teraz zostało mi jeszcze dodać flagę, aby gdy mysz jest w użyciu i gracz wciśnie klawisz lub coś na gamepadzie, to mysz się deaktywuje, kursor się chowa i od tego momentu input myszy jest ignorowany. W ten sposób, jeśli gracz będzie chciał grać np. tylko gamepadem, będzie sobie sterował UI za pomocą gamepada (lub pomagał sobie klawiaturą), a kursor myszy nie będzie mu przeszkadzał (będzie ukryty).
Według mnie, jeśli ktoś nie chce używać myszy, bo woli klawiaturę lub gamepady, to kursor powinien być stale niewidoczny. Aby jednak móc w dowolnym momencie skorzystać z myszy, wystarczy ją ruszyć lub kliknąć, kursor się pokaże i kontener UI sfokusuje to co jest pod kursorem (jeśli nie ma pod nim kontrolki to usunie fokus z kontenera).
I tutaj mam pytanie — dla mnie takie zachowanie jest bardzo dobre, a dla was?
Mogę zrobić tak, że kursor myszy będzie stale widoczny i będzie zmieniał fokus tylko jeśli wjedzie się nim w obszar innej kontrolki niż aktualnie sfokusowana. Widziałem, że tak to działa w kilku grach, jednak są to gry, w które trzeba grać myszą. Moja gra taką nie będzie — gamepady i klawiatura będą najlepsze do grania, ale mapper dopuszcza użycie myszy dla praktycznie dowolnej akcji (w tym chodzenia). Jeśli więc gracz będzie chciał grać np. mysz+klawiatura, to nie ma problemu — wtedy obsługa wszystkich menu myszą będzie idealna, wręcz obowiązkowa.
Jak to widzicie? Wolelibyście cały czas widzieć kursor czy żeby był ukryty, jeśli nie chcielibyście używać myszy? A podczas korzystania z myszy w menu, wolelibyście aby mysz umożliwiała tylko aktywację kontrolki pod kursorem, czy aby też deaktywowała kontrolkę, jeśli przesunie się go w puste miejsce kontenera UI?