diff options
| author | Léo Lam <leo@leolam.fr> | 2020-12-02 18:50:27 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2020-12-02 19:23:05 +0100 |
| commit | fc55c87f12f3c9c81974be3a2cdc460f3fe99fba (patch) | |
| tree | 587f4d994e82d956bce89e6ab71dbfe3c24cbb21 /src/KingSystem/ActorSystem/actActorUtil.cpp | |
| parent | 3559c31bc9ab193b7bc601d66762807c6ae460a3 (diff) | |
ksys/act: Implement ActorUtil "has tag" functions
Diffstat (limited to 'src/KingSystem/ActorSystem/actActorUtil.cpp')
| -rw-r--r-- | src/KingSystem/ActorSystem/actActorUtil.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/KingSystem/ActorSystem/actActorUtil.cpp b/src/KingSystem/ActorSystem/actActorUtil.cpp index 69f6f51f..98937a2d 100644 --- a/src/KingSystem/ActorSystem/actActorUtil.cpp +++ b/src/KingSystem/ActorSystem/actActorUtil.cpp @@ -1,20 +1,83 @@ #include "KingSystem/ActorSystem/actActorUtil.h" #include "KingSystem/ActorSystem/actActor.h" +#include "KingSystem/ActorSystem/actActorConstDataAccess.h" #include "KingSystem/ActorSystem/actActorParam.h" +#include "KingSystem/ActorSystem/actBaseProcLink.h" #include "KingSystem/ActorSystem/actInfoData.h" #include "KingSystem/Resource/resResourceActorLink.h" namespace ksys::act { +static ActorConstDataAccess getAccessor(BaseProcLink* link) { + ActorConstDataAccess accessor; + acquireActor(link, &accessor); + return accessor; +} + bool hasTag(Actor* actor, const sead::SafeString& tag) { if (!actor) return false; return actor->getParam()->getRes().mActorLink->hasTag(tag.cstr()); } +bool hasTag(BaseProcLink* link, const sead::SafeString& tag) { + return hasTag(getAccessor(link), tag); +} + +bool hasTag(const ActorConstDataAccess& accessor, const sead::SafeString& tag) { + return accessor.hasTag(tag.cstr()); +} + bool hasTag(const sead::SafeString& actor, const sead::SafeString& tag) { auto* data = InfoData::instance(); return data && data->hasTag(actor.cstr(), tag.cstr()); } +bool hasTag(Actor* actor, u32 tag) { + return actor && actor->getParam()->getRes().mActorLink->hasTag(tag); +} + +bool hasTag(BaseProcLink* link, u32 tag) { + return hasTag(getAccessor(link), tag); +} + +bool hasTag(const ActorConstDataAccess& accessor, u32 tag) { + return accessor.hasTag(tag); +} + +bool hasTag(const sead::SafeString& actor, u32 tag) { + auto* data = InfoData::instance(); + return data && data->hasTag(actor.cstr(), tag); +} + +bool hasOneTagAtLeast(Actor* actor, const sead::SafeString& tags) { + sead::FixedSafeString<32> tag; + for (auto it = tags.tokenBegin(","); tags.tokenEnd(",") != it; ++it) { + it.get(&tag); + if (hasTag(actor, tag)) + return true; + } + return false; +} + +bool hasOneTagAtLeast(BaseProcLink* link, const sead::SafeString& tags) { + sead::FixedSafeString<32> tag; + for (auto it = tags.tokenBegin(","); tags.tokenEnd(",") != it; ++it) { + it.get(&tag); + if (hasTag(link, tag)) + return true; + } + return false; +} + +bool act::hasOneTagAtLeast(const ActorConstDataAccess& accessor, const sead::SafeString& tags) { + sead::FixedSafeString<32> tag; + for (auto it = tags.tokenBegin(","); tags.tokenEnd(",") != it; ++it) { + it.get(&tag); + if (hasTag(accessor, tag)) + return true; + } + return false; +} + } // namespace ksys::act |
