vanilla-wow-addons – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | --[[ |
2 | Author: Jacob Bowers (Thronk on Mal'Ganis server) |
||
3 | |||
4 | ]] |
||
5 | |||
6 | |||
7 | SolitaireOptions = {}; |
||
8 | |||
9 | SolitaireCardArray = {value=0,suit=""}; |
||
10 | |||
11 | SolitaireIndexToCardArray = {}; |
||
12 | SolitaireSelectedCard = nil; |
||
13 | |||
14 | SolitaireStack2Num = 1; |
||
15 | SolitaireStack3Num = 2; |
||
16 | SolitaireStack4Num = 3; |
||
17 | SolitaireStack5Num = 4; |
||
18 | SolitaireStack6Num = 5; |
||
19 | SolitaireStack7Num = 6; |
||
20 | |||
21 | SolitaireSpareCardStack = {}; |
||
22 | SolitaireSpareCardNum = 0; |
||
23 | |||
24 | SolitaireStack2 = {}; |
||
25 | SolitaireStack3 = {}; |
||
26 | SolitaireStack4 = {}; |
||
27 | SolitaireStack5 = {}; |
||
28 | SolitaireStack6 = {}; |
||
29 | SolitaireStack7 = {}; |
||
30 | |||
31 | SolitaireAcePile1 = {}; |
||
32 | SolitaireAcePile1Num = 0; |
||
33 | |||
34 | SolitaireAcePile2 = {}; |
||
35 | SolitaireAcePile2Num = 0; |
||
36 | |||
37 | SolitaireAcePile3 = {}; |
||
38 | SolitaireAcePile3Num = 0; |
||
39 | |||
40 | SolitaireAcePile4 = {}; |
||
41 | SolitaireAcePile4Num = 0; |
||
42 | SolitaireCurrentSpareCardIndex = 0; |
||
43 | SolitaireTimeCounter = 0; |
||
44 | |||
45 | DestinationCard = nil; |
||
46 | IsStackCard = nil; |
||
47 | |||
48 | function Solitaire_SetDragCard(id) |
||
49 | |||
50 | if(id ~= nil) then |
||
51 | SolitaireSelectedCard = id; |
||
52 | getglobal("Solitaire_CardButton"..id.."CheckTexture"):SetTexture("Interface\\AddOns\\Solitaire\\Check"); |
||
53 | --DEFAULT_CHAT_FRAME:AddMessage("Solitaire Set Card: "..id.." Dest Card: "..DestinationCard); |
||
54 | end |
||
55 | end |
||
56 | |||
57 | function Solitaire_PlaceDragCard() |
||
58 | |||
59 | if(SolitaireSelectedCard ~= nil and DestinationCard ~= nil) then |
||
60 | |||
61 | getglobal("Solitaire_CardButton"..SolitaireSelectedCard.."CheckTexture"):SetTexture(""); |
||
62 | |||
63 | if(SolitaireSelectedCard == DestinationCard) then |
||
64 | SolitaireSelectedCard = nil; |
||
65 | return; |
||
66 | end |
||
67 | |||
68 | if(IsStackCard) then |
||
69 | Solitaire_StackButtonOnClick(DestinationCard); |
||
70 | else |
||
71 | Solitaire_OnClick(DestinationCard); |
||
72 | end |
||
73 | |||
74 | end |
||
75 | |||
76 | end |
||
77 | |||
78 | function Solitaire_StackPlaceDragCard() |
||
79 | |||
80 | if(SolitaireSelectedCard ~= nil and DestinationCard ~= nil) then |
||
81 | |||
82 | if(SolitaireSelectedCard == DestinationCard) then |
||
83 | SolitaireSelectedCard = nil; |
||
84 | return; |
||
85 | end |
||
86 | |||
87 | --DEFAULT_CHAT_FRAME:AddMessage("Selected card: "..SelectedCard.."Destination Card: "..DestinationCard); |
||
88 | Solitaire_StackButtonOnClick(DestinationCard); |
||
89 | end |
||
90 | |||
91 | SolitaireSelectedCard = nil; |
||
92 | end |
||
93 | |||
94 | |||
95 | function Solitaire_SetCardArray() |
||
96 | local i; |
||
97 | local cnt; |
||
98 | |||
99 | SolitaireCardArray = {}; |
||
100 | |||
101 | cnt = 1; |
||
102 | for i=1,13 do |
||
103 | SolitaireCardArray[i] = {value = cnt, suit = "Heart"}; |
||
104 | cnt = cnt + 1; |
||
105 | end |
||
106 | |||
107 | cnt = 1; |
||
108 | for i=14,26 do |
||
109 | SolitaireCardArray[i] = {value = cnt, suit = "Diamond"}; |
||
110 | cnt = cnt + 1; |
||
111 | end |
||
112 | |||
113 | cnt = 1; |
||
114 | for i=27,39 do |
||
115 | SolitaireCardArray[i] = {value = cnt, suit = "Club"}; |
||
116 | cnt = cnt + 1; |
||
117 | end |
||
118 | |||
119 | cnt = 1; |
||
120 | for i=40,52 do |
||
121 | SolitaireCardArray[i] = {value = cnt, suit = "Spade"}; |
||
122 | cnt = cnt + 1; |
||
123 | end |
||
124 | |||
125 | end |
||
126 | |||
127 | |||
128 | function Solitaire_RoundNumber(num) |
||
129 | return floor( num + 0.5 ); |
||
130 | end |
||
131 | |||
132 | |||
133 | function Solitaire_ShuffleCardArray() |
||
134 | local cnt; |
||
135 | local rand1; |
||
136 | local rand2; |
||
137 | local tmp1, tmp2; |
||
138 | |||
139 | for cnt=1,10000 do |
||
140 | |||
141 | rand1 = 0; |
||
142 | rand2 = 0; |
||
143 | while ( rand1 == rand2 ) do |
||
144 | rand1 = Solitaire_RoundNumber(random()*51 + 1); |
||
145 | rand2 = Solitaire_RoundNumber(random()*51 + 1); |
||
146 | end |
||
147 | |||
148 | tmp1 = SolitaireCardArray[rand1].value; |
||
149 | tmp2 = SolitaireCardArray[rand1].suit; |
||
150 | SolitaireCardArray[rand1].value = SolitaireCardArray[rand2].value; |
||
151 | SolitaireCardArray[rand1].suit = SolitaireCardArray[rand2].suit; |
||
152 | SolitaireCardArray[rand2].value = tmp1; |
||
153 | SolitaireCardArray[rand2].suit = tmp2; |
||
154 | end |
||
155 | |||
156 | |||
157 | end |
||
158 | |||
159 | |||
160 | --[[ |
||
161 | function Solitaire_HideCards() |
||
162 | local i; |
||
163 | |||
164 | for i=1,91 do |
||
165 | Solitaire_SetCard(i, 0); |
||
166 | end |
||
167 | |||
168 | end |
||
169 | ]] |
||
170 | |||
171 | |||
172 | function Solitaire_Init() |
||
173 | local i; |
||
174 | |||
175 | Solitaire_SetCardArray(); |
||
176 | Solitaire_ShuffleCardArray(); |
||
177 | |||
178 | SolitaireStack2[1] = 1; |
||
179 | |||
180 | SolitaireStack3[1] = 2; |
||
181 | SolitaireStack3[2] = 3; |
||
182 | |||
183 | SolitaireStack4[1] = 4; |
||
184 | SolitaireStack4[2] = 5; |
||
185 | SolitaireStack4[3] = 6; |
||
186 | |||
187 | SolitaireStack5[1] = 7; |
||
188 | SolitaireStack5[2] = 8; |
||
189 | SolitaireStack5[3] = 9; |
||
190 | SolitaireStack5[4] = 10; |
||
191 | |||
192 | SolitaireStack6[1] = 11; |
||
193 | SolitaireStack6[2] = 12; |
||
194 | SolitaireStack6[3] = 13; |
||
195 | SolitaireStack6[4] = 14; |
||
196 | SolitaireStack6[5] = 15; |
||
197 | |||
198 | SolitaireStack7[1] = 16; |
||
199 | SolitaireStack7[2] = 17; |
||
200 | SolitaireStack7[3] = 18; |
||
201 | SolitaireStack7[4] = 19; |
||
202 | SolitaireStack7[5] = 20; |
||
203 | SolitaireStack7[6] = 21; |
||
204 | |||
205 | SolitaireStack2Num = 1; |
||
206 | SolitaireStack3Num = 2; |
||
207 | SolitaireStack4Num = 3; |
||
208 | SolitaireStack5Num = 4; |
||
209 | SolitaireStack6Num = 5; |
||
210 | SolitaireStack7Num = 6; |
||
211 | |||
212 | getglobal("SolitaireStackNum2"):SetText(1); |
||
213 | getglobal("SolitaireStackNum3"):SetText(2); |
||
214 | getglobal("SolitaireStackNum4"):SetText(3); |
||
215 | getglobal("SolitaireStackNum5"):SetText(4); |
||
216 | getglobal("SolitaireStackNum6"):SetText(5); |
||
217 | getglobal("SolitaireStackNum7"):SetText(6); |
||
218 | |||
219 | getglobal("Solitaire_StackButton1"):Hide(); |
||
220 | getglobal("Solitaire_StackButton2"):Hide(); |
||
221 | getglobal("Solitaire_StackButton3"):Hide(); |
||
222 | getglobal("Solitaire_StackButton4"):Hide(); |
||
223 | getglobal("Solitaire_StackButton5"):Hide(); |
||
224 | getglobal("Solitaire_StackButton6"):Hide(); |
||
225 | getglobal("Solitaire_StackButton7"):Hide(); |
||
226 | |||
227 | for i=1,91 do |
||
228 | Solitaire_SetCard(i, 0) |
||
229 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
230 | end |
||
231 | |||
232 | Solitaire_SetCard(92, 0, 1); |
||
233 | Solitaire_SetCard(93, 0, 1); |
||
234 | Solitaire_SetCard(94, 0, 1); |
||
235 | Solitaire_SetCard(95, 0, 1); |
||
236 | Solitaire_SetCard(96, 0, 1); |
||
237 | |||
238 | SolitaireSelectedCard = nil; |
||
239 | |||
240 | Solitaire_SetCard(1, 22); |
||
241 | Solitaire_SetCard(14, 23); |
||
242 | Solitaire_SetCard(27, 24); |
||
243 | Solitaire_SetCard(40, 25); |
||
244 | Solitaire_SetCard(53, 26); |
||
245 | Solitaire_SetCard(66, 27); |
||
246 | Solitaire_SetCard(79, 28); |
||
247 | |||
248 | SolitaireCurrentSpareCardIndex = 0; |
||
249 | SolitaireSpareCardNum = 0; |
||
250 | for i=29,52 do |
||
251 | SolitaireSpareCardNum = SolitaireSpareCardNum + 1; |
||
252 | SolitaireSpareCardStack[SolitaireSpareCardNum] = i; |
||
253 | end |
||
254 | |||
255 | --DEFAULT_CHAT_FRAME:AddMessage(SolitaireSpareCardNum); |
||
256 | end |
||
257 | |||
258 | |||
259 | -- Checks whether a card can be placed on another card (not used when checking the validity of placing a card |
||
260 | -- on the ace pile). |
||
261 | |||
262 | function Solitaire_CheckRules( origid, destid ) |
||
263 | local origsuit, destsuit; |
||
264 | local origval, destval; |
||
265 | |||
266 | if ( origid == nil or destid == nil or origid < 1 or destid < 1 or origid == destid) then |
||
267 | return nil; |
||
268 | end |
||
269 | |||
270 | if ( getglobal("Solitaire_CardButton"..(destid+1)):IsVisible() ) then |
||
271 | return nil; |
||
272 | end |
||
273 | |||
274 | origsuit = SolitaireCardArray[SolitaireIndexToCardArray[origid]].suit; |
||
275 | destsuit = SolitaireCardArray[SolitaireIndexToCardArray[destid]].suit; |
||
276 | |||
277 | if ( origsuit == "Heart" or origsuit == "Diamond" ) then |
||
278 | if ( destsuit == "Heart" or destsuit == "Diamond" ) then |
||
279 | return nil; |
||
280 | end |
||
281 | elseif ( origsuit == "Club" or origsuit == "Spade" ) then |
||
282 | if ( destsuit == "Club" or destsuit == "Spade" ) then |
||
283 | return nil; |
||
284 | end |
||
285 | end |
||
286 | |||
287 | origval = SolitaireCardArray[SolitaireIndexToCardArray[origid]].value; |
||
288 | destval = SolitaireCardArray[SolitaireIndexToCardArray[destid]].value; |
||
289 | |||
290 | if ( origval >= destval ) then |
||
291 | return nil; |
||
292 | end |
||
293 | |||
294 | if ( destval - origval > 1 ) then |
||
295 | return nil; |
||
296 | end |
||
297 | |||
298 | return 1; |
||
299 | end |
||
300 | |||
301 | |||
302 | -- Used to check if all the face up cards in a card pile have been moved, in which case, try and turn over the |
||
303 | -- next card in the face down pile of that stack. If there are no more cards, show a blank card (to indicate |
||
304 | -- where king cards may be relocated). |
||
305 | |||
306 | function Solitaire_CheckAndFlipStackCard() |
||
307 | |||
308 | if ( getglobal("Solitaire_CardButton1"):IsVisible() == nil and getglobal("Solitaire_StackButton1"):IsVisible() == nil) then |
||
309 | getglobal("Solitaire_StackButton1"):Show(); |
||
310 | --return; |
||
311 | end |
||
312 | |||
313 | if ( getglobal("Solitaire_CardButton14"):IsVisible() == nil and getglobal("Solitaire_StackButton2"):IsVisible() == nil) then |
||
314 | |||
315 | if ( SolitaireStack2Num > 0 ) then |
||
316 | |||
317 | Solitaire_SetCard(14, SolitaireStack2[SolitaireStack2Num]); |
||
318 | SolitaireStack2Num = SolitaireStack2Num - 1; |
||
319 | getglobal("SolitaireStackNum2"):SetText(SolitaireStack2Num); |
||
320 | getglobal("Solitaire_CardButton14CheckTexture"):SetTexture(""); |
||
321 | else |
||
322 | getglobal("Solitaire_StackButton2"):Show(); |
||
323 | end |
||
324 | end |
||
325 | |||
326 | if ( getglobal("Solitaire_CardButton27"):IsVisible() == nil and getglobal("Solitaire_StackButton3"):IsVisible() == nil) then |
||
327 | |||
328 | if ( SolitaireStack3Num > 0 ) then |
||
329 | |||
330 | Solitaire_SetCard(27, SolitaireStack3[SolitaireStack3Num]); |
||
331 | SolitaireStack3Num = SolitaireStack3Num - 1; |
||
332 | getglobal("SolitaireStackNum3"):SetText(SolitaireStack3Num); |
||
333 | getglobal("Solitaire_CardButton27CheckTexture"):SetTexture(""); |
||
334 | else |
||
335 | getglobal("Solitaire_StackButton3"):Show(); |
||
336 | end |
||
337 | end |
||
338 | |||
339 | if ( getglobal("Solitaire_CardButton40"):IsVisible() == nil and getglobal("Solitaire_StackButton4"):IsVisible() == nil) then |
||
340 | |||
341 | if ( SolitaireStack4Num > 0 ) then |
||
342 | |||
343 | Solitaire_SetCard(40, SolitaireStack4[SolitaireStack4Num]); |
||
344 | SolitaireStack4Num = SolitaireStack4Num - 1; |
||
345 | getglobal("SolitaireStackNum4"):SetText(SolitaireStack4Num); |
||
346 | getglobal("Solitaire_CardButton40CheckTexture"):SetTexture(""); |
||
347 | else |
||
348 | getglobal("Solitaire_StackButton4"):Show(); |
||
349 | end |
||
350 | end |
||
351 | |||
352 | if ( getglobal("Solitaire_CardButton53"):IsVisible() == nil and getglobal("Solitaire_StackButton5"):IsVisible() == nil) then |
||
353 | |||
354 | if ( SolitaireStack5Num > 0 ) then |
||
355 | |||
356 | Solitaire_SetCard(53, SolitaireStack5[SolitaireStack5Num]); |
||
357 | SolitaireStack5Num = SolitaireStack5Num - 1; |
||
358 | getglobal("SolitaireStackNum5"):SetText(SolitaireStack5Num); |
||
359 | getglobal("Solitaire_CardButton53CheckTexture"):SetTexture(""); |
||
360 | else |
||
361 | getglobal("Solitaire_StackButton5"):Show(); |
||
362 | end |
||
363 | end |
||
364 | |||
365 | if ( getglobal("Solitaire_CardButton66"):IsVisible() == nil and getglobal("Solitaire_StackButton6"):IsVisible() == nil) then |
||
366 | |||
367 | if ( SolitaireStack6Num > 0 ) then |
||
368 | |||
369 | Solitaire_SetCard(66, SolitaireStack6[SolitaireStack6Num]); |
||
370 | SolitaireStack6Num = SolitaireStack6Num - 1; |
||
371 | getglobal("SolitaireStackNum6"):SetText(SolitaireStack6Num); |
||
372 | getglobal("Solitaire_CardButton66CheckTexture"):SetTexture(""); |
||
373 | else |
||
374 | getglobal("Solitaire_StackButton6"):Show(); |
||
375 | end |
||
376 | end |
||
377 | |||
378 | if ( getglobal("Solitaire_CardButton79"):IsVisible() == nil and getglobal("Solitaire_StackButton7"):IsVisible() == nil) then |
||
379 | |||
380 | if ( SolitaireStack7Num > 0 ) then |
||
381 | |||
382 | Solitaire_SetCard(79, SolitaireStack7[SolitaireStack7Num]); |
||
383 | SolitaireStack7Num = SolitaireStack7Num - 1; |
||
384 | getglobal("SolitaireStackNum7"):SetText(SolitaireStack7Num); |
||
385 | getglobal("Solitaire_CardButton79CheckTexture"):SetTexture(""); |
||
386 | else |
||
387 | getglobal("Solitaire_StackButton7"):Show(); |
||
388 | end |
||
389 | end |
||
390 | |||
391 | Solitaire_RedrawCards(); |
||
392 | end |
||
393 | |||
394 | |||
395 | -- HACK: button click zones don't occlude each other very well, so if a cardbutton is being covered by |
||
396 | -- another cardbutton, reduce its click zone. |
||
397 | |||
398 | --[[ |
||
399 | function Solitaire_SetCardButtonHeights( origid ) |
||
400 | |||
401 | if ( origid >= 1 and origid <= 13 ) then |
||
402 | |||
403 | for i= 1, 12 do |
||
404 | |||
405 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
406 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
407 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
408 | return; |
||
409 | end |
||
410 | |||
411 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 1 ) then |
||
412 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
413 | end |
||
414 | end |
||
415 | elseif ( origid >= 14 and origid <= 26 ) then |
||
416 | |||
417 | for i= 14, 26 do |
||
418 | |||
419 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
420 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
421 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
422 | return; |
||
423 | end |
||
424 | |||
425 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 14 ) then |
||
426 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
427 | end |
||
428 | end |
||
429 | elseif ( origid >= 27 and origid <= 39 ) then |
||
430 | |||
431 | for i= 27, 39 do |
||
432 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
433 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
434 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
435 | return; |
||
436 | end |
||
437 | |||
438 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 27 ) then |
||
439 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
440 | end |
||
441 | end |
||
442 | elseif ( origid >= 40 and origid <= 52 ) then |
||
443 | |||
444 | for i= 40, 52 do |
||
445 | |||
446 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
447 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
448 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
449 | return; |
||
450 | end |
||
451 | |||
452 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 40 ) then |
||
453 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
454 | end |
||
455 | end |
||
456 | elseif ( origid >= 53 and origid <= 65 ) then |
||
457 | |||
458 | for i= 53, 65 do |
||
459 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
460 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
461 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
462 | return; |
||
463 | end |
||
464 | |||
465 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 53 ) then |
||
466 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
467 | end |
||
468 | end |
||
469 | elseif ( origid >= 66 and origid <= 78 ) then |
||
470 | |||
471 | for i= 66, 78 do |
||
472 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
473 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
474 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
475 | return; |
||
476 | end |
||
477 | |||
478 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 66 ) then |
||
479 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
480 | end |
||
481 | end |
||
482 | elseif ( origid >= 79 and origid <= 91 ) then |
||
483 | |||
484 | for i= 79, 91 do |
||
485 | if ( getglobal("Solitaire_CardButton"..(i+1)):IsVisible() ) then |
||
486 | getglobal("Solitaire_CardButton"..i):SetHeight(14); |
||
487 | getglobal("Solitaire_CardButton"..(i+1)):SetHeight(90); |
||
488 | return; |
||
489 | end |
||
490 | |||
491 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() and i == 79 ) then |
||
492 | getglobal("Solitaire_CardButton"..i):SetHeight(90); |
||
493 | end |
||
494 | end |
||
495 | end |
||
496 | end |
||
497 | ]] |
||
498 | |||
499 | |||
500 | function Solitaire_MoveCards( origid, destid ) |
||
501 | local cnt = 1; |
||
502 | |||
503 | if ( origid >= 1 and origid <= 13 ) then |
||
504 | |||
505 | for i= origid, 13 do |
||
506 | |||
507 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
508 | return; |
||
509 | end |
||
510 | |||
511 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
512 | Solitaire_SetCard(i, 0); |
||
513 | cnt = cnt + 1; |
||
514 | end |
||
515 | elseif ( origid >= 14 and origid <= 26 ) then |
||
516 | |||
517 | for i= origid, 26 do |
||
518 | |||
519 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
520 | return; |
||
521 | end |
||
522 | |||
523 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
524 | Solitaire_SetCard(i, 0); |
||
525 | cnt = cnt + 1; |
||
526 | end |
||
527 | elseif ( origid >= 27 and origid <= 39 ) then |
||
528 | |||
529 | for i= origid, 39 do |
||
530 | |||
531 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
532 | return; |
||
533 | end |
||
534 | |||
535 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
536 | Solitaire_SetCard(i, 0); |
||
537 | cnt = cnt + 1; |
||
538 | end |
||
539 | elseif ( origid >= 40 and origid <= 52 ) then |
||
540 | |||
541 | for i= origid, 52 do |
||
542 | |||
543 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
544 | return; |
||
545 | end |
||
546 | |||
547 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
548 | Solitaire_SetCard(i, 0); |
||
549 | cnt = cnt + 1; |
||
550 | end |
||
551 | elseif ( origid >= 53 and origid <= 65 ) then |
||
552 | |||
553 | for i= origid, 65 do |
||
554 | |||
555 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
556 | return; |
||
557 | end |
||
558 | |||
559 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
560 | Solitaire_SetCard(i, 0); |
||
561 | cnt = cnt + 1; |
||
562 | end |
||
563 | elseif ( origid >= 66 and origid <= 78 ) then |
||
564 | |||
565 | for i= origid, 78 do |
||
566 | |||
567 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
568 | return; |
||
569 | end |
||
570 | |||
571 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
572 | Solitaire_SetCard(i, 0); |
||
573 | cnt = cnt + 1; |
||
574 | end |
||
575 | elseif ( origid >= 79 and origid <= 91 ) then |
||
576 | |||
577 | for i= origid, 91 do |
||
578 | |||
579 | if ( getglobal("Solitaire_CardButton"..i):IsVisible() == nil ) then |
||
580 | return; |
||
581 | end |
||
582 | |||
583 | Solitaire_SetCard(destid + cnt, SolitaireIndexToCardArray[i]); |
||
584 | Solitaire_SetCard(i, 0); |
||
585 | cnt = cnt + 1; |
||
586 | end |
||
587 | elseif ( origid >= 92 and origid <= 95 ) then |
||
588 | |||
589 | --NEEDS WORK |
||
590 | if ( Solitaire_CheckRules( origid, destid ) ) then |
||
591 | Solitaire_SetCard(destid + 1, SolitaireIndexToCardArray[origid]); |
||
592 | Solitaire_SetCard( origid, 0, 1); |
||
593 | end |
||
594 | end |
||
595 | end |
||
596 | |||
597 | |||
598 | -- NEED TO: Set it up so as you add to the acestacks, the cards on the bottom get saved, and get popped back up |
||
599 | -- if a card on top is removed. |
||
600 | |||
601 | function Solitaire_CheckAceStackRules( origid, destid ) |
||
602 | local origsuit, destsuit; |
||
603 | local origval, destval; |
||
604 | |||
605 | if ( SolitaireIndexToCardArray[destid] == nil ) then |
||
606 | if ( SolitaireCardArray[SolitaireIndexToCardArray[origid]].value == 1 ) then |
||
607 | return 1; |
||
608 | end |
||
609 | elseif ( SolitaireCardArray[SolitaireIndexToCardArray[destid]].suit == SolitaireCardArray[SolitaireIndexToCardArray[origid]].suit ) then |
||
610 | origval = SolitaireCardArray[SolitaireIndexToCardArray[origid]].value; |
||
611 | destval = SolitaireCardArray[SolitaireIndexToCardArray[destid]].value; |
||
612 | |||
613 | if ( origval - destval == 1 ) then |
||
614 | return 1; |
||
615 | end |
||
616 | end |
||
617 | |||
618 | return nil; |
||
619 | end |
||
620 | |||
621 | |||
622 | function Solitaire_PopSpareStack() |
||
623 | local TmpStack = {}; |
||
624 | local cnt = 1; |
||
625 | |||
626 | |||
627 | if ( SolitaireSpareCardNum < 1 ) then |
||
628 | return; |
||
629 | end |
||
630 | |||
631 | for i=1,SolitaireSpareCardNum do |
||
632 | if ( i ~= SolitaireCurrentSpareCardIndex ) then |
||
633 | TmpStack[cnt] = SolitaireSpareCardStack[i]; |
||
634 | cnt = cnt + 1; |
||
635 | end |
||
636 | end |
||
637 | |||
638 | SolitaireSpareCardStack = {}; |
||
639 | SolitaireSpareCardStack = TmpStack; |
||
640 | |||
641 | SolitaireCurrentSpareCardIndex = SolitaireCurrentSpareCardIndex - 1; |
||
642 | SolitaireSpareCardNum = SolitaireSpareCardNum - 1; |
||
643 | if ( SolitaireCurrentSpareCardIndex == 0 ) then |
||
644 | |||
645 | if ( SolitaireSpareCardNum > 1 ) then |
||
646 | --SolitaireCurrentSpareCardIndex = SolitaireSpareCardNum; |
||
647 | Solitaire_SetCard(96, 0, 1); |
||
648 | |||
649 | end |
||
650 | return; |
||
651 | end |
||
652 | |||
653 | Solitaire_SetCard(96, SolitaireSpareCardStack[SolitaireCurrentSpareCardIndex]); |
||
654 | end |
||
655 | |||
656 | |||
657 | function Solitaire_SpareCardOnClick() |
||
658 | |||
659 | SolitaireCurrentSpareCardIndex = SolitaireCurrentSpareCardIndex + 1; |
||
660 | |||
661 | if ( SolitaireSpareCardNum < 1 ) then |
||
662 | return; |
||
663 | end |
||
664 | |||
665 | if ( SolitaireCurrentSpareCardIndex > SolitaireSpareCardNum ) then |
||
666 | SolitaireCurrentSpareCardIndex = 0; |
||
667 | Solitaire_SetCard(96, 0, 1); |
||
668 | return; |
||
669 | end |
||
670 | |||
671 | Solitaire_SetCard(96, SolitaireSpareCardStack[SolitaireCurrentSpareCardIndex]); |
||
672 | |||
673 | end |
||
674 | |||
675 | |||
676 | function Solitaire_OnClick(id) |
||
677 | |||
678 | if ( id <= 91 ) then |
||
679 | |||
680 | --if ( IsControlKeyDown() ) then |
||
681 | if ( SolitaireSelectedCard ~= nil ) then |
||
682 | |||
683 | if ( Solitaire_CheckRules( SolitaireSelectedCard, id ) ) then |
||
684 | if ( SolitaireSelectedCard <= 91 ) then |
||
685 | Solitaire_MoveCards( SolitaireSelectedCard, id ); |
||
686 | SolitaireSelectedCard = nil; |
||
687 | getglobal("Solitaire_CardButton"..id.."CheckTexture"):SetTexture(""); |
||
688 | Solitaire_CheckAndFlipStackCard(); |
||
689 | elseif ( SolitaireSelectedCard == 96) then |
||
690 | Solitaire_SetCard(id+1, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
691 | Solitaire_SetCard(SolitaireSelectedCard, 0, 1); |
||
692 | SolitaireSelectedCard = nil; |
||
693 | Solitaire_PopSpareStack(); |
||
694 | end |
||
695 | end |
||
696 | end |
||
697 | return; |
||
698 | --end |
||
699 | |||
700 | elseif (id >= 92 and id <= 95) then |
||
701 | |||
702 | --if ( IsControlKeyDown() ) then |
||
703 | if ( SolitaireSelectedCard ~= nil ) then |
||
704 | |||
705 | if ( Solitaire_CheckAceStackRules( SolitaireSelectedCard, id ) ) then |
||
706 | |||
707 | if ( SolitaireSelectedCard >= 92 and SolitaireSelectedCard <= 95 ) then |
||
708 | Solitaire_SetCard(id, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
709 | Solitaire_SetCard(SolitaireSelectedCard, 0, 1); |
||
710 | elseif ( SolitaireSelectedCard == 96) then |
||
711 | Solitaire_SetCard(id, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
712 | Solitaire_SetCard(SolitaireSelectedCard, 0, 1); |
||
713 | |||
714 | Solitaire_PopSpareStack(); |
||
715 | |||
716 | else |
||
717 | Solitaire_SetCard(id, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
718 | Solitaire_SetCard(SolitaireSelectedCard, 0); |
||
719 | end |
||
720 | |||
721 | SolitaireSelectedCard = nil; |
||
722 | getglobal("Solitaire_CardButton"..id.."CheckTexture"):SetTexture(""); |
||
723 | Solitaire_CheckAndFlipStackCard(); |
||
724 | end |
||
725 | end |
||
726 | return; |
||
727 | --end |
||
728 | end |
||
729 | |||
730 | |||
731 | if ( getglobal("Solitaire_CardButton"..id.."CardValue"):GetText() ~= "" and getglobal("Solitaire_CardButton"..id.."CardValue"):GetText() ~= nil) then |
||
732 | if(SolitaireSelectedCard == id) then |
||
733 | SolitaireSelectedCard = nil; |
||
734 | getglobal("Solitaire_CardButton"..id.."CheckTexture"):SetTexture(""); |
||
735 | elseif( SolitaireSelectedCard == nil ) then |
||
736 | getglobal("Solitaire_CardButton"..id.."CheckTexture"):SetTexture("Interface\\AddOns\\Solitaire\\Check"); |
||
737 | SolitaireSelectedCard = id; |
||
738 | else |
||
739 | getglobal("Solitaire_CardButton"..SolitaireSelectedCard.."CheckTexture"):SetTexture(""); |
||
740 | getglobal("Solitaire_CardButton"..id.."CheckTexture"):SetTexture("Interface\\AddOns\\Solitaire\\Check"); |
||
741 | SolitaireSelectedCard = id; |
||
742 | end |
||
743 | end |
||
744 | |||
745 | |||
746 | end |
||
747 | |||
748 | |||
749 | function Solitaire_StackButtonOnClick( id ) |
||
750 | |||
751 | --if ( IsControlKeyDown() ) then |
||
752 | |||
753 | if ( SolitaireSelectedCard ~= nil ) then |
||
754 | |||
755 | |||
756 | if ( SolitaireSelectedCard == 96 ) then |
||
757 | |||
758 | if ( SolitaireCardArray[SolitaireIndexToCardArray[SolitaireSelectedCard]].value ~= 13 ) then |
||
759 | SolitaireSelectedCard = nil; |
||
760 | return; |
||
761 | end |
||
762 | |||
763 | if ( id == 1 ) then |
||
764 | Solitaire_SetCard(1, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
765 | getglobal("Solitaire_StackButton1"):Hide(); |
||
766 | |||
767 | elseif ( id == 2 ) then |
||
768 | Solitaire_SetCard(14, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
769 | getglobal("Solitaire_StackButton2"):Hide(); |
||
770 | |||
771 | elseif ( id == 3 ) then |
||
772 | Solitaire_SetCard(27, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
773 | getglobal("Solitaire_StackButton3"):Hide(); |
||
774 | |||
775 | elseif ( id == 4 ) then |
||
776 | Solitaire_SetCard(40, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
777 | getglobal("Solitaire_StackButton4"):Hide(); |
||
778 | |||
779 | elseif ( id == 5 ) then |
||
780 | Solitaire_SetCard(53, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
781 | getglobal("Solitaire_StackButton5"):Hide(); |
||
782 | |||
783 | elseif ( id == 6 ) then |
||
784 | Solitaire_SetCard(66, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
785 | getglobal("Solitaire_StackButton6"):Hide(); |
||
786 | |||
787 | elseif ( id == 7 ) then |
||
788 | Solitaire_SetCard(79, SolitaireIndexToCardArray[SolitaireSelectedCard]) |
||
789 | getglobal("Solitaire_StackButton7"):Hide(); |
||
790 | end |
||
791 | |||
792 | |||
793 | Solitaire_SetCard(SolitaireSelectedCard, 0, 1); |
||
794 | Solitaire_PopSpareStack(); |
||
795 | getglobal("Solitaire_CardButton"..SolitaireSelectedCard.."CheckTexture"):SetTexture(""); |
||
796 | SolitaireSelectedCard = nil; |
||
797 | --Solitaire_CheckAndFlipStackCard(); |
||
798 | return; |
||
799 | end |
||
800 | |||
801 | if ( SolitaireCardArray[SolitaireIndexToCardArray[SolitaireSelectedCard]].value == 13 ) then |
||
802 | |||
803 | if ( id == 1 ) then |
||
804 | Solitaire_MoveCards( SolitaireSelectedCard, 1-1 ); |
||
805 | getglobal("Solitaire_StackButton1"):Hide(); |
||
806 | |||
807 | elseif ( id == 2 ) then |
||
808 | Solitaire_MoveCards( SolitaireSelectedCard, 14-1 ); |
||
809 | getglobal("Solitaire_StackButton2"):Hide(); |
||
810 | |||
811 | elseif ( id == 3 ) then |
||
812 | Solitaire_MoveCards( SolitaireSelectedCard, 27-1 ); |
||
813 | getglobal("Solitaire_StackButton3"):Hide(); |
||
814 | |||
815 | elseif ( id == 4 ) then |
||
816 | Solitaire_MoveCards( SolitaireSelectedCard, 40-1 ); |
||
817 | getglobal("Solitaire_StackButton4"):Hide(); |
||
818 | |||
819 | elseif ( id == 5 ) then |
||
820 | Solitaire_MoveCards( SolitaireSelectedCard, 53-1 ); |
||
821 | getglobal("Solitaire_StackButton5"):Hide(); |
||
822 | |||
823 | elseif ( id == 6 ) then |
||
824 | Solitaire_MoveCards( SolitaireSelectedCard, 66-1 ); |
||
825 | getglobal("Solitaire_StackButton6"):Hide(); |
||
826 | |||
827 | elseif ( id == 7 ) then |
||
828 | Solitaire_MoveCards( SolitaireSelectedCard, 79-1 ); |
||
829 | getglobal("Solitaire_StackButton7"):Hide(); |
||
830 | end |
||
831 | |||
832 | getglobal("Solitaire_CardButton"..SolitaireSelectedCard.."CheckTexture"):SetTexture(""); |
||
833 | SolitaireSelectedCard = nil; |
||
834 | Solitaire_CheckAndFlipStackCard(); |
||
835 | end |
||
836 | end |
||
837 | --end |
||
838 | end |
||
839 | |||
840 | |||
841 | function Solitaire_OnLoad() |
||
842 | |||
843 | this:RegisterEvent("VARIABLES_LOADED"); |
||
844 | |||
845 | SlashCmdList["SOLITAIRE"] = Solitaire_SlashHandler; |
||
846 | SLASH_SOLITAIRE1 = "/sol"; |
||
847 | |||
848 | Solitaire_Init(); |
||
849 | |||
850 | end |
||
851 | |||
852 | |||
853 | function Solitaire_OnEvent(event) |
||
854 | |||
855 | if( event == "VARIABLES_LOADED") then |
||
856 | |||
857 | end |
||
858 | end |
||
859 | |||
860 | |||
861 | function Solitaire_SetCardButtonHeight( id, bExpand ) |
||
862 | |||
863 | if ( id > 0 and id < 92 and id ~= 13 and id ~= 26 and id ~= 39 and id ~= 52 and id ~= 65 and id ~= 78 and id ~= 91 ) then |
||
864 | |||
865 | if ( bExpand ) then |
||
866 | getglobal("Solitaire_CardButton"..id):SetHeight(90); |
||
867 | getglobal("Solitaire_CardButton"..id.."CardTexture"):SetTexture("Interface\\AddOns\\Solitaire\\Cardfacev3"); |
||
868 | getglobal("Solitaire_CardButton"..id.."CardTexture"):SetTexCoord(0, 1, 0, 1); |
||
869 | else |
||
870 | getglobal("Solitaire_CardButton"..id):SetHeight(14); |
||
871 | getglobal("Solitaire_CardButton"..id.."CardTexture"):SetTexture("Interface\\AddOns\\Solitaire\\Cardfacev4"); |
||
872 | getglobal("Solitaire_CardButton"..id.."CardTexture"):SetTexCoord(0, 1, 0, 4); |
||
873 | end |
||
874 | end |
||
875 | end |
||
876 | |||
877 | |||
878 | function Solitaire_SetCard(num, val, bDoNotHide) |
||
879 | |||
880 | local cardval = getglobal("Solitaire_CardButton"..num.."CardValue"); |
||
881 | local SuitTexture = getglobal("Solitaire_CardButton"..num.."SuitTexture"); |
||
882 | local tmpval; |
||
883 | local suit; |
||
884 | |||
885 | if ( cardval == nil or SuitTexture == nil ) then |
||
886 | DEFAULT_CHAT_FRAME:AddMessage("SetCard Failure"); |
||
887 | return; |
||
888 | end |
||
889 | |||
890 | if ( val == 0) then |
||
891 | cardval:SetText(""); |
||
892 | SuitTexture:SetTexture(""); |
||
893 | getglobal("Solitaire_CardButton"..num.."CheckTexture"):SetTexture(""); |
||
894 | |||
895 | if ( not bDoNotHide ) then |
||
896 | getglobal("Solitaire_CardButton"..num):Hide(); |
||
897 | end |
||
898 | |||
899 | -- We're "deleting" this card, so expand its click zone, as well as the click zone of its predecesor. |
||
900 | Solitaire_SetCardButtonHeight( num - 1, 1 ) |
||
901 | Solitaire_SetCardButtonHeight( num, 1 ) |
||
902 | |||
903 | SolitaireIndexToCardArray[num] = nil; |
||
904 | return; |
||
905 | end |
||
906 | |||
907 | suit = SolitaireCardArray[val].suit; |
||
908 | |||
909 | if ( SolitaireCardArray[val].value == 13 ) then |
||
910 | tmpval = "K"; |
||
911 | elseif ( SolitaireCardArray[val].value == 12 ) then |
||
912 | tmpval = "Q"; |
||
913 | elseif ( SolitaireCardArray[val].value == 11 ) then |
||
914 | tmpval = "J"; |
||
915 | elseif ( SolitaireCardArray[val].value == 1 ) then |
||
916 | tmpval = "A"; |
||
917 | else |
||
918 | tmpval = SolitaireCardArray[val].value; |
||
919 | end |
||
920 | |||
921 | |||
922 | if ( suit == "Heart" or suit == "Diamond" ) then |
||
923 | |||
924 | cardval:SetText(tmpval); |
||
925 | cardval:SetTextColor(1, 0, 0, 1); |
||
926 | SuitTexture:SetTexture("Interface\\AddOns\\Solitaire\\"..SolitaireCardArray[val].suit); |
||
927 | elseif (suit == "Spade" or suit == "Club" ) then |
||
928 | cardval:SetText(tmpval); |
||
929 | cardval:SetTextColor(0, 0, 0, 1); |
||
930 | SuitTexture:SetTexture("Interface\\AddOns\\Solitaire\\"..SolitaireCardArray[val].suit); |
||
931 | end |
||
932 | |||
933 | Solitaire_SetCardButtonHeight( num - 1 ) |
||
934 | Solitaire_SetCardButtonHeight( num, 1 ) |
||
935 | |||
936 | SolitaireIndexToCardArray[num] = val; |
||
937 | getglobal("Solitaire_CardButton"..num):Show(); |
||
938 | |||
939 | end |
||
940 | |||
941 | |||
942 | --HACK |
||
943 | function Solitaire_RedrawCards() |
||
944 | local i; |
||
945 | |||
946 | for i=1,91 do |
||
947 | if( getglobal("Solitaire_CardButton"..i):IsVisible() ) then |
||
948 | getglobal("Solitaire_CardButton"..i):Hide(); |
||
949 | getglobal("Solitaire_CardButton"..i):Show(); |
||
950 | end |
||
951 | end |
||
952 | |||
953 | SolitaireFrame:Hide(); |
||
954 | SolitaireFrame:Show(); |
||
955 | end |
||
956 | |||
957 | |||
958 | --HACK |
||
959 | function Solitaire_OnUpdate(arg1) |
||
960 | |||
961 | SolitaireTimeCounter = SolitaireTimeCounter + arg1; |
||
962 | |||
963 | if(SolitaireTimeCounter >= 5) then |
||
964 | --DEFAULT_CHAT_FRAME:AddMessage("DEBUG"); |
||
965 | --Solitaire_RedrawCards(); |
||
966 | SolitaireFrame:Hide(); |
||
967 | SolitaireFrame:Show(); |
||
968 | SolitaireTimeCounter = 0; |
||
969 | end |
||
970 | end |
||
971 | |||
972 | |||
973 | function Solitaire_SlashHandler(cmd) |
||
974 | |||
975 | local args = {}; |
||
976 | local counter = 0; |
||
977 | local i, w; |
||
978 | local status; |
||
979 | local TmpStr = {}; |
||
980 | TmpStr = ""; |
||
981 | |||
982 | cmd = string.lower(cmd); |
||
983 | for w in string.gfind(cmd, "%w+") do |
||
984 | counter = counter + 1; |
||
985 | args[counter] = w; |
||
986 | end |
||
987 | |||
988 | if (args[1] == nil) then |
||
989 | SolitaireFrame:Show(); |
||
990 | end |
||
991 | end |
||
992 | |||
993 |