OdysseyDecomp/lib/al/Library/Camera/CameraTicketId.cpp
2024-09-02 21:00:46 +02:00

65 lines
1.8 KiB
C++

#include "Library/Camera/CameraTicketId.h"
#include "Library/Base/StringUtil.h"
#include "Library/Placement/PlacementId.h"
#include "Library/Yaml/ByamlUtil.h"
namespace al {
CameraTicketId::CameraTicketId(const PlacementId* placementId, const char* suffix)
: mPlacementId(placementId), mSuffix(suffix) {}
bool CameraTicketId::isEqual(const CameraTicketId& other) const {
if (!mPlacementId && other.mPlacementId)
return false;
if (mPlacementId && !other.mPlacementId)
return false;
if (!mPlacementId && !other.mPlacementId)
return isEqualString(mSuffix, other.mSuffix);
if (!mPlacementId->isEqual(*other.mPlacementId))
return false;
bool noneSuffix = !mSuffix && !other.mSuffix;
if (mSuffix && other.mSuffix)
return isEqualString(mSuffix, other.mSuffix);
return noneSuffix;
}
bool CameraTicketId::isEqual(const CameraTicketId& ticket1, const CameraTicketId& ticket2) {
return ticket1.isEqual(ticket2);
}
// NON_MATCHING: https://decomp.me/scratch/4vdbx
bool CameraTicketId::isEqual(const ByamlIter& iter) const {
const char* id = getObjId();
const char* otherId = tryGetByamlKeyStringOrNULL(iter, "ObjId");
if (id && otherId) {
if (!isEqualString(id, otherId))
return false;
} else if (id || otherId)
return false;
const char* suffix = mSuffix;
const char* otherSuffix = tryGetByamlKeyStringOrNULL(iter, "Suffix");
if (suffix && otherSuffix) {
if (!isEqualString(suffix, otherSuffix))
return false;
} else
return !suffix && !otherSuffix;
return true;
}
const char* CameraTicketId::tryGetObjId() const {
if (!mPlacementId)
return nullptr;
return mPlacementId->getId();
}
const char* CameraTicketId::getObjId() const {
return tryGetObjId();
}
} // namespace al