1#include "Amiibo/HelpAmiiboNavigateCoinCollect.h"
2
3#include "Library/LiveActor/ActorFlagFunction.h"
4#include "Library/LiveActor/ActorPoseUtil.h"
5#include "Library/Nfp/NfpFunction.h"
6#include "Library/Scene/SceneObjUtil.h"
7#include "Library/Se/SeFunction.h"
8
9#include "Amiibo/HelpAmiiboDirector.h"
10#include "Item/CoinCollect.h"
11#include "Item/CoinCollectHolder.h"
12#include "ModeBalloon/TimeBalloonHintArrow.h"
13
14HelpAmiiboNavigateCoinCollect::HelpAmiiboNavigateCoinCollect(HelpAmiiboDirector* director,
15 al::LiveActor* actor)
16 : HelpAmiiboExecutor(director, actor, "コレクトコイン誘導お助け") {}
17
18void HelpAmiiboNavigateCoinCollect::initAfterPlacement(const al::ActorInitInfo& initInfo) {
19 HelpAmiiboExecutor::initAfterPlacement(initInfo);
20 mTimeBalloonHintArrow = new TimeBalloonHintArrow();
21 mTimeBalloonHintArrow->init(initInfo);
22 mTimeBalloonHintArrow->makeActorDead();
23}
24
25bool HelpAmiiboNavigateCoinCollect::isTriggerTouch(const al::NfpInfo& nfpInfo) const {
26 return al::isCharacterIdBaseKinopio(nfpInfo);
27}
28
29void HelpAmiiboNavigateCoinCollect::activate() {
30 HelpAmiiboExecutor::activate();
31 CoinCollect* coinCollect = al::getSceneObj<CoinCollectHolder>(user: getActor())
32 ->tryFindAliveCoinCollect(sead::Vector3f::zero, true);
33
34 if (coinCollect == nullptr) {
35 al::startSe(getDirector(), "AmiiboKoopa");
36 return;
37 }
38
39 al::startSe(getDirector(), "AmiiboMario");
40 mHintedCoinCollect = coinCollect;
41 mTimeBalloonHintArrow->updateRotate(al::getTrans(actor: coinCollect));
42 mTimeBalloonHintArrow->appear();
43}
44
45bool HelpAmiiboNavigateCoinCollect::execute() {
46 if (mHintedCoinCollect == nullptr)
47 return true;
48
49 if (al::isDead(actor: mHintedCoinCollect)) {
50 mTimeBalloonHintArrow->kill();
51 return true;
52 }
53
54 mTimeBalloonHintArrow->updateRotate(al::getTrans(actor: mHintedCoinCollect));
55 return false;
56}
57