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