11from dataclasses import field
2- from typing import Callable , List
2+ from tarfile import NUL
3+ from typing import Callable , List , Dict , Any
34from .interop import *
45
56
7+ @dataclass
8+ class ShootingControlData :
9+ type : UwShootingEventEnum
10+ count : int
11+
12+
613class Events :
714 _instance = None
815 _connection_state_listeners : List [Callable [[UwConnectionStateEnum ], None ]] = []
916 _game_state_listeners : List [Callable [[UwGameStateEnum ], None ]] = []
17+ _map_state_listeners : List [Callable [[UwMapStateEnum ], None ]] = []
1018 _update_listeners : List [Callable [[bool ], None ]] = []
11- _shootings_listeners : List [Callable [[UwShootingsArray ], None ]] = []
19+ _shootings_listeners : List [Callable [[List [ int ] ], None ]] = []
1220 _force_eliminated_listeners : List [Callable [[int ], None ]] = []
1321 _chat_listeners : List [Callable [[str , int , UwChatTargetFlags ], None ]] = []
14- _map_state_listeners : List [Callable [[UwMapStateEnum ], None ]] = []
22+ _tasks_index : int = 1
23+ _tasks_actions : Dict [int , Callable ] = {}
1524
1625 def __new__ (cls ):
1726 if cls ._instance is None :
@@ -20,15 +29,14 @@ def __new__(cls):
2029
2130 def initialize (self ) -> None :
2231 uw_interop .uwSetExceptionCallback (self ._exception_callback )
23- # uw_interop.uwSetLogCallback(self._log_callback)
2432 uw_interop .uwSetConnectionStateCallback (self ._connection_state_callback )
2533 uw_interop .uwSetGameStateCallback (self ._game_state_callback )
34+ uw_interop .uwSetMapStateCallback (self ._map_state_callback )
2635 uw_interop .uwSetUpdateCallback (self ._update_callback )
2736 uw_interop .uwSetShootingsCallback (self ._shootings_callback )
2837 uw_interop .uwSetForceEliminatedCallback (self ._force_eliminated_callback )
2938 uw_interop .uwSetChatCallback (self ._chat_callback )
3039 uw_interop .uwSetTaskCompletedCallback (self ._task_completed_callback )
31- uw_interop .uwSetMapStateCallback (self ._map_state_callback )
3240
3341 # ---------------------
3442
@@ -40,10 +48,13 @@ def on_connection_state(
4048 def on_game_state (self , listener : Callable [[UwGameStateEnum ], None ]) -> None :
4149 self ._game_state_listeners .append (listener )
4250
51+ def on_map_state (self , listener : Callable [[UwMapStateEnum ], None ]) -> None :
52+ self ._map_state_listeners .append (listener )
53+
4354 def on_update (self , listener : Callable [[bool ], None ]) -> None :
4455 self ._update_listeners .append (listener )
4556
46- def on_shootings (self , listener : Callable [[UwShootingsArray ], None ]) -> None :
57+ def on_shootings (self , listener : Callable [[List [ int ] ], None ]) -> None :
4758 self ._shootings_listeners .append (listener )
4859
4960 def on_force_eliminated (self , listener : Callable [[int ], None ]) -> None :
@@ -52,8 +63,10 @@ def on_force_eliminated(self, listener: Callable[[int], None]) -> None:
5263 def on_chat (self , listener : Callable [[str , int , UwChatTargetFlags ], None ]) -> None :
5364 self ._chat_listeners .append (listener )
5465
55- def on_map_state (self , listener : Callable [[UwMapStateEnum ], None ]) -> None :
56- self ._map_state_listeners .append (listener )
66+ def shooting_control_data (self , id : int ) -> ShootingControlData :
67+ low = id & 0xFFFF
68+ high = (id >> 16 ) & 0xFFFF
69+ return ShootingControlData (UwShootingEventEnum (low ), high )
5770
5871 # ---------------------
5972
@@ -69,13 +82,17 @@ def _game_state_callback(self, state: UwGameStateEnum) -> None:
6982 for listener in self ._game_state_listeners :
7083 listener (state )
7184
85+ def _map_state_callback (self , state : UwMapStateEnum ) -> None :
86+ for listener in self ._map_state_listeners :
87+ listener (state )
88+
7289 def _update_callback (self , stepping : bool ) -> None :
7390 for listener in self ._update_listeners :
7491 listener (stepping )
7592
7693 def _shootings_callback (self , data : UwShootingsArray ) -> None :
7794 for listener in self ._shootings_listeners :
78- listener (data )
95+ listener (data . data )
7996
8097 def _force_eliminated_callback (self , force : int ) -> None :
8198 for listener in self ._force_eliminated_listeners :
@@ -90,11 +107,17 @@ def _chat_callback(
90107 def _task_completed_callback (
91108 self , task_user_data : int , type : UwTaskTypeEnum
92109 ) -> None :
93- pass # todo
94-
95- def _map_state_callback (self , state : UwMapStateEnum ) -> None :
96- for listener in self ._map_state_listeners :
97- listener (state )
110+ if type != UwTaskTypeEnum .Nothing :
111+ a = self ._tasks_actions .get (task_user_data )
112+ if a is not None :
113+ a ()
114+ self ._tasks_actions .pop (task_user_data )
115+
116+ def _insert_task (self , a : Callable ) -> int :
117+ i = self ._tasks_index
118+ self ._tasks_index += 1
119+ self ._tasks_actions [i ] = a
120+ return i
98121
99122
100123uw_events = Events ()
0 commit comments