1#include "Game/NPC/TalkMessageCtrl.hpp"
2#include "Game/NPC/TalkNodeCtrl.hpp"
3#include "Game/LiveActor/LiveActor.hpp"
4#include "Game/LiveActor/ActorCameraInfo.hpp"
8void TalkMessageCtrl::createMessage(
const JMapInfoIter &rIter,
const char *pName) {
10 mNodeCtrl->createFlowNode(
this, rIter, pName, &mCameraInfo);
12 if (mNodeCtrl->mCurrentNode !=
nullptr) {
13 mAlreadyDoneFlags = MR::setupAlreadyDoneFlag(((
MessageNode*)mNodeCtrl->mCurrentNode)->mMessage, rIter, &_3C);
21void TalkMessageCtrl::createMessageDirect(
const JMapInfoIter &rIter,
const char *pName) {
23 mNodeCtrl->createFlowNode(
this, rIter, pName, &mCameraInfo);
30void TalkMessageCtrl::rootNodePst() {
32 if (!ctrl->isExistNextNode()) {
33 ctrl->resetFlowNode();
36 ctrl->forwardFlowNode();
39 ctrl->recordTempFlowNode();
42void TalkMessageCtrl::rootNodeSel(
bool a1) {
44 ctrl->forwardFlowNode();
47 ctrl->forwardCurrentBranchNode(
true);
50 ctrl->forwardCurrentBranchNode(
false);
53 ctrl->recordTempFlowNode();
57 mBranchFunc = rFunc.clone();
61 mEventFunc = rFunc.clone();
65 mAnimeFunc = rFunc.clone();
69 mKillFunc = rFunc.clone();
72void TalkMessageCtrl::readMessage() {
73 if (mIsOnReadNodeAuto) {
74 mNodeCtrl->readMessage();
78 MR::updateAlreadyDoneFlag(mAlreadyDoneFlags, 1);
82bool TalkMessageCtrl::isSelectYesNo()
const {
83 TalkNode* node = mNodeCtrl->getNextNodeBranch();
85 if (node ==
nullptr || node->mIndex != 0) {
89 switch (node->mNextIdx) {
99u32 TalkMessageCtrl::getMessageID()
const {
101 if (ctrl->getCurrentNodeMessage() !=
nullptr) {
102 return ctrl->getCurrentNodeMessage()->mIndex;
105 return ctrl->mCurrentNodeIdx;
120 if (pCtrl ==
nullptr) {
124 TVec3f* playerPos = MR::getPlayerPos();
125 return mHostActor->getPosPtr()->squared(*playerPos) < pCtrl->mHostActor->getPosPtr()->squared(*playerPos);
128void TalkMessageCtrl::startCamera(s32 a1) {
130 if (inf->isCameraNormal()) {
131 MR::startNPCTalkCamera(
this, mHostActor->
getBaseMtx(), 1.0f, a1);
133 else if (inf->isCameraEvent()) {
135 mCameraInfo->mCameraSetID = inf->_4;
136 MR::startMultiActorCameraNoTarget(mHostActor, mCameraInfo,
"会話", a1);
141const char* TalkMessageCtrl::getBranchID()
const {
142 TalkNode* node = mNodeCtrl->getNextNodeBranch();
144 if (node ==
nullptr || node->mIndex != 0 ) {
148 const char* result =
nullptr;
150 switch (node->mNextIdx) {
152 result =
"PenguinRace";
155 result =
"SwimmingSchool";
158 result =
"PenguinRace";
161 result =
"BombTimeAttackLv1";
164 result =
"PhantomTeresaRacer";
167 result =
"BombTimeAttackLv2";
170 result =
"TrialSurfingCoach";
173 result =
"TrialSurfingHowTo";
176 result =
"DeathPromenadeTeresaRacer";
179 result =
"RosettaFinalBattle";
182 result =
"CometTico";
185 result =
"TransformTico";
188 result =
"ChallengeSurfingCoach";
191 result =
"TicoShopExchange";
194 result =
"TicoShopWhich";
197 result =
"KinopioPurple";
200 result =
"CometTicoTell";
203 result =
"TrialTamakoroHowTo";
206 result =
"KnockOnTheDoor";
209 result =
"LedPattern";
virtual MtxPtr getBaseMtx() const
Gets the base matrix of the model used for the actor.