summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2025-02-25 17:49:51 +0100
committerGitHub <noreply@github.com>2025-02-25 17:49:51 +0100
commit89277ee52ec58bf396bd4a9dfedd22699fae99d0 (patch)
treedfb41633c7f9d378dc800fa64708beb0906891aa
parent4697f0ec2f0bb8a9b2edeb17b94e8e54fd54371f (diff)
parente5b55bfc06e13191174734bf948edb18e9738964 (diff)
Merge pull request #13376 from jordan-woyak/serialized-wm-irext
WiimoteEmu: Make SerializedWiimoteState store camera points as IRExtended instead of custom layout.
-rw-r--r--Source/Core/Core/HW/WiimoteEmu/DesiredWiimoteState.cpp34
1 files 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<IRExtended>(&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<IRExtended>(&d[pos]);
+ camera_point = CameraPoint(irext.GetPosition(), irext.size);
+ pos += sizeof(irext);
}
}