mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-05-06 07:24:34 +00:00
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
#include "Project/Action/ActionFlagCtrl.h"
|
|
|
|
#include "Library/Base/StringUtil.h"
|
|
#include "Library/LiveActor/ActorResourceFunction.h"
|
|
#include "Library/LiveActor/LiveActor.h"
|
|
|
|
namespace al {
|
|
ActionFlagCtrl::ActionFlagCtrl(LiveActor* actor, const char* name)
|
|
: mParentActor(actor), mName(createStringIfInStack(name)) {}
|
|
|
|
ActionFlagCtrl* ActionFlagCtrl::tryCreate(LiveActor* actor, const char* name) {
|
|
if (!isExistModelResource(actor))
|
|
return nullptr;
|
|
|
|
sead::FixedSafeString<128> initFileName;
|
|
if (!tryGetActorInitFileName(&initFileName, actor, "ActionFlagCtrl", name))
|
|
createFileNameBySuffix(&initFileName, "ActionFlagCtrl", name);
|
|
|
|
if (!isExistModelResourceYaml(actor, initFileName.cstr(), nullptr))
|
|
return nullptr;
|
|
|
|
return new ActionFlagCtrl(actor, name);
|
|
}
|
|
|
|
void ActionFlagCtrl::start(const char* name) {
|
|
mLastFlag = findFlagInfo(name);
|
|
mIsBool = false;
|
|
if (!mLastFlag)
|
|
return;
|
|
|
|
startCtrlFlag();
|
|
startCtrlSensor();
|
|
}
|
|
|
|
ActionFlagCtrlInfo* ActionFlagCtrl::findFlagInfo(const char* name) const {
|
|
for (s32 i = 0; i < mInfoCount; i++) {
|
|
ActionFlagCtrlInfo* flagInfo = mInfos[i];
|
|
if (isEqualStringCase(flagInfo->name, name))
|
|
return flagInfo;
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
void ActionFlagCtrl::update(f32 frame, f32 frameRate, f32 frameMax, bool isStop) {
|
|
if (!mLastFlag || !mIsBool)
|
|
return;
|
|
if (!mHitSensorKeeper)
|
|
return;
|
|
|
|
updateCtrlSensor(frame, frameRate, frameMax, isStop);
|
|
}
|
|
} // namespace al
|