1
2 #include "YesNoPrompt.h"
3
4 #include "../autogen/sprites.h"
5 #include "../graphics/Renderer.h"
6 #include "../input.h"
7 #include "../nx.h"
8 #include "../player.h"
9 #include "../sound/SoundManager.h"
10 using namespace NXE::Graphics;;
11
12 enum
13 {
14 STATE_APPEAR,
15 STATE_WAIT,
16 STATE_YES_SELECTED,
17 STATE_NO_SELECTED
18 };
19
20 #define YESNO_X (Renderer::getInstance()->screenWidth / 2) + 56
21 #define YESNO_Y (Renderer::getInstance()->screenHeight / 2) + 22
22 #define YESNO_POP_SPEED 4
23
24 /*
25 void c------------------------------() {}
26 */
27
ResetState()28 void TB_YNJPrompt::ResetState()
29 {
30 fVisible = false;
31 fAnswer = -1;
32 }
33
SetVisible(bool enable)34 void TB_YNJPrompt::SetVisible(bool enable)
35 {
36 fVisible = enable;
37
38 if (fVisible)
39 {
40 fState = STATE_APPEAR;
41 fCoords.y = YESNO_Y + (YESNO_POP_SPEED * 2);
42 fAnswer = -1;
43 NXE::Sound::SoundManager::getInstance()->playSfx(NXE::Sound::SFX::SND_MENU_PROMPT);
44 }
45 }
46
47 /*
48 void c------------------------------() {}
49 */
50
Tick()51 void TB_YNJPrompt::Tick()
52 {
53 if (!fVisible)
54 return;
55
56 switch (fState)
57 {
58 case STATE_APPEAR:
59 {
60 fCoords.y -= YESNO_POP_SPEED;
61
62 if (fCoords.y <= YESNO_Y)
63 {
64 fCoords.y = YESNO_Y;
65 fState = STATE_WAIT;
66 fTimer = 15;
67 }
68 else
69 break;
70 }
71 case STATE_WAIT:
72 {
73 if (fTimer)
74 {
75 fTimer--;
76 break;
77 }
78
79 fState = STATE_YES_SELECTED;
80 }
81 break;
82
83 case STATE_YES_SELECTED:
84 case STATE_NO_SELECTED:
85 {
86 if (justpushed(LEFTKEY) || justpushed(RIGHTKEY))
87 {
88 NXE::Sound::SoundManager::getInstance()->playSfx(NXE::Sound::SFX::SND_MENU_MOVE);
89
90 fState = (fState == STATE_YES_SELECTED) ? STATE_NO_SELECTED : STATE_YES_SELECTED;
91 }
92
93 if (justpushed(ACCEPT_BUTTON))
94 {
95 NXE::Sound::SoundManager::getInstance()->playSfx(NXE::Sound::SFX::SND_MENU_SELECT);
96 lastinputs[ACCEPT_BUTTON] = true;
97 lastpinputs[ACCEPT_BUTTON] = true;
98
99 fAnswer = (fState == STATE_YES_SELECTED) ? YES : NO;
100 SetVisible(false);
101 }
102 if (justpushed(DECLINE_BUTTON))
103 {
104 fState = STATE_NO_SELECTED;
105 }
106 }
107 break;
108 }
109 Draw();
110 }
111
Draw()112 void TB_YNJPrompt::Draw()
113 {
114 if (!fVisible)
115 return;
116
117 Renderer::getInstance()->sprites.drawSprite(YESNO_X, fCoords.y, SPR_YESNO, 0, 0);
118
119 // draw hand selector
120 if (fState == STATE_YES_SELECTED || fState == STATE_NO_SELECTED)
121 {
122 int xoff = (fState == STATE_YES_SELECTED) ? -4 : 37;
123 Renderer::getInstance()->sprites.drawSprite(YESNO_X + xoff, fCoords.y + 12, SPR_YESNOHAND, 0, 0);
124 }
125 }
126
127 /*
128 void c------------------------------() {}
129 */
130
ResultReady()131 bool TB_YNJPrompt::ResultReady()
132 {
133 return (fAnswer != -1);
134 }
135
GetResult()136 int TB_YNJPrompt::GetResult()
137 {
138 return fAnswer;
139 }
140