-
Notifications
You must be signed in to change notification settings - Fork 2
/
DialogueManager.cpp
85 lines (72 loc) · 2.3 KB
/
DialogueManager.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include "stdafx.h"
#include "DialogueManager.h"
void DialogueManager::update()
{
if (CAMERA->movelimit) {
for (auto iter = _vDialogues.begin(); iter != _vDialogues.end(); ) {
// 특정 대사의 텍스트가 전부 출력되면
if (iter->vDialogueText[iter->currentLine] == iter->str) {
// 일정 시간 대기 후
if (iter->waitTime++ >= 300) {
// 모든 대사를 한 상태라면 해당 말풍선 삭제
if (iter->vDialogueText.size() - 1 == iter->currentLine)
iter = _vDialogues.erase(iter);
// 다음 대사가 남아있다면 다음 대사 출력 준비
else {
iter->waitTime = 0;
iter->str = "";
iter->count = 0;
iter->currentLine++;
iter->currentLineTextIndex = 0;
++iter;
}
}
else
++iter;
}
// 특정 대사의 텍스트가 출력되는 도중이라면
else {
// 일정 간격마다 한글자씩 추가 출력
if (iter->count++ > TextSpeed) {
iter->count = 0;
iter->str = (iter->vDialogueText[iter->currentLine].substr(0, iter->currentLineTextIndex++));
}
++iter;
}
}
}
}
void DialogueManager::render(HDC hdc)
{
if (CAMERA->movelimit) {
for (int i = 0; i < _vDialogues.size(); i++) {
if (_vDialogues[i].rc != nullptr) {
POINT ptPos = { _vDialogues[i].rc->left + (_vDialogues[i].rc->right - _vDialogues[i].rc->left) / 2, _vDialogues[i].rc->top - 55 };
int balloonWidth = 15 * _vDialogues[i].vDialogueText[_vDialogues[i].currentLine].size();
IMAGEMANAGER->stretchRender("Balloon", hdc, CAMERA->GetRelativeX(ptPos.x - balloonWidth / 2), CAMERA->GetRelativeY(ptPos.y - 15), 0, 0, 15 * _vDialogues[i].vDialogueText[_vDialogues[i].currentLine].size(), 67, 100, CAMERA->GetZoom());
TEXTMANAGER->ShowText(hdc, true, _vDialogues[i].str, ptPos,
30, 1, RGB(255, 255, 255), true, RGB(0, 0, 0), 1);
}
}
}
}
void DialogueManager::ShowDialogue(vector<string> p_str, RECT * p_pRC, int id)
{
// 같은 ID의 대화가 추가되면 이전 대화 제거
for (auto iter = _vDialogues.begin(); iter != _vDialogues.end(); ++iter) {
if (iter->id == id) {
_vDialogues.erase(iter);
break;
}
}
tagDialogue t_dialogue;
t_dialogue.id = id;
t_dialogue.count = 0;
t_dialogue.rc = p_pRC;
t_dialogue.currentLine = 0;
t_dialogue.currentLineTextIndex = 0;
t_dialogue.str = " ";
t_dialogue.vDialogueText = p_str;
t_dialogue.waitTime = 0;
_vDialogues.push_back(t_dialogue);
}