SuperMarioOdysseyOnline/include/packets/PlayerInfPacket.h
Nick Renieris 9227e37623 packets: Fix struct packing related bugs
- sizeof(bool) is implementation defined. The server assumes it's 4 but for me it was 1 (tested with Release too) which caused some bugs
- Structs aren't guaranteed to be packed. The compiler is free to change the layout, which we wouldn't want to for the Packet structs that we deserialize on the server.
2022-06-23 20:56:05 -04:00

34 lines
No EOL
988 B
C

#pragma once
#include "Packet.h"
#include "al/util.hpp"
#include "algorithms/PlayerAnims.h"
struct PACKED PlayerInf : Packet {
PlayerInf() : Packet() {mType = PacketType::PLAYERINF; mPacketSize = sizeof(PlayerInf) - sizeof(Packet);};
sead::Vector3f playerPos;
sead::Quatf playerRot;
float animBlendWeights[6];
PlayerAnims::Type actName;
PlayerAnims::Type subActName;
bool operator==(const PlayerInf &rhs) const {
bool isWeightsEqual = true;
for (size_t i = 0; i < 6; i++)
{
if(animBlendWeights[i] != rhs.animBlendWeights[i]) {
isWeightsEqual = false;
break;
}
}
return (
playerPos == rhs.playerPos &&
playerRot == rhs.playerRot &&
isWeightsEqual &&
actName == rhs.actName &&
subActName == rhs.subActName
);
}
bool operator!=(const PlayerInf& rhs) const { return !operator==(rhs); }
};