From e5b55bfc06e13191174734bf948edb18e9738964 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Mon, 24 Feb 2025 16:10:45 -0600 Subject: [PATCH] WiimoteEmu: Make SerializedWiimoteState store camera points as IRExtended instead of custom layout. --- .../HW/WiimoteEmu/DesiredWiimoteState.cpp | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/Source/Core/Core/HW/WiimoteEmu/DesiredWiimoteState.cpp b/Source/Core/Core/HW/WiimoteEmu/DesiredWiimoteState.cpp index 0293ae41e4..b59d04606f 100644 --- a/Source/Core/Core/HW/WiimoteEmu/DesiredWiimoteState.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/DesiredWiimoteState.cpp @@ -83,14 +83,13 @@ SerializedWiimoteState SerializeDesiredState(const DesiredWiimoteState& state) if (has_camera) { - for (size_t i = 0; i < state.camera_points.size(); ++i) + for (auto& camera_point : state.camera_points) { - const u16 camera_x = state.camera_points[i].position.x; // 10 bits - const u16 camera_y = state.camera_points[i].position.y; // 10 bits - const u8 camera_size = state.camera_points[i].size; // 4 bits - s.data[s.length++] = u8((camera_x & 0b11) | ((camera_y & 0b11) << 2) | (camera_size << 4)); - s.data[s.length++] = u8(camera_x >> 2); - s.data[s.length++] = u8(camera_y >> 2); + IRExtended irext; + irext.SetPosition(camera_point.position); + irext.size = camera_point.size; + Common::BitCastPtr(&s.data[s.length]) = irext; + s.length += sizeof(irext); } } @@ -261,24 +260,11 @@ bool DeserializeDesiredState(DesiredWiimoteState* state, const SerializedWiimote if (has_camera) { - for (size_t i = 0; i < state->camera_points.size(); ++i) + for (auto& camera_point : state->camera_points) { - const u8 camera_misc = d[pos]; - const u8 camera_x_high = d[pos + 1]; - const u8 camera_y_high = d[pos + 2]; - const u16 camera_x = (camera_x_high << 2) | (camera_misc & 0b11); - const u16 camera_y = (camera_y_high << 2) | ((camera_misc >> 2) & 0b11); - const u8 camera_size = camera_misc >> 4; - if (camera_y < CameraLogic::CAMERA_RES_Y) - { - state->camera_points[i] = CameraPoint({camera_x, camera_y}, camera_size); - } - else - { - // indicates an invalid camera point - state->camera_points[i] = CameraPoint(); - } - pos += 3; + const IRExtended irext = Common::BitCastPtr(&d[pos]); + camera_point = CameraPoint(irext.GetPosition(), irext.size); + pos += sizeof(irext); } }