Skip to content

Commit 3107eaa

Browse files
committed
introduce ControllerWindow, UIManager accepts controller input from window
1 parent 8db8913 commit 3107eaa

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

arcade/gui/experimental/controller.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import warnings
22
from dataclasses import dataclass
3+
from typing import TYPE_CHECKING
34

45
from pyglet.input import Controller
56
from pyglet.math import Vec2
67

78
from arcade import ControllerManager
8-
from arcade.gui import (
9-
UIEvent,
10-
UIManager,
11-
)
9+
from arcade.gui.events import UIEvent
10+
11+
if TYPE_CHECKING:
12+
from arcade.gui.ui_manager import UIManager
1213

1314

1415
@dataclass
@@ -117,7 +118,7 @@ class UIControllerBridge(_ControllerListener):
117118
that other systems should be aware, when not to act on events (like when the UI is active).
118119
"""
119120

120-
def __init__(self, ui: UIManager):
121+
def __init__(self, ui: "UIManager"):
121122
self.ui = ui
122123
self.cm = ControllerManager()
123124

arcade/gui/ui_manager.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from typing import Iterable, Optional, TypeVar, Union
1515

1616
from pyglet.event import EVENT_HANDLED, EVENT_UNHANDLED, EventDispatcher
17+
from pyglet.input import Controller
1718
from typing_extensions import TypeGuard
1819

1920
import arcade
@@ -31,6 +32,13 @@
3132
UITextMotionEvent,
3233
UITextMotionSelectEvent,
3334
)
35+
from arcade.gui.experimental.controller import (
36+
UIControllerButtonPressEvent,
37+
UIControllerButtonReleaseEvent,
38+
UIControllerDpadEvent,
39+
UIControllerStickEvent,
40+
UIControllerTriggerEvent,
41+
)
3442
from arcade.gui.surface import Surface
3543
from arcade.gui.widgets import UIWidget
3644
from arcade.types import LBWH, AnchorPoint, Point2, Rect
@@ -293,6 +301,11 @@ def enable(self) -> None:
293301
self.on_text,
294302
self.on_text_motion,
295303
self.on_text_motion_select,
304+
self.on_stick_motion,
305+
self.on_trigger_motion,
306+
self.on_button_press,
307+
self.on_button_release,
308+
self.on_dpad_motion,
296309
)
297310

298311
def disable(self) -> None:
@@ -316,6 +329,11 @@ def disable(self) -> None:
316329
self.on_text,
317330
self.on_text_motion,
318331
self.on_text_motion_select,
332+
self.on_stick_motion,
333+
self.on_trigger_motion,
334+
self.on_button_press,
335+
self.on_button_release,
336+
self.on_dpad_motion,
319337
)
320338

321339
def on_update(self, time_delta):
@@ -452,6 +470,21 @@ def on_resize(self, width, height):
452470

453471
self.trigger_render()
454472

473+
def on_stick_motion(self, controller: Controller, name, value):
474+
return self.dispatch_ui_event(UIControllerStickEvent(controller, name, value))
475+
476+
def on_trigger_motion(self, controller: Controller, name, value):
477+
return self.dispatch_ui_event(UIControllerTriggerEvent(controller, name, value))
478+
479+
def on_button_press(self, controller: Controller, button):
480+
return self.dispatch_ui_event(UIControllerButtonPressEvent(controller, button))
481+
482+
def on_button_release(self, controller: Controller, button):
483+
return self.dispatch_ui_event(UIControllerButtonReleaseEvent(controller, button))
484+
485+
def on_dpad_motion(self, controller: Controller, value):
486+
return self.dispatch_ui_event(UIControllerDpadEvent(controller, value))
487+
455488
@property
456489
def rect(self) -> Rect:
457490
"""The rect of the UIManager, which is the window size."""

arcade/gui/view.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
from typing import TypeVar
44

5+
from pyglet.input import Controller
6+
57
from arcade import View
68
from arcade.gui.ui_manager import UIManager
79
from arcade.gui.widgets import UIWidget
@@ -58,3 +60,19 @@ def on_draw_before_ui(self):
5860
def on_draw_after_ui(self):
5961
"""Use this method to draw custom elements after the UI elements are drawn."""
6062
pass
63+
64+
# Controller event mapping
65+
def on_stick_motion(self, controller: Controller, name, value):
66+
pass
67+
68+
def on_trigger_motion(self, controller: Controller, name, value):
69+
pass
70+
71+
def on_button_press(self, controller: Controller, button):
72+
pass
73+
74+
def on_button_release(self, controller: Controller, button):
75+
pass
76+
77+
def on_dpad_motion(self, controller: Controller, value):
78+
pass

0 commit comments

Comments
 (0)