1use super::*;
2
3pub trait ProcessorView {
9 fn get_replay_meta(&self) -> SubtrActorResult<ReplayMeta>;
10 fn player_count(&self) -> usize;
11 fn iter_player_ids_in_order(&self) -> Box<dyn Iterator<Item = &PlayerId> + '_>;
12 fn current_in_game_team_player_counts(&self) -> [usize; 2];
13
14 fn get_seconds_remaining(&self) -> SubtrActorResult<i32>;
15 fn get_replicated_state_name(&self) -> SubtrActorResult<i32>;
16 fn get_replicated_game_state_time_remaining(&self) -> SubtrActorResult<i32>;
17 fn get_ball_has_been_hit(&self) -> SubtrActorResult<bool>;
18 fn get_ignore_ball_syncing(&self) -> SubtrActorResult<bool>;
19 fn get_team_scores(&self) -> SubtrActorResult<(i32, i32)>;
20 fn get_ball_hit_team_num(&self) -> SubtrActorResult<u8>;
21 fn get_scored_on_team_num(&self) -> SubtrActorResult<u8>;
22
23 fn get_normalized_ball_rigid_body(&self) -> SubtrActorResult<boxcars::RigidBody>;
24 fn get_velocity_applied_ball_rigid_body(
25 &self,
26 target_time: f32,
27 ) -> SubtrActorResult<boxcars::RigidBody>;
28 fn get_interpolated_ball_rigid_body(
29 &self,
30 target_time: f32,
31 close_enough_to_frame_time: f32,
32 ) -> SubtrActorResult<boxcars::RigidBody>;
33
34 fn get_normalized_player_rigid_body(
35 &self,
36 player_id: &PlayerId,
37 ) -> SubtrActorResult<boxcars::RigidBody>;
38 fn get_velocity_applied_player_rigid_body(
39 &self,
40 player_id: &PlayerId,
41 target_time: f32,
42 ) -> SubtrActorResult<boxcars::RigidBody>;
43 fn get_interpolated_player_rigid_body(
44 &self,
45 player_id: &PlayerId,
46 target_time: f32,
47 close_enough_to_frame_time: f32,
48 ) -> SubtrActorResult<boxcars::RigidBody>;
49
50 fn get_player_name(&self, player_id: &PlayerId) -> SubtrActorResult<String>;
51 fn get_player_team_key(&self, player_id: &PlayerId) -> SubtrActorResult<String>;
52 fn get_player_is_team_0(&self, player_id: &PlayerId) -> SubtrActorResult<bool>;
53 fn get_player_id_from_car_id(&self, actor_id: &boxcars::ActorId) -> SubtrActorResult<PlayerId>;
54 fn get_player_boost_level(&self, player_id: &PlayerId) -> SubtrActorResult<f32>;
55 fn get_player_last_boost_level(&self, player_id: &PlayerId) -> SubtrActorResult<f32>;
56 fn get_player_boost_percentage(&self, player_id: &PlayerId) -> SubtrActorResult<f32>;
57 fn get_boost_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8>;
58 fn get_jump_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8>;
59 fn get_double_jump_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8>;
60 fn get_dodge_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8>;
61 fn get_powerslide_active(&self, player_id: &PlayerId) -> SubtrActorResult<bool>;
62 fn get_player_match_assists(&self, player_id: &PlayerId) -> SubtrActorResult<i32>;
63 fn get_player_match_goals(&self, player_id: &PlayerId) -> SubtrActorResult<i32>;
64 fn get_player_match_saves(&self, player_id: &PlayerId) -> SubtrActorResult<i32>;
65 fn get_player_match_score(&self, player_id: &PlayerId) -> SubtrActorResult<i32>;
66 fn get_player_match_shots(&self, player_id: &PlayerId) -> SubtrActorResult<i32>;
67
68 fn get_active_demos(&self) -> SubtrActorResult<Vec<DemolishAttribute>>;
69 fn demolishes(&self) -> &[DemolishInfo];
70 fn boost_pad_events(&self) -> &[BoostPadEvent];
71 fn touch_events(&self) -> &[TouchEvent];
72 fn dodge_refreshed_events(&self) -> &[DodgeRefreshedEvent];
73 fn player_stat_events(&self) -> &[PlayerStatEvent];
74 fn goal_events(&self) -> &[GoalEvent];
75 fn current_frame_active_demo_events(&self) -> &[DemoEventSample] {
76 &[]
77 }
78 fn current_frame_demolish_events(&self) -> &[DemolishInfo] {
79 &[]
80 }
81 fn current_frame_boost_pad_events(&self) -> &[BoostPadEvent];
82 fn current_frame_touch_events(&self) -> &[TouchEvent];
83 fn current_frame_dodge_refreshed_events(&self) -> &[DodgeRefreshedEvent];
84 fn current_frame_player_stat_events(&self) -> &[PlayerStatEvent];
85 fn current_frame_goal_events(&self) -> &[GoalEvent];
86}
87
88impl ProcessorView for ReplayProcessor<'_> {
89 fn get_replay_meta(&self) -> SubtrActorResult<ReplayMeta> {
90 ReplayProcessor::get_replay_meta(self)
91 }
92
93 fn player_count(&self) -> usize {
94 ReplayProcessor::player_count(self)
95 }
96
97 fn iter_player_ids_in_order(&self) -> Box<dyn Iterator<Item = &PlayerId> + '_> {
98 Box::new(ReplayProcessor::iter_player_ids_in_order(self))
99 }
100
101 fn current_in_game_team_player_counts(&self) -> [usize; 2] {
102 ReplayProcessor::current_in_game_team_player_counts(self)
103 }
104
105 fn get_seconds_remaining(&self) -> SubtrActorResult<i32> {
106 ReplayProcessor::get_seconds_remaining(self)
107 }
108
109 fn get_replicated_state_name(&self) -> SubtrActorResult<i32> {
110 ReplayProcessor::get_replicated_state_name(self)
111 }
112
113 fn get_replicated_game_state_time_remaining(&self) -> SubtrActorResult<i32> {
114 ReplayProcessor::get_replicated_game_state_time_remaining(self)
115 }
116
117 fn get_ball_has_been_hit(&self) -> SubtrActorResult<bool> {
118 ReplayProcessor::get_ball_has_been_hit(self)
119 }
120
121 fn get_ignore_ball_syncing(&self) -> SubtrActorResult<bool> {
122 ReplayProcessor::get_ignore_ball_syncing(self)
123 }
124
125 fn get_team_scores(&self) -> SubtrActorResult<(i32, i32)> {
126 ReplayProcessor::get_team_scores(self)
127 }
128
129 fn get_ball_hit_team_num(&self) -> SubtrActorResult<u8> {
130 ReplayProcessor::get_ball_hit_team_num(self)
131 }
132
133 fn get_scored_on_team_num(&self) -> SubtrActorResult<u8> {
134 ReplayProcessor::get_scored_on_team_num(self)
135 }
136
137 fn get_normalized_ball_rigid_body(&self) -> SubtrActorResult<boxcars::RigidBody> {
138 ReplayProcessor::get_normalized_ball_rigid_body(self)
139 }
140
141 fn get_velocity_applied_ball_rigid_body(
142 &self,
143 target_time: f32,
144 ) -> SubtrActorResult<boxcars::RigidBody> {
145 ReplayProcessor::get_velocity_applied_ball_rigid_body(self, target_time)
146 }
147
148 fn get_interpolated_ball_rigid_body(
149 &self,
150 target_time: f32,
151 close_enough_to_frame_time: f32,
152 ) -> SubtrActorResult<boxcars::RigidBody> {
153 ReplayProcessor::get_interpolated_ball_rigid_body(
154 self,
155 target_time,
156 close_enough_to_frame_time,
157 )
158 }
159
160 fn get_normalized_player_rigid_body(
161 &self,
162 player_id: &PlayerId,
163 ) -> SubtrActorResult<boxcars::RigidBody> {
164 ReplayProcessor::get_normalized_player_rigid_body(self, player_id)
165 }
166
167 fn get_velocity_applied_player_rigid_body(
168 &self,
169 player_id: &PlayerId,
170 target_time: f32,
171 ) -> SubtrActorResult<boxcars::RigidBody> {
172 ReplayProcessor::get_velocity_applied_player_rigid_body(self, player_id, target_time)
173 }
174
175 fn get_interpolated_player_rigid_body(
176 &self,
177 player_id: &PlayerId,
178 target_time: f32,
179 close_enough_to_frame_time: f32,
180 ) -> SubtrActorResult<boxcars::RigidBody> {
181 ReplayProcessor::get_interpolated_player_rigid_body(
182 self,
183 player_id,
184 target_time,
185 close_enough_to_frame_time,
186 )
187 }
188
189 fn get_player_name(&self, player_id: &PlayerId) -> SubtrActorResult<String> {
190 ReplayProcessor::get_player_name(self, player_id)
191 }
192
193 fn get_player_team_key(&self, player_id: &PlayerId) -> SubtrActorResult<String> {
194 ReplayProcessor::get_player_team_key(self, player_id)
195 }
196
197 fn get_player_is_team_0(&self, player_id: &PlayerId) -> SubtrActorResult<bool> {
198 ReplayProcessor::get_player_is_team_0(self, player_id)
199 }
200
201 fn get_player_id_from_car_id(&self, actor_id: &boxcars::ActorId) -> SubtrActorResult<PlayerId> {
202 ReplayProcessor::get_player_id_from_car_id(self, actor_id)
203 }
204
205 fn get_player_boost_level(&self, player_id: &PlayerId) -> SubtrActorResult<f32> {
206 ReplayProcessor::get_player_boost_level(self, player_id)
207 }
208
209 fn get_player_last_boost_level(&self, player_id: &PlayerId) -> SubtrActorResult<f32> {
210 ReplayProcessor::get_player_last_boost_level(self, player_id)
211 }
212
213 fn get_player_boost_percentage(&self, player_id: &PlayerId) -> SubtrActorResult<f32> {
214 ReplayProcessor::get_player_boost_percentage(self, player_id)
215 }
216
217 fn get_boost_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8> {
218 ReplayProcessor::get_boost_active(self, player_id)
219 }
220
221 fn get_jump_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8> {
222 ReplayProcessor::get_jump_active(self, player_id)
223 }
224
225 fn get_double_jump_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8> {
226 ReplayProcessor::get_double_jump_active(self, player_id)
227 }
228
229 fn get_dodge_active(&self, player_id: &PlayerId) -> SubtrActorResult<u8> {
230 ReplayProcessor::get_dodge_active(self, player_id)
231 }
232
233 fn get_powerslide_active(&self, player_id: &PlayerId) -> SubtrActorResult<bool> {
234 ReplayProcessor::get_powerslide_active(self, player_id)
235 }
236
237 fn get_player_match_assists(&self, player_id: &PlayerId) -> SubtrActorResult<i32> {
238 ReplayProcessor::get_player_match_assists(self, player_id)
239 }
240
241 fn get_player_match_goals(&self, player_id: &PlayerId) -> SubtrActorResult<i32> {
242 ReplayProcessor::get_player_match_goals(self, player_id)
243 }
244
245 fn get_player_match_saves(&self, player_id: &PlayerId) -> SubtrActorResult<i32> {
246 ReplayProcessor::get_player_match_saves(self, player_id)
247 }
248
249 fn get_player_match_score(&self, player_id: &PlayerId) -> SubtrActorResult<i32> {
250 ReplayProcessor::get_player_match_score(self, player_id)
251 }
252
253 fn get_player_match_shots(&self, player_id: &PlayerId) -> SubtrActorResult<i32> {
254 ReplayProcessor::get_player_match_shots(self, player_id)
255 }
256
257 fn get_active_demos(&self) -> SubtrActorResult<Vec<DemolishAttribute>> {
258 ReplayProcessor::get_active_demos(self).map(Iterator::collect)
259 }
260
261 fn demolishes(&self) -> &[DemolishInfo] {
262 &self.demolishes
263 }
264
265 fn boost_pad_events(&self) -> &[BoostPadEvent] {
266 &self.boost_pad_events
267 }
268
269 fn touch_events(&self) -> &[TouchEvent] {
270 &self.touch_events
271 }
272
273 fn dodge_refreshed_events(&self) -> &[DodgeRefreshedEvent] {
274 &self.dodge_refreshed_events
275 }
276
277 fn player_stat_events(&self) -> &[PlayerStatEvent] {
278 &self.player_stat_events
279 }
280
281 fn goal_events(&self) -> &[GoalEvent] {
282 &self.goal_events
283 }
284
285 fn current_frame_boost_pad_events(&self) -> &[BoostPadEvent] {
286 ReplayProcessor::current_frame_boost_pad_events(self)
287 }
288
289 fn current_frame_touch_events(&self) -> &[TouchEvent] {
290 ReplayProcessor::current_frame_touch_events(self)
291 }
292
293 fn current_frame_dodge_refreshed_events(&self) -> &[DodgeRefreshedEvent] {
294 ReplayProcessor::current_frame_dodge_refreshed_events(self)
295 }
296
297 fn current_frame_player_stat_events(&self) -> &[PlayerStatEvent] {
298 ReplayProcessor::current_frame_player_stat_events(self)
299 }
300
301 fn current_frame_goal_events(&self) -> &[GoalEvent] {
302 ReplayProcessor::current_frame_goal_events(self)
303 }
304}