DEADSOFTWARE

Rewrited module for particles
[cavecraft.git] / src / keyboard.mpsrc
1 unit keyboard;
3 interface
4 const
5 MAX_KEY_TYPES=27;
6 MAX_KEY_BIND=3;
8 KEY_FM_UP=0;
9 KEY_FM_DOWN=1;
10 KEY_FM_SELECT=2;
12 KEY_MENU_UP=3;
13 KEY_MENU_DOWN=4;
14 KEY_MENU_LEFT=5;
15 KEY_MENU_RIGHT=6;
16 KEY_MENU_SELECT=7;
18 KEY_FASTINV_PREV=8;
19 KEY_FASTINV_NEXT=9;
21 KEY_CHAT=10;
23 KEY_PLR_OPENINV=11;
24 KEY_PLR_EDITMODE=12;
25 KEY_PLR_USE=13;
26 KEY_PLR_ATTACK=14;
28 KEY_PLR_UP=15;
29 KEY_PLR_DOWN=16;
30 KEY_PLR_LEFT=17;
31 KEY_PLR_RIGHT=18;
33 KEY_MENU=19;
35 KEY_WIN_UP=20;
36 KEY_WIN_DOWN=21;
37 KEY_WIN_LEFT=22;
38 KEY_WIN_RIGHT=23;
39 KEY_WIN_SELECT=24;
40 KEY_WIN_ALT=25;
41 KEY_WIN_DROP=26;
42 KEY_WIN_EXIT=27;
45 var
46 s_cl:boolean;
47 load_key_tex:integer;
48 scrMulX, scrMulY:integer;
50 function touchscreen:boolean;
51 procedure init_touch;
52 function senClicked(ix,iy,xx,yy:integer):boolean;
53 function senPressed(ix,iy,xx,yy:integer):boolean;
54 //function get_key_clicked:integer;
55 //function get_key_pressed:integer;
56 procedure draw_virtual_keys;
58 procedure bindKey(keytype, id, keycode:integer);
59 function clickedKey(keytype:integer):boolean;
60 function pressedKey(keytype:integer):boolean;
61 procedure updateKeys;
63 procedure resetVirtualKeyboard(i:integer);
64 procedure bindVKey(i, keycode, x, y:integer);
65 procedure setVkeyImg(img:image; i:integer);
67 implementation
68 uses sensor,vars,canvas, func;
69 var
70 key_bind: array [0..MAX_KEY_BIND, 0..MAX_KEY_TYPES] of integer;
71 clicked_key, pressed_key:integer;
73 v_keycode: array [0..0] of integer;
74 v_keyx: array [0..0] of integer;
75 v_keyy: array [0..0] of integer;
76 v_keyimg: array [0..0] of image;
77 v_max:integer;
79 procedure resetVirtualKeyboard(i:integer);
80 var
81 nullimg:image;
82 v:integer;
83 begin
84 v_max:=i;
85 i:=i+1;
87 bytecode
88 iload 0;
89 newarray 10;
90 putstatic field 'keyboard', 'v_keycode', '[I';
91 end;
92 bytecode
93 iload 0;
94 newarray 10;
95 putstatic field 'keyboard', 'v_keyx', '[I';
96 end;
97 bytecode
98 iload 0;
99 newarray 10;
100 putstatic field 'keyboard', 'v_keyy', '[I';
101 end;
102 bytecode
103 iload 0;
104 multianewarray class '[Ljavax/microedition/lcdui/Image;', 1;
105 putstatic field 'keyboard', 'v_keyimg', '[Ljavax/microedition/lcdui/Image;';
106 end;
107 for v:=0 to v_max do
108 v_keyimg[v]:=nullimg;
109 end;
111 procedure setVkeyImg(img:image; i:integer);
112 begin
113 v_keyimg[i]:=img;
114 end;
116 procedure bindVKey(i, keycode, x, y:integer;);
117 begin
118 v_keycode[i]:=keycode;
119 v_keyx[i]:=x;
120 v_keyy[i]:=y;
121 end;
123 procedure bindKey(keytype, id, keycode:integer);
124 begin
125 key_bind[id, keytype]:=keycode;
126 end;
128 function clickedKey(keytype:integer):boolean;
129 var
130 i:integer;
131 begin
132 for i:=0 to MAX_KEY_BIND do
133 if (key_bind[i, keytype]=clicked_key) and (key_bind[i, keytype]<>0) then
134 begin
135 clickedKey:=true;
136 exit;
137 end;
138 end;
140 function pressedKey(keytype:integer):boolean;
141 var
142 i:integer;
143 begin
144 for i:=0 to MAX_KEY_BIND do
145 if (key_bind[i, keytype]=pressed_key) and (key_bind[i, keytype]<>0) then
146 begin
147 pressedKey:=true;
148 exit;
149 end;
150 end;
152 function touchscreen:boolean;
153 begin
154 setcolor(0, 0, 0);
155 fillrect(0, 0, getWidth, getHeight);
156 drawfonttext('Press 5', getWidth/2-(length('Press 5')*8)/2, getHeight-16);
157 drawfonttext('or touch the screen.', getWidth/2-(length('or touch the screen.')*8)/2, getHeight-8);
158 repaint;
159 delay(1);
160 repeat
161 updateKeys;
162 if clickedKey(KEY_MENU_SELECT) then
163 begin
164 touchscreen:=false;
165 exit;
166 end;
167 if pointer_state=1 then
168 begin
169 touchscreen:=true;
170 exit;
171 end;
172 forever;
173 end;
175 procedure init_touch;
176 begin
177 sensor.init;
178 end;
180 function senClicked(ix,iy,xx,yy:integer):boolean;
181 begin
182 if (pointer_state=1) and (s_cl=false) then
183 if (pointer_pressed_x>ix*scrMulX) and (pointer_pressed_y>iy*scrMulY) and (pointer_pressed_x<(ix+xx)*scrMulX) and (pointer_pressed_y<(iy+yy)*scrMulY) then
184 begin
185 s_cl:=true;
186 senClicked:=true;
187 end;
188 end;
190 function senPressed(ix,iy,xx,yy:integer):boolean;
191 begin
192 if (pointer_state=1) then
193 if (pointer_pressed_x>ix*scrMulX) and (pointer_pressed_y>iy*scrMulY) and (pointer_pressed_x<(ix+xx)*scrMulX) and (pointer_pressed_y<(iy+yy)*scrMulY) then
194 senPressed:=true;
195 end;
197 procedure updateKeys;
198 var
199 i:integer;
200 begin
201 clicked_key:=getKeyClicked;
202 pressed_key:=getKeyPressed;
204 if pointer_state=0 then
205 s_cl:=false;
207 for i:=0 to v_max do
208 begin
209 if senClicked(v_keyx[i], v_keyy[i], getImageWidth(v_keyimg[i]), getImageHeight(v_keyimg[i])) then
210 clicked_key:=v_keycode[i];
211 if senPressed(v_keyx[i], v_keyy[i], getImageWidth(v_keyimg[i]), getImageHeight(v_keyimg[i])) then
212 pressed_key:=v_keycode[i];
213 end;
214 end;
216 procedure draw_virtual_keys;
217 var
218 i:integer;
219 begin
220 if load_key_tex=1 then
221 for i:=0 to v_max do
222 drawImage(v_keyimg[i], v_keyx[i], v_keyy[i]);
223 end;
225 initialization
226 v_max:=-1;
227 end.