(ctx: &mut ScriptContext<'_, API>, dir: isize)
| 1089 | } |
| 1090 | |
| 1091 | pub fn apply_spawn_position(data: &mut SceneNodeData, state: &EditorState) { |
| 1092 | if data.node_type.is_a(perro_scene::NodeType::Node2D) { |
| 1093 | set_scene_vec2(data, "position", Vector2::new(state.cam2_x, state.cam2_y)); |
| 1094 | } else if data.node_type.is_a(perro_scene::NodeType::Node3D) { |
| 1095 | set_scene_vec3(data, "position", viewport_spawn_3d(state)); |
| 1096 | } |
| 1097 | } |
| 1098 | |
| 1099 | pub fn viewport_spawn_3d(state: &EditorState) -> Vector3 { |
| 1100 | let origin = Vector3::new(state.cam_x, state.cam_y, state.cam_z); |
| 1101 | let rotation = Quaternion::from_euler_xyz(state.cam_pitch, state.cam_yaw, 0.0); |
| 1102 | let forward = rotation |
| 1103 | .rotate_vector3(Vector3::new(0.0, 0.0, -1.0)) |
| 1104 | .normalized(); |
| 1105 | let mut point = origin + forward * 6.0; |
| 1106 | if forward.y.abs() > 0.0001 { |
| 1107 | let t = -origin.y / forward.y; |
| 1108 | if t.is_finite() && t > 0.0 && t < 1000.0 { |
| 1109 | point = origin + forward * t; |
no test coverage detected