00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "gui.h"
00012
00013 static int scrollDelay = 0;
00014
00015
00016
00017
00018 GuiTrigger::GuiTrigger()
00019 {
00020 chan = -1;
00021 memset(&wpaddata, 0, sizeof(WPADData));
00022 memset(&pad, 0, sizeof(PADData));
00023 wpad = &wpaddata;
00024 }
00025
00026
00027
00028
00029 GuiTrigger::~GuiTrigger()
00030 {
00031 }
00032
00033
00034
00035
00036
00037
00038 void GuiTrigger::SetSimpleTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
00039 {
00040 type = TRIGGER_SIMPLE;
00041 chan = ch;
00042 wpaddata.btns_d = wiibtns;
00043 pad.btns_d = gcbtns;
00044 }
00045
00046
00047
00048
00049
00050
00051 void GuiTrigger::SetHeldTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
00052 {
00053 type = TRIGGER_HELD;
00054 chan = ch;
00055 wpaddata.btns_h = wiibtns;
00056 pad.btns_h = gcbtns;
00057 }
00058
00059
00060
00061
00062
00063 void GuiTrigger::SetButtonOnlyTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
00064 {
00065 type = TRIGGER_BUTTON_ONLY;
00066 chan = ch;
00067 wpaddata.btns_d = wiibtns;
00068 pad.btns_d = gcbtns;
00069 }
00070
00071
00072
00073
00074
00075
00076 void GuiTrigger::SetButtonOnlyInFocusTrigger(s32 ch, u32 wiibtns, u16 gcbtns)
00077 {
00078 type = TRIGGER_BUTTON_ONLY_IN_FOCUS;
00079 chan = ch;
00080 wpaddata.btns_d = wiibtns;
00081 pad.btns_d = gcbtns;
00082 }
00083
00084
00085
00086
00087
00088
00089
00090 s8 GuiTrigger::WPAD_Stick(u8 right, int axis)
00091 {
00092 float mag = 0.0;
00093 float ang = 0.0;
00094
00095 switch (wpad->exp.type)
00096 {
00097 case WPAD_EXP_NUNCHUK:
00098 case WPAD_EXP_GUITARHERO3:
00099 if (right == 0)
00100 {
00101 mag = wpad->exp.nunchuk.js.mag;
00102 ang = wpad->exp.nunchuk.js.ang;
00103 }
00104 break;
00105
00106 case WPAD_EXP_CLASSIC:
00107 if (right == 0)
00108 {
00109 mag = wpad->exp.classic.ljs.mag;
00110 ang = wpad->exp.classic.ljs.ang;
00111 }
00112 else
00113 {
00114 mag = wpad->exp.classic.rjs.mag;
00115 ang = wpad->exp.classic.rjs.ang;
00116 }
00117 break;
00118
00119 default:
00120 break;
00121 }
00122
00123
00124 if (mag > 1.0) mag = 1.0;
00125 else if (mag < -1.0) mag = -1.0;
00126 double val;
00127
00128 if(axis == 0)
00129 val = mag * sin((PI * ang)/180.0f);
00130 else
00131 val = mag * cos((PI * ang)/180.0f);
00132
00133 return (s8)(val * 128.0f);
00134 }
00135
00136 bool GuiTrigger::Left()
00137 {
00138 u32 wiibtn = WPAD_BUTTON_LEFT;
00139
00140 if((wpad->btns_d | wpad->btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_LEFT)
00141 || (pad.btns_d | pad.btns_h) & PAD_BUTTON_LEFT
00142 || pad.stickX < -PADCAL
00143 || WPAD_Stick(0,0) < -PADCAL)
00144 {
00145 if(wpad->btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_LEFT)
00146 || pad.btns_d & PAD_BUTTON_LEFT)
00147 {
00148 scrollDelay = SCROLL_INITIAL_DELAY;
00149 return true;
00150 }
00151 else if(scrollDelay == 0)
00152 {
00153 scrollDelay = SCROLL_LOOP_DELAY;
00154 return true;
00155 }
00156 else
00157 {
00158 if(scrollDelay > 0)
00159 scrollDelay--;
00160 }
00161 }
00162 return false;
00163 }
00164
00165 bool GuiTrigger::Right()
00166 {
00167 u32 wiibtn = WPAD_BUTTON_RIGHT;
00168
00169 if((wpad->btns_d | wpad->btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_RIGHT)
00170 || (pad.btns_d | pad.btns_h) & PAD_BUTTON_RIGHT
00171 || pad.stickX > PADCAL
00172 || WPAD_Stick(0,0) > PADCAL)
00173 {
00174 if(wpad->btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_RIGHT)
00175 || pad.btns_d & PAD_BUTTON_RIGHT)
00176 {
00177 scrollDelay = SCROLL_INITIAL_DELAY;
00178 return true;
00179 }
00180 else if(scrollDelay == 0)
00181 {
00182 scrollDelay = SCROLL_LOOP_DELAY;
00183 return true;
00184 }
00185 else
00186 {
00187 if(scrollDelay > 0)
00188 scrollDelay--;
00189 }
00190 }
00191 return false;
00192 }
00193
00194 bool GuiTrigger::Up()
00195 {
00196 u32 wiibtn = WPAD_BUTTON_UP;
00197
00198 if((wpad->btns_d | wpad->btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_UP)
00199 || (pad.btns_d | pad.btns_h) & PAD_BUTTON_UP
00200 || pad.stickY > PADCAL
00201 || WPAD_Stick(0,1) > PADCAL)
00202 {
00203 if(wpad->btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_UP)
00204 || pad.btns_d & PAD_BUTTON_UP)
00205 {
00206 scrollDelay = SCROLL_INITIAL_DELAY;
00207 return true;
00208 }
00209 else if(scrollDelay == 0)
00210 {
00211 scrollDelay = SCROLL_LOOP_DELAY;
00212 return true;
00213 }
00214 else
00215 {
00216 if(scrollDelay > 0)
00217 scrollDelay--;
00218 }
00219 }
00220 return false;
00221 }
00222
00223 bool GuiTrigger::Down()
00224 {
00225 u32 wiibtn = WPAD_BUTTON_DOWN;
00226
00227 if((wpad->btns_d | wpad->btns_h) & (wiibtn | WPAD_CLASSIC_BUTTON_DOWN)
00228 || (pad.btns_d | pad.btns_h) & PAD_BUTTON_DOWN
00229 || pad.stickY < -PADCAL
00230 || WPAD_Stick(0,1) < -PADCAL)
00231 {
00232 if(wpad->btns_d & (wiibtn | WPAD_CLASSIC_BUTTON_DOWN)
00233 || pad.btns_d & PAD_BUTTON_DOWN)
00234 {
00235 scrollDelay = SCROLL_INITIAL_DELAY;
00236 return true;
00237 }
00238 else if(scrollDelay == 0)
00239 {
00240 scrollDelay = SCROLL_LOOP_DELAY;
00241 return true;
00242 }
00243 else
00244 {
00245 if(scrollDelay > 0)
00246 scrollDelay--;
00247 }
00248 }
00249 return false;
00250 }