Fission FSN
Loading...
Searching...
No Matches
gfCConversationGui.h
Go to the documentation of this file.
1/********************************************************************
2*
3* File: gfCConversationGui.h
4*
5* Purpose: Character dialog Gui
6*
7*********************************************************************/
8
9#ifndef gfCConversationGuihdr
10#define gfCConversationGuihdr
11
12#include <string>
13#include <vector>
14
16
17class fsINode;
18
19
21{
22 friend class fsCComponentFactory;
23
24public:
25
26 static const fsCUniqueId mTypeId;
27
29
30 static fsINode* const conversationCreate(const fsStr& pConversationKey);
31 static fsBool conversationExists(const fsStr& pConversationName);
32
33 // Genre cores register how to resolve the player's chosen character
34 // sex, used to pick M/F portrait art. Defaults to false (female) if
35 // never registered.
36 static void playerIsMaleProviderSet(fsBool (*pProvider)());
37
38 void listenersRegisterDo() override;
39 void listenersDeregisterDo() override;
40 fsBool messageProcessDo(const fsCUniqueId& pMessageType,
41 const fsIMessageDispatcher::sMessageParameters& pParam) override;
42
43protected:
44
45 void initialiseFromVariableTableDo(const fsCVariableTable& pVars) override;
46
47 void updateDo(fsS32 pDeltaMs) override;
48
49 fsBool onButtonClicked(fsCButtonComponent* pButtonComp) override;
50 static fsIComponent* create(fsCEntity* pParent);
51
53 virtual ~gfCConversationGui();
54
55private:
56
57 class fsCMonologue
58 {
59 public:
60 fsCMonologue(fsStr pText, fsITextSpriteComponent* pTextComponent, fsBool pTeleprompt, fsS32 pTextBoxWidth);
61 fsCMonologue() : mCurrentWord(0), mTextComponent(nullptr) {}
62
63 fsBool isFinished() const { return mCurrentWord >= mWords.size(); }
64 void finish();
65 void updateText(fsS32 pDeltaMs);
66
67 private:
68 void fixedLineLayoutBuild(fsS32 pTextBoxWidth);
69 void textSet(fsS32 pWordCount);
70
71 fsF32 mCurrentWord;
72 std::vector<std::string> mWords;
73 std::vector<fsS32> mLineWordCounts;
74 fsITextSpriteComponent* mTextComponent;
75 };
76
77 struct fsSConversationKeyInfo
78 {
79 fsStr mCharacterName;
80 fsS32 mCharacterID = 0;
81 fsStr mOutfitName;
82 fsStr mEmotionName;
83 fsBool mPortraitFacingSet = false;
84 fsBool mPortraitFacingRight = false;
85 };
86
87 struct fsSConversationCharacterSlot
88 {
89 fsStr mCharacterName;
90 fsBool mRightHandSide = false;
91 };
92
93
94 // scene-name-(pre/post)(characterID)(monologueID) parkOffice-prec4m1
95 // scene-name-(pre/post)-(characterName)-(outfit)-(portraitName)-(monologueID) parkOffice-pre-emily-outfit1-happyL-m1
96 struct fsCMonologueKey {
97 fsCMonologueKey(const fsStr& pKey) : mKey(pKey) {}
98 fsBool monologueKeyMatch(fsS32 pMonologueID) const;
99 fsSConversationKeyInfo infoGet(const fsStr& pConversationName) const;
100 fsStr mKey;
101 };
102
103 fsBool portraitFirstExistingFind(
104 fsStr& pPortraitPath,
105 const std::vector<fsStr>& pBasePaths,
106 fsBool pUsePlayerSex) const;
107
108 static const fsStr mPlayer1NameKey;
109 fsStr& playerNameReplace(fsStr& pDialogue);
110
111 void conversationContinue();
112 void conversationAdvance();
113
114 const fsCMonologueKey* const currentConversationMonologue() const;
115
116 fsS32 textBoxScale(const fsStr& pDialogue);
117 void mugShotUpdate(const fsCMonologueKey* const pKey);
118 void mugDirectionAlternate(const fsCMonologueKey* const pKey);
119 fsBool portraitRightHandSideGet(const fsSConversationKeyInfo& pKeyInfo);
120 fsBool portraitPathFind(fsStr& pPortraitPath, const fsSConversationKeyInfo& pKeyInfo, fsBool& pRightHandSide);
121 fsCEntity* mugShotEntityGet(fsBool pRightHandSide, fsBool& pUsesSharedMugShot) const;
122 void mugShotsHide() const;
123 void sharedMugShotPositionSet(fsCEntity* pMugShotEntity, fsBool pRightHandSide);
124 fsBool characterSlotRightHandSideGet(const fsStr& pCharacterName, fsBool pPreferredRightHandSide);
125 fsBool portraitResourceFind(fsStr& pPortraitPath, const fsStr& pBasePath) const;
126 fsBool portraitResourceFind(fsStr& pPortraitPath, const fsStr& pBasePath, fsBool pUsePlayerSex) const;
127
129
130
131 std::vector<fsCMonologueKey> mConversationKeys;
132 std::vector<fsSConversationCharacterSlot> mConversationCharacterSlots;
133
134 fsCMonologue mCurrentMonologue;
135
136 fsStr mConversationName;
137 fsS32 mMonologueID;
138 fsStr mLastUsedCharacterName;
139 fsBool mRightHandSide;
140 fsS32 mMugShotSlotX;
141
142 fsS32 mSmallTrigger;
143
144 fsS32 mSmallPosY;
145 fsS32 mSmallWidth;
146 fsS32 mSmallHeight;
147 fsStr mSmallBg;
148
149 fsS32 mNormalPosY;
150 fsS32 mNormalWidth;
151 fsS32 mNormalHeight;
152 fsStr mNormalBg;
153};
154
155#endif
Definition fsCButtonComponent.h:26
Definition fsCEntity.h:39
Definition fsCUniqueId.h:21
Definition fsCVariableTable.h:27
fsIComponent(fsCEntity *pParent)
Definition fsIComponent.cpp:86
fsIMessageListenerGuiComponent(fsCEntity *pParent, fsS32 pPriority)
Definition fsIMessageListenerGuiComponent.cpp:4
Definition fsINode.h:30
Definition fsITextSpriteComponent.h:22
Definition fsStr.h:23
fsBool messageProcessDo(const fsCUniqueId &pMessageType, const fsIMessageDispatcher::sMessageParameters &pParam) override
Definition gfCConversationGui.cpp:404
static fsIComponent * create(fsCEntity *pParent)
Definition gfCConversationGui.cpp:928
void initialiseFromVariableTableDo(const fsCVariableTable &pVars) override
Definition gfCConversationGui.cpp:907
static fsINode *const conversationCreate(const fsStr &pConversationKey)
Definition gfCConversationGui.cpp:423
friend class fsCComponentFactory
Definition gfCConversationGui.h:22
void updateDo(fsS32 pDeltaMs) override
Definition gfCConversationGui.cpp:386
fsBool onButtonClicked(fsCButtonComponent *pButtonComp) override
Definition gfCConversationGui.cpp:444
void listenersRegisterDo() override
Definition gfCConversationGui.cpp:392
static fsBool conversationExists(const fsStr &pConversationName)
Definition gfCConversationGui.cpp:457
void listenersDeregisterDo() override
Definition gfCConversationGui.cpp:398
static const fsCUniqueId mTypeId
Definition gfCConversationGui.h:26
gfCConversationGui(fsCEntity *pParent)
Definition gfCConversationGui.cpp:933
static void playerIsMaleProviderSet(fsBool(*pProvider)())
Definition gfCConversationGui.cpp:151
virtual ~gfCConversationGui()
Definition gfCConversationGui.cpp:952
static const fsCUniqueId mConversationCompleteMsg
Definition gfCConversationGui.h:28
bool fsBool
Definition fsBaseTypes.h:26
int fsS32
Definition fsBaseTypes.h:20
float fsF32
Definition fsBaseTypes.h:28
Definition fsIMessageDispatcher.h:32