33use serde:: Deserialize ;
44use serde_json:: json;
55
6- use spring_native:: prelude:: NativeInterfaceRef ;
7-
86use crate :: sbc:: sbc:: SBC ;
9- use crate :: sbc:: states:: trace:: { flip_screen_y , trace_editor_ground , trace_ground } ;
7+ use crate :: sbc:: states:: trace:: { trace_editor_ground_from_control , trace_ground_from_control } ;
108
119use super :: super :: { ControlError , Handled , Reply } ;
1210
@@ -189,8 +187,7 @@ pub(crate) fn zoom(sbc: &mut SBC, params: Zoom) -> Handled {
189187 "camera.zoom screen coordinates must be finite" ,
190188 ) ) ;
191189 }
192- trace_ground ( interface, screen[ 0 ] , engine_screen_y ( interface, screen[ 1 ] ) )
193- . map ( |hit| [ hit. x , hit. y , hit. z ] )
190+ trace_ground_from_control ( interface, screen[ 0 ] , screen[ 1 ] ) . map ( |hit| [ hit. x , hit. y , hit. z ] )
194191 } else {
195192 None
196193 } ;
@@ -220,9 +217,8 @@ pub(crate) fn zoom(sbc: &mut SBC, params: Zoom) -> Handled {
220217 // point beneath the cursor. Re-trace after scaling and apply the
221218 // horizontal ground delta in the controller, where the engine owns the
222219 // camera projection and terrain height.
223- if let Some ( current) =
224- trace_ground ( interface, screen[ 0 ] , engine_screen_y ( interface, screen[ 1 ] ) )
225- . map ( |hit| [ hit. x , hit. y , hit. z ] )
220+ if let Some ( current) = trace_ground_from_control ( interface, screen[ 0 ] , screen[ 1 ] )
221+ . map ( |hit| [ hit. x , hit. y , hit. z ] )
226222 {
227223 let mut state = camera
228224 . get_camera_state ( false )
@@ -247,20 +243,11 @@ pub(crate) fn trace(sbc: &mut SBC, params: Trace) -> Handled {
247243 ) ) ;
248244 }
249245 let interface = sbc. interface ( ) ;
250- let trace = trace_editor_ground ( interface, x, engine_screen_y ( interface , y ) )
246+ let trace = trace_editor_ground_from_control ( interface, x, y )
251247 . map_err ( |err| ControlError :: failed ( format ! ( "trace_screen_ray: {err:?}" ) ) ) ?;
252248 Ok ( Reply :: now ( json ! ( {
253249 "hit_type" : trace. hit_type,
254250 "hit_id" : trace. hit_id,
255251 "position" : [ trace. position. x, trace. position. y, trace. position. z] ,
256252 } ) ) )
257253}
258-
259- /// Control clients address the window the way a screenshot does: top-origin.
260- /// The engine's screen space is bottom-origin, so convert on the way in.
261- fn engine_screen_y ( interface : & NativeInterfaceRef , y : f32 ) -> f32 {
262- match interface. display ( ) . get_view_geometry ( ) {
263- Ok ( geometry) => flip_screen_y ( geometry. viewSizeY as f32 , y) ,
264- Err ( _) => y,
265- }
266- }
0 commit comments