| 
 | 1 | +from typing import Callable, List  | 
 | 2 | +from .interop import *  | 
 | 3 | + | 
 | 4 | +class Events:  | 
 | 5 | +    _instance = None  | 
 | 6 | + | 
 | 7 | +    def __new__(cls):  | 
 | 8 | +        if cls._instance is None:  | 
 | 9 | +            cls._instance = super().__new__(cls)  | 
 | 10 | +        return cls._instance  | 
 | 11 | + | 
 | 12 | +    def __init__(self):  | 
 | 13 | +        self._connection_state_listeners: List[Callable[[UwConnectionStateEnum], None]] = []  | 
 | 14 | +        self._game_state_listeners: List[Callable[[UwGameStateEnum], None]] = []  | 
 | 15 | +        self._update_listeners: List[Callable[[int, bool], None]] = []  | 
 | 16 | +        self._shooting_listeners: List[Callable[[UwShootingArray], None]] = []  | 
 | 17 | +        self._explosions_listeners: List[Callable[[UwExplosionsArray], None]] = []  | 
 | 18 | +        self._force_eliminated_listeners: List[Callable[[int], None]] = []  | 
 | 19 | +        self._chat_listeners: List[Callable[[str, int, UwChatTargetFlags], None]] = []  | 
 | 20 | +        self._map_state_listeners: List[Callable[[UwMapStateEnum], None]] = []  | 
 | 21 | + | 
 | 22 | +    def initialize(self) -> None:  | 
 | 23 | +        uw_interop.uwSetExceptionCallback(self._exception_callback)  | 
 | 24 | +        # uw_interop.uwSetLogCallback(self._log_callback)  | 
 | 25 | +        uw_interop.uwSetConnectionStateCallback(self._connection_state_callback)  | 
 | 26 | +        uw_interop.uwSetGameStateCallback(self._game_state_callback)  | 
 | 27 | +        uw_interop.uwSetUpdateCallback(self._update_callback)  | 
 | 28 | +        uw_interop.uwSetShootingCallback(self._shooting_callback)  | 
 | 29 | +        uw_interop.uwSetExplosionsCallback(self._explosions_callback)  | 
 | 30 | +        uw_interop.uwSetForceEliminatedCallback(self._force_eliminated_callback)  | 
 | 31 | +        uw_interop.uwSetChatCallback(self._chat_callback)  | 
 | 32 | +        uw_interop.uwSetTaskCompletedCallback(self._task_completed_callback)  | 
 | 33 | +        uw_interop.uwSetMapStateCallback(self._map_state_callback)  | 
 | 34 | + | 
 | 35 | +    # ---------------------  | 
 | 36 | + | 
 | 37 | +    def on_connection_state(self, listener: Callable[[UwConnectionStateEnum], None]) -> None:  | 
 | 38 | +        self._connection_state_listeners.append(listener)  | 
 | 39 | + | 
 | 40 | +    def on_game_state(self, listener: Callable[[UwGameStateEnum], None]) -> None:  | 
 | 41 | +        self._game_state_listeners.append(listener)  | 
 | 42 | + | 
 | 43 | +    def on_update(self, listener: Callable[[int, bool], None]) -> None:  | 
 | 44 | +        self._update_listeners.append(listener)  | 
 | 45 | + | 
 | 46 | +    def on_shooting(self, listener: Callable[[UwShootingArray], None]) -> None:  | 
 | 47 | +        self._shooting_listeners.append(listener)  | 
 | 48 | + | 
 | 49 | +    def on_explosions(self, listener: Callable[[UwExplosionsArray], None]) -> None:  | 
 | 50 | +        self._explosions_listeners.append(listener)  | 
 | 51 | + | 
 | 52 | +    def on_force_eliminated(self, listener: Callable[[int], None]) -> None:  | 
 | 53 | +        self._force_eliminated_listeners.append(listener)  | 
 | 54 | + | 
 | 55 | +    def on_chat(self, listener: Callable[[str, int, UwChatTargetFlags], None]) -> None:  | 
 | 56 | +        self._chat_listeners.append(listener)  | 
 | 57 | + | 
 | 58 | +    def on_map_state(self, listener: Callable[[UwMapStateEnum], None]) -> None:  | 
 | 59 | +        self._map_state_listeners.append(listener)  | 
 | 60 | + | 
 | 61 | +    # ---------------------  | 
 | 62 | + | 
 | 63 | +    def _exception_callback(self, message: str) -> None:  | 
 | 64 | +        print(f"exception: {message}")  | 
 | 65 | +        breakpoint()  | 
 | 66 | + | 
 | 67 | +    def _connection_state_callback(self, state: UwConnectionStateEnum) -> None:  | 
 | 68 | +        for listener in self._connection_state_listeners:  | 
 | 69 | +            listener(state)  | 
 | 70 | + | 
 | 71 | +    def _game_state_callback(self, state: UwGameStateEnum) -> None:  | 
 | 72 | +        for listener in self._game_state_listeners:  | 
 | 73 | +            listener(state)  | 
 | 74 | + | 
 | 75 | +    def _update_callback(self, tick: int, stepping: bool) -> None:  | 
 | 76 | +        for listener in self._update_listeners:  | 
 | 77 | +            listener(tick, stepping)  | 
 | 78 | + | 
 | 79 | +    def _shooting_callback(self, data: UwShootingArray) -> None:  | 
 | 80 | +        for listener in self._shooting_listeners:  | 
 | 81 | +            listener(data)  | 
 | 82 | + | 
 | 83 | +    def _explosions_callback(self, data: UwExplosionsArray) -> None:  | 
 | 84 | +        for listener in self._explosions_listeners:  | 
 | 85 | +            listener(data)  | 
 | 86 | + | 
 | 87 | +    def _force_eliminated_callback(self, force: int) -> None:  | 
 | 88 | +        for listener in self._force_eliminated_listeners:  | 
 | 89 | +            listener(force)  | 
 | 90 | + | 
 | 91 | +    def _chat_callback(self, message: str, sender: int, flags: UwChatTargetFlags) -> None:  | 
 | 92 | +        for listener in self._chat_listeners:  | 
 | 93 | +            listener(message, sender, flags)  | 
 | 94 | + | 
 | 95 | +    def _task_completed_callback(self, task_user_data: int, type: UwTaskTypeEnum) -> None:  | 
 | 96 | +        pass # todo  | 
 | 97 | + | 
 | 98 | +    def _map_state_callback(self, state: UwMapStateEnum) -> None:  | 
 | 99 | +        for listener in self._map_state_listeners:  | 
 | 100 | +            listener(state)  | 
 | 101 | + | 
 | 102 | +uw_events = Events()  | 
0 commit comments