vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
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