DEADSOFTWARE

Remove ascii crap
[cavecraft.git] / src / invui.mpsrc
1 unit invui;
3 interface
4 procedure OpenFurnaceWindow(furid:integer);
5 procedure OpenFastCraftWindow(mode:integer);
6 procedure OpenChestWindow(n:integer;);
7 procedure OpenCreativeWindow;
8 procedure OpenPlayerInventory;
9 procedure DrawWindows;
10 function WindowKeyHanler:boolean;
12 implementation
14 uses vars, CellUI, console, Canvas, utils, craft, furnace, func, items_store, player, keyboard, Items, ItemsLogic;
16 const
17 WINDOW_PLAYER_INV=1;
18 WINDOW_DIV_ITEMS=2;
19 WINDOW_CEATIVE_INV=3;
20 WINDOW_CHEST_INV=4;
21 WINDOW_FASTCRAFT=5;
22 WINDOW_FURNACE=6;
24 INV_MODE_SELECT1=0;
25 INV_MODE_SELECT2=1;
26 INV_MODE_SELECT2_DIV=2;
28 MAX_CREATIVE_OFFSET=248;//32*8-8
29 MAX_FASTCRAFT_OFFSET=232;//24*10-8
31 WINDOW_INFO_INVMODE=0;
32 WINDOW_INFO_DIVRES=1;
33 WINDOW_INFO_FUR_ID=2;
35 WINDOW_INFO_DIV_ITEM=0;
36 WINDOW_INFO_DIV_SUM1=1;
37 WINDOW_INFO_DIV_SUM2=2;
39 WINDOW_INFO_FC_MODE=0;
41 var
42 InvWindowImg:image;
43 DivWindowImg, DivScrollImg:image;
44 CrWindowImg, CrScrollImg:image;
45 ChestWindowImg:image;
46 fcWindowImg, fcScrollImg, fcCanCraftImg:image;
47 furWindowImg, furFireImg, furProgressImg:image;
49 function calcScrollBar(scrollSize, buttonSize, maxEl, currentEl:integer):integer;
50 const
51 DivAccuracy=100000;
52 begin
53 if (currentEl=0) or (maxEl=0) then
54 calcScrollBar:=0;
55 else
56 if (currentEl<>maxEl) then
57 calcScrollBar:=DivAccuracy*(scrollSize-buttonSize)/maxEl*currentEl/DivAccuracy;
58 else
59 calcScrollBar:=scrollSize-buttonSize;
60 end;
62 procedure OpenFurnaceWindow(furid:integer);
63 var
64 i, j, id:integer;
65 begin
66 NewLayer;
67 SetWindowType(WINDOW_FURNACE);
68 SetCurActive(true, CUR_SELECT1);
70 SetWindowInfo(furid, WINDOW_INFO_FUR_ID);
72 if FindCurrentWindowsType=false then
73 begin
74 furWindowImg:=ld_tex('furnace.png','/'+sd+'/cavecraft/texturepacks/'+tex_pack+'/','gui/');
75 furFireImg:=rotate_image_from_image(furWindowImg, 0, 166, 14, 14, 0);
76 furProgressImg:=rotate_image_from_image(furWindowImg, 14, 166, 24, 17, 0);
77 furWindowImg:=rotate_image_from_image(furWindowImg, 0, 0, 176, 166, 0);
78 end;
80 for j:=0 to 8 do
81 begin
82 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18, true);
83 id:=id+1;
84 end;
86 for i:=1 to 3 do
87 for j:=0 to 8 do
88 begin
89 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18+4, true);
90 id:=id+1;
91 end;
93 initCell(CELL_TYPE_FURNACE, FURNACE_IN, 0, furid, 56, 97, true);
94 initCell(CELL_TYPE_FURNACE, FURNACE_FUEL, 0, furid, 56, 133, true);
95 initCell(CELL_TYPE_FURNACE, FURNACE_OUT, 0, furid, 116, 115, true);
96 end;
98 procedure DrawFurnaceWindow(x, y:integer);
99 var
100 furid, i, time:integer;
101 begin
102 furid:=GetWindowInfo(WINDOW_INFO_FUR_ID);
104 DrawImage(furWindowImg, x, y);
106 time:=furnace.getTime;
107 if furnaceBurn(furid) then
108 begin
109 i:=calcScrollBar(14, 0, furnace.FuelTime(furid), furnace.endFuelTime(furid)-time);
110 debug('i: '+i+'; time: '+time+'; fueltime:'+furnace.FuelTime(furid)+'; c: '+(furnace.endFuelTime(furid)-time));
111 SetClip(x+56, y+130-i, 18, i);
112 DrawImage(furFireImg, x+56, y+116);
114 if itemBurn(furid) then
115 begin
116 i:=calcScrollBar(24, 0, furnace.ProgTime(furid), furnace.endProgTime(furid)-time);
118 SetClip(x+79, y+114, 24-i, 17);
119 DrawImage(furProgressImg, x+79, y+114);
120 end;
122 SetClip(0, 0, getWidth, getHeight);
123 end;
125 end;
127 procedure CloseFurnaceWindow;
128 var
129 nullimg:image;
130 begin
131 if FindCurrentWindowsType=false then
132 begin
133 furWindowImg:=nullimg;
134 furFireImg:=nullimg;
135 furProgressImg:=nullimg;
136 end;
137 DelLayer;
138 end;
140 procedure OpenFastCraftWindow(mode:integer);
141 var
142 i, j, id:integer;
143 begin
144 NewLayer;
145 SetWindowType(WINDOW_FASTCRAFT);
146 SetCurActive(true, CUR_SELECT1);
148 SetWindowInfo(mode, WINDOW_INFO_FC_MODE);
150 if FindCurrentWindowsType=false then
151 begin
152 fcWindowImg:=ld_tex('fastcraft.png','/'+sd+'/cavecraft/texturepacks/'+tex_pack+'/','gui/');
153 fcScrollImg:=rotate_image_from_image(fcWindowImg, 0, 126, 12, 15, 0);
154 fcCanCraftImg:=rotate_image_from_image(fcWindowImg, 12, 126, 20, 18, 0);
155 fcWindowImg:=rotate_image_from_image(fcWindowImg, 0, 0, 176, 126, 0);
156 end;
158 for i:=0 to 2 do
159 for j:=0 to 7 do
160 begin
161 initCell(CELL_TYPE_FASTCRAFT, id, 0, -1, 8+j*18, 66+i*18, false);
162 id:=id+1;
163 end;
164 end;
166 procedure DrawFastCraftWindow(x, y:integer);
167 var
168 mode, craftid:integer;
169 i, j, id:integer;
170 begin
171 mode:=GetWindowInfo(WINDOW_INFO_FC_MODE);
172 craftid:=getCellID(GetCurIndex(GetCur))+GetOffset(0);//FIX IT! Indexes
174 DrawImage(fcWindowImg, x, y);
175 if canCreateCraft(craftid, mode) then
176 DrawImage(fcCanCraftImg, x+87, y+26);
178 for i:=0 to 1 do
179 for j:=0 to 1 do
180 begin
181 ItemsLogic.Draw(getCraftInItem(craftid, id), getCraftInSum(craftid, id), x+52+j*18, y+17+i*18, true);
182 id:=id+1;
183 end;
185 ItemsLogic.Draw(getCraftOutItem(craftid), getCraftOutSum(craftid), x+108, y+27, true);
187 i:=calcScrollBar(52, getImageHeight(fcScrollImg), MAX_FASTCRAFT_OFFSET, getOffset(0));
188 drawimage(fcScrollImg, x+156, y+66+i);
189 end;
191 procedure CloseFastCraftWindow;
192 var
193 nullimg:image;
194 begin
195 if FindCurrentWindowsType=false then
196 begin
197 fcWindowImg:=nullimg;
198 fcScrollImg:=nullimg;
199 fcCanCraftImg:=nullimg;
200 end;
201 DelLayer;
202 end;
204 procedure FindFastCraftUD(n:integer;);
205 var
206 old_cur, offset:integer;
207 begin
208 old_cur:=GetCurIndex(GetCur);
209 offset:=getOffset(0);
211 if n<0 then
212 ShiftCurrentCur(FIND_CELL_UP);
213 if n>0 then
214 ShiftCurrentCur(FIND_CELL_DOWN);
216 if old_cur=GetCurIndex(GetCur) then
217 begin
218 if n<0 then
219 begin
220 offset:=offset-8;
221 if offset<0 then
222 offset:=0;
223 end;
224 else
225 if n>0 then
226 begin
227 offset:=offset+8;
228 if offset>MAX_FASTCRAFT_OFFSET then
229 offset:=MAX_FASTCRAFT_OFFSET;
230 end;
231 end;
233 SetOffset(offset, 0);
234 end;
236 procedure OpenChestWindow(n:integer;);
237 var
238 i, j, id:integer;
239 begin
240 NewLayer;
241 SetWindowType(WINDOW_CHEST_INV);
242 SetCurActive(true, CUR_SELECT1);
244 if FindCurrentWindowsType=false then
245 begin
246 ChestWindowImg:=ld_tex('container.png','/'+sd+'/cavecraft/texturepacks/'+tex_pack+'/','gui/');
247 end;
249 for j:=0 to 8 do
250 begin
251 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18, true);
252 id:=id+1;
253 end;
255 for i:=1 to 3 do
256 for j:=0 to 8 do
257 begin
258 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18+4, true);
259 id:=id+1;
260 end;
262 id:=0;
263 for i:=0 to 2 do
264 for j:=0 to 8 do
265 begin
266 initCell(CELL_TYPE_CHEST, id, 0, n, 8+j*18, 88+i*18, true);
267 id:=id+1;
268 end;
269 end;
271 procedure CloseChestWindow;
272 var
273 nullimg:image;
274 begin
275 if FindCurrentWindowsType=false then
276 begin
277 ChestWindowImg:=nullimg;
278 end;
279 DelLayer;
280 end;
282 procedure OpenCreativeWindow;
283 var
284 i, j, id:integer;
285 begin
286 NewLayer;
287 SetWindowType(WINDOW_CEATIVE_INV);
288 SetCurActive(true, CUR_SELECT1);
290 if FindCurrentWindowsType=false then
291 begin
292 CrWindowImg:=ld_tex('creative.png','/'+sd+'/cavecraft/texturepacks/'+tex_pack+'/','gui/');
293 CrScrollImg:=rotate_image_from_image(CrWindowImg, 0, 108, 12, 15, 0);
294 CrWindowImg:=rotate_image_from_image(CrWindowImg, 0, 0, 176, 108, 0);
295 end;
297 for j:=0 to 8 do
298 begin
299 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18, true);
300 id:=id+1;
301 end;
303 id:=0;
304 for i:=0 to 3 do
305 for j:=0 to 7 do
306 begin
307 initCell(CELL_TYPE_CREWATIVE_INV, id, 1, -1, 8+j*18, 30+i*18, false);
308 id:=id+1;
309 end;
310 end;
312 procedure DrawCreativeWindow(x, y:integer;);
313 var
314 scroll, i:integer;
315 begin
316 DrawImage(CrWindowImg, x, y);
317 scroll:=getOffset(1);
318 i:=calcScrollBar(70, getImageHeight(CrScrollImg), MAX_CREATIVE_OFFSET, scroll);
319 drawimage(CrScrollImg, x+156, y+30+i);
320 end;
322 procedure FindCeativeUD(n:integer;);
323 var
324 old_cur, offset:integer;
325 begin
326 old_cur:=GetCurIndex(GetCur);
327 offset:=getOffset(1);
329 if n<0 then
330 ShiftCurrentCur(FIND_CELL_UP);
331 if n>0 then
332 ShiftCurrentCur(FIND_CELL_DOWN);
334 if old_cur=GetCurIndex(GetCur) then
335 begin
336 if n<0 then
337 begin
338 offset:=offset-8;
339 if offset<0 then
340 offset:=0;
341 end;
342 else
343 if n>0 then
344 begin
345 offset:=offset+8;
346 if offset>MAX_CREATIVE_OFFSET then
347 offset:=MAX_CREATIVE_OFFSET;
348 end;
349 end;
351 SetOffset(offset, 1);
352 end;
354 procedure CloseCreativeWindow;
355 var
356 nullimg:image;
357 begin
358 if FindCurrentWindowsType=false then
359 begin
360 CrWindowImg:=nullimg;
361 CrScrollImg:=nullimg;
362 end;
363 DelLayer;
364 end;
366 procedure OpenDivWindow;
367 var
368 item, sum:integer;
369 begin
370 debug('Open Div Window');
371 item:=getItem(GetCurIndex(GetCur));
372 sum:=getSum(GetCurIndex(GetCur));
374 NewLayer;
375 SetWindowType(WINDOW_DIV_ITEMS);
377 if FindCurrentWindowsType=false then
378 begin
379 DivWindowImg:=ld_tex('partition.png','/'+sd+'/cavecraft/texturepacks/'+tex_pack+'/','gui/');
380 DivScrollImg:=rotate_image_from_image(DivWindowImg, 0, 50, 15, 12, 0);
381 DivWindowImg:=rotate_image_from_image(DivWindowImg, 0, 0, 88, 50, 0);
382 end;
384 SetWindowInfo(item, WINDOW_INFO_DIV_ITEM);
385 SetWindowInfo(sum, WINDOW_INFO_DIV_SUM1);
386 end;
388 procedure DivScroll(pp:integer);
389 var
390 sum1, sum2:integer;
391 begin
392 sum1:=GetWindowInfo(WINDOW_INFO_DIV_SUM1);
393 sum2:=GetWindowInfo(WINDOW_INFO_DIV_SUM2);
395 sum2:=sum2+pp;
396 if sum2<0 then
397 sum2:=0;
398 if sum2>sum1 then
399 sum2:=sum1;
401 SetWindowInfo(sum2, WINDOW_INFO_DIV_SUM2);
402 end;
404 procedure DrawDivWindow(x, y:integer);
405 var
406 i, item, sum1, sum2:integer;
407 begin
408 DrawImage(DivWindowImg, x, y);
410 item:=GetWindowInfo(WINDOW_INFO_DIV_ITEM);
411 sum1:=GetWindowInfo(WINDOW_INFO_DIV_SUM1);
412 sum2:=GetWindowInfo(WINDOW_INFO_DIV_SUM2);
414 ItemsLogic.Draw(item, (sum1-sum2), x+8, y+8, true);
415 ItemsLogic.Draw(item, sum2, x+64, y+8, true);
417 i:=calcScrollBar(72, getImageWidth(DivScrollImg), sum1, sum2);
419 drawimage(DivScrollImg, x+8+i, y+30);
420 end;
422 procedure CloseDivWindow(return_val:boolean);
423 var
424 res:integer;
425 nullimg:image;
426 begin
427 debug('Close Div Window');
428 res:=GetWindowInfo(WINDOW_INFO_DIV_SUM2);
429 //Если таких окон нет, то чистим память
430 if FindCurrentWindowsType=false then
431 begin
432 DivWindowImg:=nullimg;
433 DivScrollImg:=nullimg;
434 end;
435 DelLayer;
436 SetWindowInfo(res, WINDOW_INFO_DIVRES);
438 if return_val then
439 begin
440 SetCur(CUR_SELECT2);
441 SetCurActive(true, CUR_SELECT2);
442 SetCurIndex(GetCurIndex(CUR_SELECT1), CUR_SELECT2);
443 SetWindowInfo(INV_MODE_SELECT2_DIV, WINDOW_INFO_INVMODE);
444 end;
445 end;
447 procedure OpenPlayerInventory;
448 var
449 i, j, id:integer;
450 begin
451 NewLayer;
452 SetWindowType(WINDOW_PLAYER_INV);
453 SetCurActive(true, CUR_SELECT1);
455 //Если таких окон нет, то загружаем графику
456 if FindCurrentWindowsType=false then
457 begin
458 InvWindowImg:=ld_tex('inventory.png','/'+sd+'/cavecraft/texturepacks/'+tex_pack+'/','gui/');
459 end;
461 for j:=0 to 8 do
462 begin
463 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18, true);
464 id:=id+1;
465 end;
467 for i:=1 to 3 do
468 for j:=0 to 8 do
469 begin
470 initCell(CELL_TYPE_PLAYER_INV, id, 0, -1, 8+j*18, 8+i*18+4, true);
471 id:=id+1;
472 end;
473 end;
475 procedure ClosePlayerInventory;
476 var
477 nullimg:image;
478 begin
479 debug('Close Player Inventory');
480 //Если таких окон нет, то чистим память
481 if FindCurrentWindowsType=false then
482 begin
483 InvWindowImg:=nullimg;
484 end;
485 DelLayer;
486 end;
488 procedure DrawWindows;
489 var
490 max:integer;
491 i, wtype, x, y:integer;
492 begin
493 max:=CellLayer;
494 for i:=0 to max do
495 begin
496 setCellLayer(i);
497 wtype:=GetWindowType;
498 if wtype=WINDOW_PLAYER_INV then
499 begin
500 x:=getWidth/2-getImageWidth(InvWindowImg)/2;
501 y:=getHeight/2-getImageHeight(InvWindowImg)/2;
502 DrawImage(InvWindowImg, x, y);
503 end;
504 else
505 if wtype=WINDOW_DIV_ITEMS then
506 begin
507 x:=getWidth/2-getImageWidth(DivWindowImg)/2;
508 y:=getHeight/2-getImageHeight(DivWindowImg)/2;
509 DrawDivWindow(x, y);
510 end;
511 else
512 if wtype=WINDOW_CEATIVE_INV then
513 begin
514 x:=getWidth/2-getImageWidth(CrWindowImg)/2;
515 y:=getHeight/2-getImageHeight(CrWindowImg)/2;
516 DrawCreativeWindow(x, y);
517 end;
518 else
519 if wtype=WINDOW_CHEST_INV then
520 begin
521 x:=getWidth/2-getImageWidth(ChestWindowImg)/2;
522 y:=getHeight/2-getImageHeight(ChestWindowImg)/2;
523 DrawImage(ChestWindowImg, x, y);
524 end;
525 else
526 if wtype=WINDOW_FASTCRAFT then
527 begin
528 x:=getWidth/2-getImageWidth(fcWindowImg)/2;
529 y:=getHeight/2-getImageHeight(fcWindowImg)/2;
530 DrawFastCraftWindow(x, y);
531 end;
532 else
533 if wtype=WINDOW_FURNACE then
534 begin
535 x:=getWidth/2-getImageWidth(furWindowImg)/2;
536 y:=getHeight/2-getImageHeight(furWindowImg)/2;
537 DrawFurnaceWindow(x, y);
538 end;
539 DrawCellLayer(i, x, y);
540 DrawCursors(i, x, y);
541 end;
542 end;
544 procedure OpSwapItems(Idx1, Idx2:integer);
545 var
546 tmp_item, tmp_sum:integer;
547 begin
548 tmp_item:=getItem(Idx1);
549 tmp_sum:=getSum(Idx1);
551 setItem(getItem(Idx2), Idx1);
552 setSum(getSum(Idx2), Idx1);
554 setItem(tmp_item, Idx2);
555 setSum(tmp_sum, Idx2);
556 end;
558 function OpAddItems(Idx1, Idx2:integer):boolean;
559 var
560 tmp_item1, tmp_sum1:integer;
561 tmp_item2, tmp_sum2:integer;
562 fresult:boolean;
563 begin
564 tmp_item1:=GetItem(Idx1);
565 tmp_sum1:=GetSum(Idx1);
566 tmp_item2:=GetItem(Idx2);
567 tmp_sum2:=GetSum(Idx2);
568 fresult:=true;
570 if (tmp_item1=tmp_item2) and (Idx1<>Idx2) then
571 if tmp_sum2 < Items.GetMaximum(tmp_item2) then
572 begin
573 tmp_sum2:=tmp_sum2+tmp_sum1;
574 tmp_sum1:=0;
576 if tmp_sum2 > GetMaximum(tmp_item2) then
577 begin
578 tmp_sum1 := tmp_sum2 - Items.GetMaximum(tmp_item2);
579 tmp_sum2 := tmp_sum2 - tmp_sum1;
580 end;
582 if tmp_sum1<=0 then
583 tmp_item1:=0;
585 fresult:=false;
586 end;
588 SetItem(tmp_item1, Idx1);
589 SetSum(tmp_sum1, Idx1);
590 SetItem(tmp_item2, Idx2);
591 SetSum(tmp_sum2, Idx2);
592 OpAddItems:=fresult;
593 end;
595 procedure SetActiveCursor(n:integer;);
596 var
597 n2:integer;
598 begin
599 if n=CUR_SELECT1 then
600 n2:=CUR_SELECT2;
601 else
602 n2:=CUR_SELECT1;
604 SetCur(n);
605 SetCurActive(true, n);
606 SetCurIndex(GetCurIndex(n2), n);
607 end;
609 procedure decItem(curidx:integer);
610 begin
611 SetSum(GetSum(curidx)-1, curidx);
612 fixNullCell(curidx);
613 end;
615 procedure HandlerSelect2Div;
616 var
617 idx1, idx2:integer;
618 begin
619 idx1:=GetCurIndex(CUR_SELECT1);
620 idx2:=GetCurIndex(CUR_SELECT2);
622 if GetItem(idx2)=0 then
623 begin
624 SetItem(GetItem(idx1), idx2);
625 SetSum(GetWindowInfo(WINDOW_INFO_DIVRES), idx2);
627 SetSum(GetSum(idx1)-GetSum(idx2), idx1);
628 fixNullCell(idx1);
629 end;
630 end;
632 procedure Select;
633 var
634 mode:integer;
635 begin
636 mode:=GetWindowInfo(WINDOW_INFO_INVMODE);
638 //Нажали кнопку - выбрали первый элемент
639 if mode=INV_MODE_SELECT1 then
640 begin
641 //Активируем второй курсор и ставим его над первым курсором
642 SetActiveCursor(CUR_SELECT2);
643 SetWindowInfo(INV_MODE_SELECT2, WINDOW_INFO_INVMODE);
644 end;
645 else
646 //Нажали кнопку - выбрали второй элемент, произвели сложение и переходим к режиму выбора первого элемента.
647 if mode=INV_MODE_SELECT2 then
648 begin
649 //Складывваем предметы курсора 1 и курсора 2
650 if OpAddItems(GetCurIndex(CUR_SELECT1), GetCurIndex(CUR_SELECT2)) then
651 OpSwapItems(GetCurIndex(CUR_SELECT1), GetCurIndex(CUR_SELECT2));
652 //Передаём управление первому курсору
653 SetActiveCursor(CUR_SELECT1);
654 SetCurActive(false, CUR_SELECT2);
655 SetWindowInfo(INV_MODE_SELECT1, WINDOW_INFO_INVMODE);
656 end;
657 else
658 if mode=INV_MODE_SELECT2_DIV then
659 begin
660 HandlerSelect2Div;
661 SetActiveCursor(CUR_SELECT1);
662 SetCurActive(false, CUR_SELECT2);
663 SetWindowInfo(INV_MODE_SELECT1, WINDOW_INFO_INVMODE);
664 end;
665 end;
667 function CanDivItem:boolean;
668 begin
669 if Items.IsDividable(getItem(GetCurIndex(GetCur))) then
670 if (GetCur=CUR_SELECT1) and (getSum(GetCurIndex(GetCur))>0) then
671 CanDivItem:=true;
672 end;
674 procedure StdCellKeyHandler;
675 begin
676 if clickedKey(KEY_WIN_SELECT) then
677 SetTimer(1000, T_KEY_DIVITEM);
679 if pressedKey(KEY_WIN_SELECT) then
680 begin
681 if GetTimer(T_KEY_DIVITEM)=TIMER_OK then
682 begin
683 if CanDivItem then
684 OpenDivWindow;
685 ResetTimer(T_KEY_DIVITEM);
686 end;
687 end;
688 else
689 begin
690 if GetTimer(T_KEY_DIVITEM)>TIMER_OK then
691 begin
692 Select;
693 ResetTimer(T_KEY_DIVITEM);
694 end;
695 end;
696 end;
698 procedure keyDrop;
699 var
700 item, curidx:integer;
701 begin
702 curidx:=GetCurIndex(GetCur);
703 item:=getItem(curidx);
705 if clickedKey(KEY_WIN_DROP) then
706 SetTimer(1000, T_KEY_DROPITEM);
708 if pressedKey(KEY_WIN_DROP) then
709 begin
710 if GetTimer(T_KEY_DROPITEM)=TIMER_OK then
711 begin
712 player.dropItem(item, GetSum(curidx));
713 SetItem(0, curidx);
714 SetSum(0, curidx);
715 ResetTimer(T_KEY_DROPITEM);
716 end;
717 end;
718 else
719 begin
720 if GetTimer(T_KEY_DROPITEM)>TIMER_OK then
721 begin
722 if Items.IsDividable(item) then
723 begin
724 player.dropItem(item, 1);
725 decItem(curidx);
726 end;
727 ResetTimer(T_KEY_DROPITEM);
728 end;
729 end;
730 end;
732 function WindowKeyHanler:boolean;
733 var
734 WinType:integer;
735 craftid, mode:integer;
736 begin
737 WinType:=GetWindowType;
738 if WinType=WINDOW_PLAYER_INV then
739 begin
740 if clickedKey(KEY_WIN_UP) then
741 ShiftCurrentCur(FIND_CELL_UP);
742 if clickedKey(KEY_WIN_DOWN) then
743 ShiftCurrentCur(FIND_CELL_DOWN);
744 if clickedKey(KEY_WIN_LEFT) then
745 ShiftCurrentCur(FIND_CELL_LEFT);
746 if clickedKey(KEY_WIN_RIGHT) then
747 ShiftCurrentCur(FIND_CELL_RIGHT);
749 StdCellKeyHandler;
750 keyDrop;
752 if clickedKey(KEY_WIN_EXIT) then
753 ClosePlayerInventory;
755 if clickedKey(KEY_WIN_ALT) then
756 begin
757 ClosePlayerInventory;
758 OpenFastCraftWindow(0);
759 end;
760 end;
761 else
762 if WinType=WINDOW_DIV_ITEMS then
763 begin
764 if clickedKey(KEY_WIN_LEFT) then
765 DivScroll(-1);
766 if clickedKey(KEY_WIN_RIGHT) then
767 DivScroll(1);
769 if clickedKey(KEY_WIN_SELECT) then
770 CloseDivWindow(true);
772 if clickedKey(KEY_WIN_EXIT) then
773 CloseDivWindow(false);
774 end;
775 else
776 if WinType=WINDOW_CEATIVE_INV then
777 begin
778 if clickedKey(KEY_WIN_UP) then
779 FindCeativeUD(-1);
780 if clickedKey(KEY_WIN_DOWN) then
781 FindCeativeUD(1);
782 if clickedKey(KEY_WIN_LEFT) then
783 ShiftCurrentCur(FIND_CELL_LEFT);
784 if clickedKey(KEY_WIN_RIGHT) then
785 ShiftCurrentCur(FIND_CELL_RIGHT);
787 StdCellKeyHandler;
788 keyDrop;
790 if clickedKey(KEY_WIN_EXIT) then
791 CloseCreativeWindow;
792 end;
793 else
794 if WinType=WINDOW_CHEST_INV then
795 begin
796 if clickedKey(KEY_WIN_UP) then
797 ShiftCurrentCur(FIND_CELL_UP);
798 if clickedKey(KEY_WIN_DOWN) then
799 ShiftCurrentCur(FIND_CELL_DOWN);
800 if clickedKey(KEY_WIN_LEFT) then
801 ShiftCurrentCur(FIND_CELL_LEFT);
802 if clickedKey(KEY_WIN_RIGHT) then
803 ShiftCurrentCur(FIND_CELL_RIGHT);
805 StdCellKeyHandler;
806 keyDrop;
808 if clickedKey(KEY_WIN_EXIT) then
809 CloseChestWindow;
810 end;
811 else
812 if WinType=WINDOW_FASTCRAFT then
813 begin
814 if clickedKey(KEY_WIN_UP) then
815 FindFastCraftUD(-1);
816 if clickedKey(KEY_WIN_DOWN) then
817 FindFastCraftUD(1);
818 if clickedKey(KEY_WIN_LEFT) then
819 ShiftCurrentCur(FIND_CELL_LEFT);
820 if clickedKey(KEY_WIN_RIGHT) then
821 ShiftCurrentCur(FIND_CELL_RIGHT);
823 if clickedKey(KEY_WIN_SELECT) then
824 begin
825 mode:=GetWindowInfo(WINDOW_INFO_FC_MODE);
826 craftid:=getCellID(GetCurIndex(GetCur))+GetOffset(0);
827 createCraft(craftid, mode);
828 end;
830 if clickedKey(KEY_WIN_ALT) then
831 begin
832 CloseChestWindow;
833 OpenPlayerInventory;
834 end;
836 if clickedKey(KEY_WIN_EXIT) then
837 CloseChestWindow;
838 end;
839 else
840 if WinType=WINDOW_FURNACE then
841 begin
842 if clickedKey(KEY_WIN_UP) then
843 ShiftCurrentCur(FIND_CELL_UP);
844 if clickedKey(KEY_WIN_DOWN) then
845 ShiftCurrentCur(FIND_CELL_DOWN);
846 if clickedKey(KEY_WIN_LEFT) then
847 ShiftCurrentCur(FIND_CELL_LEFT);
848 if clickedKey(KEY_WIN_RIGHT) then
849 ShiftCurrentCur(FIND_CELL_RIGHT);
851 StdCellKeyHandler;
852 keyDrop;
854 if clickedKey(KEY_WIN_EXIT) then
855 CloseFurnaceWindow;
856 end;
857 else
858 WindowKeyHanler:=true;
859 end;
861 end.