author | Wuzzy <Wuzzy2@mail.ru> |
Mon, 10 Dec 2018 08:20:33 +0100 | |
changeset 14408 | 8af01d65ccda |
parent 14310 | 575baea4108b |
child 14543 | 1dab5d92aca7 |
permissions | -rw-r--r-- |
5621 | 1 |
(* |
2 |
* Hedgewars, a free turn based strategy game |
|
6700 | 3 |
* Copyright (c) 2012 Richard Deurwaarder <xeli@xelification.com> |
5621 | 4 |
* |
5 |
* This program is free software; you can redistribute it and/or modify |
|
6 |
* it under the terms of the GNU General Public License as published by |
|
7 |
* the Free Software Foundation; version 2 of the License |
|
8 |
* |
|
9 |
* This program is distributed in the hope that it will be useful, |
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
12 |
* GNU General Public License for more details. |
|
13 |
* |
|
14 |
* You should have received a copy of the GNU General Public License |
|
15 |
* along with this program; if not, write to the Free Software |
|
10108
c68cf030eded
update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents:
9521
diff
changeset
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
5621 | 17 |
*) |
18 |
||
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
19 |
{$INCLUDE "options.inc"} |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
20 |
|
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
21 |
unit uTouch; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
22 |
|
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
23 |
interface |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
24 |
|
11826 | 25 |
uses SysUtils, uUtils, uConsole, uVariables, SDLh, uFloat, uConsts, uCommands, GLUnit, uTypes, uCaptions, uAmmos, uWorld; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
26 |
|
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
27 |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
28 |
procedure initModule; |
7850 | 29 |
procedure freeModule; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
30 |
|
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
31 |
procedure ProcessTouch; |
6961
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
32 |
procedure NewTurnBeginning; |
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
33 |
|
9379 | 34 |
procedure onTouchDown(x, y: Single; pointerId: TSDL_FingerId); |
35 |
procedure onTouchMotion(x, y, dx, dy: Single; pointerId: TSDL_FingerId); |
|
36 |
procedure onTouchUp(x, y: Single; pointerId: TSDL_FingerId); |
|
37 |
||
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
38 |
function convertToCursorX(x: LongInt): LongInt; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
39 |
function convertToCursorY(y: LongInt): LongInt; |
9379 | 40 |
|
6693 | 41 |
function addFinger(x,y: Longword; id: TSDL_FingerId): PTouch_Data; |
42 |
function updateFinger(x,y,dx,dy: Longword; id: TSDL_FingerId): PTouch_Data; |
|
43 |
procedure deleteFinger(id: TSDL_FingerId); |
|
9379 | 44 |
|
6693 | 45 |
procedure onTouchClick(finger: TTouch_Data); |
46 |
procedure onTouchDoubleClick(finger: TTouch_Data); |
|
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
47 |
procedure onTouchLongClick(finger: TTouch_Data); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
48 |
|
6693 | 49 |
function findFinger(id: TSDL_FingerId): PTouch_Data; |
50 |
procedure aim(finger: TTouch_Data); |
|
51 |
function isOnCrosshair(finger: TTouch_Data): boolean; |
|
52 |
function isOnCurrentHog(finger: TTouch_Data): boolean; |
|
6702 | 53 |
procedure convertToWorldCoord(var x,y: LongInt; finger: TTouch_Data); |
54 |
procedure convertToFingerCoord(var x,y: LongInt; oldX, oldY: LongInt); |
|
6693 | 55 |
function fingerHasMoved(finger: TTouch_Data): boolean; |
6702 | 56 |
function calculateDelta(finger1, finger2: TTouch_Data): LongInt; |
6693 | 57 |
function getSecondFinger(finger: TTouch_Data): PTouch_Data; |
58 |
function isOnRect(rect: TSDL_Rect; finger: TTouch_Data): boolean; |
|
6703 | 59 |
function isOnRect(x,y,w,h: LongInt; finger: TTouch_Data): boolean; |
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
60 |
function isOnWidget(widget: TOnScreenWidget; finger: TTouch_Data): boolean; |
6693 | 61 |
procedure printFinger(finger: TTouch_Data); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
62 |
implementation |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
63 |
|
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
64 |
const |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
65 |
clickTime = 200; |
11088
378882cc9148
- Fix for uTouch.pas:365: 34: Identifier not found "nilFingerId"
antonc27 <antonc27@mail.ru>
parents:
10108
diff
changeset
|
66 |
nilFingerId = High(TSDL_FingerId); |
7185
92a045156255
Android: first attempt at using the density call from java
Xeli
parents:
7105
diff
changeset
|
67 |
baseRectSize = 96; |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
68 |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
69 |
var |
7185
92a045156255
Android: first attempt at using the density call from java
Xeli
parents:
7105
diff
changeset
|
70 |
rectSize, halfRectSize: LongInt; |
92a045156255
Android: first attempt at using the density call from java
Xeli
parents:
7105
diff
changeset
|
71 |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
72 |
pointerCount : Longword; |
6693 | 73 |
fingers: array of TTouch_Data; |
5605
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
74 |
moveCursor : boolean; |
5617
88f43becefe3
added low jump, you can low-jump by double tapping the right or left side of the screen
Xeli
parents:
5615
diff
changeset
|
75 |
invertCursor : boolean; |
88f43becefe3
added low jump, you can low-jump by double tapping the right or left side of the screen
Xeli
parents:
5615
diff
changeset
|
76 |
|
8330 | 77 |
//Pinch to zoom |
6702 | 78 |
pinchSize : LongInt; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
79 |
baseZoomValue: GLFloat; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
80 |
|
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
81 |
//aiming |
6703 | 82 |
aimingCrosshair: boolean; |
8330 | 83 |
aimingUp, aimingDown: boolean; |
5605
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
84 |
targetAngle: LongInt; |
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
85 |
|
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
86 |
buttonsDown: Longword; |
6957 | 87 |
targetting, targetted: boolean; //true when targetting an airstrike or the like |
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
88 |
|
9379 | 89 |
procedure onTouchDown(x, y: Single; pointerId: TSDL_FingerId); |
8330 | 90 |
var |
6693 | 91 |
finger: PTouch_Data; |
9379 | 92 |
xr, yr: LongWord; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
93 |
begin |
9379 | 94 |
xr:= round(x * cScreenWidth); |
95 |
yr:= round(y * cScreenHeight); |
|
96 |
||
97 |
finger:= addFinger(xr, yr, pointerId); |
|
6703 | 98 |
|
99 |
inc(buttonsDown);//inc buttonsDown, if we don't see a button down we'll dec it |
|
100 |
||
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
101 |
if isOnCrosshair(finger^) then |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
102 |
begin |
6703 | 103 |
aimingCrosshair:= true; |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
104 |
aim(finger^); |
6703 | 105 |
moveCursor:= false; |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
106 |
exit; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
107 |
end; |
5605
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
108 |
|
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
109 |
if isOnWidget(fireButton, finger^) then |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
110 |
begin |
6957 | 111 |
ParseTeamCommand('+attack'); |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
112 |
moveCursor:= false; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
113 |
finger^.pressedWidget:= @fireButton; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
114 |
exit; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
115 |
end; |
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
116 |
if isOnWidget(arrowLeft, finger^) then |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
117 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
118 |
ParseTeamCommand('+left'); |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
119 |
moveCursor:= false; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
120 |
finger^.pressedWidget:= @arrowLeft; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
121 |
exit; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
122 |
end; |
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
123 |
if isOnWidget(arrowRight, finger^) then |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
124 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
125 |
ParseTeamCommand('+right'); |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
126 |
moveCursor:= false; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
127 |
finger^.pressedWidget:= @arrowRight; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
128 |
exit; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
129 |
end; |
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
130 |
if isOnWidget(arrowUp, finger^) then |
6806
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
131 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
132 |
ParseTeamCommand('+up'); |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
133 |
aimingUp:= true; |
6806
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
134 |
moveCursor:= false; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
135 |
finger^.pressedWidget:= @arrowUp; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
136 |
exit; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
137 |
end; |
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
138 |
if isOnWidget(arrowDown, finger^) then |
6806
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
139 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
140 |
ParseTeamCommand('+down'); |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
141 |
aimingDown:= true; |
6806
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
142 |
moveCursor:= false; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
143 |
finger^.pressedWidget:= @arrowDown; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
144 |
exit; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
145 |
end; |
6640 | 146 |
|
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
147 |
if isOnWidget(pauseButton, finger^) then |
6806
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
148 |
begin |
14309
055eae933482
Touch: Parse pause command when tapping pause button instead of toggling pause directly
Wuzzy <Wuzzy2@mail.ru>
parents:
13647
diff
changeset
|
149 |
ParseTeamCommand('pause'); |
6806
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
150 |
moveCursor:= false; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
151 |
finger^.pressedWidget:= @pauseButton; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
152 |
exit; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
153 |
end; |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
154 |
|
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
155 |
if isOnWidget(utilityWidget, finger^) then |
cdfb6c7099e5
first part of the utilitywidget (grenade timer/swap hogs) code
Xeli
parents:
6723
diff
changeset
|
156 |
begin |
6957 | 157 |
finger^.pressedWidget:= @utilityWidget; |
158 |
moveCursor:= false; |
|
6956 | 159 |
if(CurrentHedgehog <> nil) then |
160 |
begin |
|
161 |
if Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_Timerable <> 0 then |
|
162 |
ParseTeamCommand('/timer ' + inttostr((GetCurAmmoEntry(CurrentHedgeHog^)^.Timer div 1000) mod 5 + 1)); |
|
163 |
end; |
|
6957 | 164 |
exit; |
8330 | 165 |
end; |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
166 |
dec(buttonsDown);//no buttonsDown, undo the inc() above |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
167 |
if buttonsDown = 0 then |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
168 |
begin |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
169 |
moveCursor:= true; |
6951
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
170 |
case pointerCount of |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
171 |
1: |
6957 | 172 |
targetting:= not(targetted) and (CurrentHedgehog <> nil) and (Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0); |
6951
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
173 |
2: |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
174 |
begin |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
175 |
moveCursor:= false; |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
176 |
pinchSize := calculateDelta(finger^, getSecondFinger(finger^)^); |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
177 |
baseZoomValue := ZoomValue |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
178 |
end; |
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
179 |
end; |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
180 |
end; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
181 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
182 |
|
9379 | 183 |
procedure onTouchMotion(x, y, dx, dy: Single; pointerId: TSDL_FingerId); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
184 |
var |
6693 | 185 |
finger, secondFinger: PTouch_Data; |
9379 | 186 |
currentPinchDelta, zoom : Single; |
187 |
xr, yr, dxr, dyr: LongWord; |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
188 |
begin |
9379 | 189 |
xr:= round(x * cScreenWidth); |
190 |
yr:= round(y * cScreenHeight); |
|
191 |
dxr:= round(dx * cScreenWidth); |
|
192 |
dyr:= round(dy * cScreenHeight); |
|
193 |
||
194 |
finger:= updateFinger(xr, yr, dxr, dyr, pointerId); |
|
195 |
if finger = nil then |
|
196 |
exit; |
|
5733
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
197 |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
198 |
if moveCursor then |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
199 |
begin |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
200 |
if invertCursor then |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
201 |
begin |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
202 |
CursorPoint.X := CursorPoint.X - finger^.dx; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
203 |
CursorPoint.Y := CursorPoint.Y + finger^.dy; |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
204 |
end |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
205 |
else |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
206 |
begin |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
207 |
CursorPoint.X := CursorPoint.X + finger^.dx; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
208 |
CursorPoint.Y := CursorPoint.Y - finger^.dy; |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
209 |
end; |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
210 |
exit //todo change into switch rather than ugly ifs |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
211 |
end; |
8330 | 212 |
|
213 |
if aimingCrosshair then |
|
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
214 |
begin |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
215 |
aim(finger^); |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
216 |
exit |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
217 |
end; |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
218 |
|
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
219 |
if (buttonsDown = 0) and (pointerCount = 2) then |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
220 |
begin |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
221 |
secondFinger := getSecondFinger(finger^); |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
222 |
currentPinchDelta := calculateDelta(finger^, secondFinger^) - pinchSize; |
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
223 |
zoom := currentPinchDelta/cScreenWidth; |
6702 | 224 |
ZoomValue := baseZoomValue - (zoom * cMinMaxZoomLevelDelta); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
225 |
if ZoomValue < cMaxZoomLevel then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
226 |
ZoomValue := cMaxZoomLevel; |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
227 |
if ZoomValue > cMinZoomLevel then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
228 |
ZoomValue := cMinZoomLevel; |
5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5733
diff
changeset
|
229 |
end; |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
230 |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
231 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
232 |
|
9379 | 233 |
procedure onTouchUp(x,y: Single; pointerId: TSDL_FingerId); |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
234 |
var |
6693 | 235 |
finger: PTouch_Data; |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
236 |
widget: POnScreenWidget; |
9379 | 237 |
xr, yr: LongWord; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
238 |
begin |
9379 | 239 |
xr:= round(x * cScreenWidth); |
240 |
yr:= round(y * cScreenHeight); |
|
241 |
||
242 |
finger:= updateFinger(xr, yr, 0, 0, pointerId); |
|
243 |
if finger = nil then |
|
244 |
exit; |
|
245 |
||
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
246 |
//Check for onTouchClick event |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
247 |
if not(fingerHasMoved(finger^)) then |
6950
f34ff54b0cbd
-Fixed FingerHasMoved function, still might need a little tweaking
Xeli
parents:
6949
diff
changeset
|
248 |
begin |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
249 |
if (RealTicks - finger^.timeSinceDown) < clickTime then |
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
250 |
onTouchClick(finger^) |
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
251 |
else |
9379 | 252 |
onTouchLongClick(finger^); |
6950
f34ff54b0cbd
-Fixed FingerHasMoved function, still might need a little tweaking
Xeli
parents:
6949
diff
changeset
|
253 |
end; |
5605
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
254 |
|
6703 | 255 |
if aimingCrosshair then |
256 |
begin |
|
257 |
aimingCrosshair:= false; |
|
7022 | 258 |
ParseTeamCommand('-up'); |
259 |
ParseTeamCommand('-down'); |
|
6703 | 260 |
dec(buttonsDown); |
261 |
end; |
|
262 |
||
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
263 |
widget:= finger^.pressedWidget; |
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
264 |
if (buttonsDown > 0) and (widget <> nil) then |
5605
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
265 |
begin |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
266 |
dec(buttonsDown); |
8330 | 267 |
|
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
268 |
if widget = @arrowLeft then |
6949
615cc50903c8
remove last boolean keys references and using only ParseCommand in uTouch now
Xeli
parents:
6919
diff
changeset
|
269 |
ParseTeamCommand('-left'); |
8330 | 270 |
|
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
271 |
if widget = @arrowRight then |
6949
615cc50903c8
remove last boolean keys references and using only ParseCommand in uTouch now
Xeli
parents:
6919
diff
changeset
|
272 |
ParseTeamCommand('-right'); |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
273 |
|
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
274 |
if widget = @arrowUp then |
6949
615cc50903c8
remove last boolean keys references and using only ParseCommand in uTouch now
Xeli
parents:
6919
diff
changeset
|
275 |
ParseTeamCommand('-up'); |
6640 | 276 |
|
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
277 |
if widget = @arrowDown then |
6949
615cc50903c8
remove last boolean keys references and using only ParseCommand in uTouch now
Xeli
parents:
6919
diff
changeset
|
278 |
ParseTeamCommand('-down'); |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
279 |
|
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
280 |
if widget = @fireButton then |
6957 | 281 |
ParseTeamCommand('-attack'); |
8330 | 282 |
|
6957 | 283 |
if widget = @utilityWidget then |
6962 | 284 |
if (CurrentHedgehog <> nil)then |
285 |
if(Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget <> 0)then |
|
286 |
begin |
|
287 |
ParseTeamCommand('put'); |
|
288 |
targetted:= true; |
|
289 |
end |
|
7105 | 290 |
else if (CurAmmoGear <> nil) and (CurAmmoGear^.AmmoType = amSwitch) then |
6962 | 291 |
ParseTeamCommand('switch') |
292 |
else WriteLnToConsole(inttostr(ord(Ammoz[CurrentHedgehog^.CurAmmoType].NameId)) + ' ' + inttostr(ord(sidSwitch))); |
|
6640 | 293 |
end; |
8330 | 294 |
|
6951
a37e470c8694
- changed targetting, to launch an airstrike move the cursor/pointer to a location and then press the firebutton
Xeli
parents:
6950
diff
changeset
|
295 |
if targetting then |
13647
3d14950641a4
Refactor text color variable names, export 2 color values to Lua
Wuzzy <Wuzzy2@mail.ru>
parents:
11826
diff
changeset
|
296 |
AddCaption(trmsg[sidPressTarget], capcolDefault, capgrpAmmoInfo); |
8330 | 297 |
|
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
298 |
deleteFinger(pointerId); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
299 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
300 |
|
6693 | 301 |
procedure onTouchDoubleClick(finger: TTouch_Data); |
5617
88f43becefe3
added low jump, you can low-jump by double tapping the right or left side of the screen
Xeli
parents:
5615
diff
changeset
|
302 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
303 |
finger := finger;//avoid compiler hint |
5617
88f43becefe3
added low jump, you can low-jump by double tapping the right or left side of the screen
Xeli
parents:
5615
diff
changeset
|
304 |
end; |
88f43becefe3
added low jump, you can low-jump by double tapping the right or left side of the screen
Xeli
parents:
5615
diff
changeset
|
305 |
|
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
306 |
procedure onTouchLongClick(finger: TTouch_Data); |
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
307 |
begin |
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
308 |
if isOnWidget(jumpWidget, finger) then |
6950
f34ff54b0cbd
-Fixed FingerHasMoved function, still might need a little tweaking
Xeli
parents:
6949
diff
changeset
|
309 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
310 |
ParseTeamCommand('ljump'); |
6950
f34ff54b0cbd
-Fixed FingerHasMoved function, still might need a little tweaking
Xeli
parents:
6949
diff
changeset
|
311 |
exit; |
f34ff54b0cbd
-Fixed FingerHasMoved function, still might need a little tweaking
Xeli
parents:
6949
diff
changeset
|
312 |
end; |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
313 |
end; |
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
314 |
|
6693 | 315 |
procedure onTouchClick(finger: TTouch_Data); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
316 |
begin |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
317 |
|
6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
318 |
if bShowAmmoMenu then |
8330 | 319 |
begin |
6683
75a1d84ac606
small refactoring to touch screen buttons, use a record to store values, added 'offset' fields to adjust active button area
koda
parents:
6676
diff
changeset
|
320 |
if isOnRect(AmmoRect, finger) then |
6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
321 |
begin |
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
322 |
CursorPoint.X:= finger.x; |
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
323 |
CursorPoint.Y:= finger.y; |
8330 | 324 |
ParseTeamCommand('put'); |
6648
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
325 |
end |
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
326 |
else |
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
327 |
bShowAmmoMenu:= false; |
025473a2c420
prevent the cursor from being shown on the mobile version, and close the menu on tap when the tap is not on the ammo menu
Xeli
parents:
6640
diff
changeset
|
328 |
exit; |
5589 | 329 |
end; |
330 |
||
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
331 |
if isOnCurrentHog(finger) or isOnWidget(AMWidget, finger) then |
5595 | 332 |
begin |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
333 |
bShowAmmoMenu := true; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
334 |
exit; |
5595 | 335 |
end; |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
336 |
|
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
337 |
if isOnWidget(jumpWidget, finger) then |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
338 |
begin |
8330 | 339 |
ParseTeamCommand('hjump'); |
6712
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
340 |
exit; |
c582869fbe7f
changed jumping, on x button tap is high jump, on longpress + release is low jump (read: it only does a low jump when you release)
Xeli
parents:
6707
diff
changeset
|
341 |
end; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
342 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
343 |
|
6693 | 344 |
function addFinger(x,y: Longword; id: TSDL_FingerId): PTouch_Data; |
8330 | 345 |
var |
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
346 |
xCursor, yCursor, index : LongInt; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
347 |
begin |
11804 | 348 |
// check array size |
349 |
// note: pointerCount will be incremented later, |
|
350 |
// so at this point it's the index of the new entry |
|
351 |
if Length(fingers) <= pointerCount then |
|
11785 | 352 |
begin |
353 |
setLength(fingers, Length(fingers)*2); |
|
354 |
for index := Length(fingers) div 2 to (Length(fingers)-1) do |
|
355 |
fingers[index].id := nilFingerId; |
|
356 |
end; |
|
8330 | 357 |
|
11785 | 358 |
xCursor := convertToCursorX(x); |
359 |
yCursor := convertToCursorY(y); |
|
8330 | 360 |
|
11785 | 361 |
//on removing fingers, all fingers are moved to the left |
362 |
//with dynamic arrays being zero based, the new position of the finger is the old pointerCount |
|
363 |
fingers[pointerCount].id := id; |
|
364 |
fingers[pointerCount].historicalX := xCursor; |
|
365 |
fingers[pointerCount].historicalY := yCursor; |
|
366 |
fingers[pointerCount].x := xCursor; |
|
367 |
fingers[pointerCount].y := yCursor; |
|
368 |
fingers[pointerCount].dx := 0; |
|
369 |
fingers[pointerCount].dy := 0; |
|
370 |
fingers[pointerCount].timeSinceDown:= RealTicks; |
|
371 |
fingers[pointerCount].pressedWidget:= nil; |
|
8330 | 372 |
|
11785 | 373 |
addFinger:= @fingers[pointerCount]; |
374 |
inc(pointerCount); |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
375 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
376 |
|
9379 | 377 |
function updateFinger(x, y, dx, dy: Longword; id: TSDL_FingerId): PTouch_Data; |
378 |
var finger : PTouch_Data; |
|
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
379 |
begin |
11785 | 380 |
finger:= findFinger(id); |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
381 |
|
11785 | 382 |
if finger <> nil then |
383 |
begin |
|
384 |
finger^.x:= convertToCursorX(x); |
|
385 |
finger^.y:= convertToCursorY(y); |
|
386 |
finger^.dx:= dx; |
|
387 |
finger^.dy:= dy; |
|
388 |
end |
|
389 |
else |
|
390 |
WriteLnToConsole('finger ' + inttostr(id) + ' not found'); |
|
391 |
updateFinger:= finger |
|
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
392 |
end; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
393 |
|
6693 | 394 |
procedure deleteFinger(id: TSDL_FingerId); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
395 |
var |
6228
1b7d4d7d162b
added lines to avoid compiler hints, is this really the way we want to do it though? ;/
Xeli
parents:
6029
diff
changeset
|
396 |
index : Longword; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
397 |
begin |
8330 | 398 |
|
11785 | 399 |
dec(pointerCount); |
400 |
for index := 0 to pointerCount do |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
401 |
begin |
11785 | 402 |
if fingers[index].id = id then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
403 |
begin |
11785 | 404 |
//put the last finger into the spot of the finger to be removed, |
405 |
//so that all fingers are packed to the far left |
|
406 |
if pointerCount <> index then |
|
407 |
begin |
|
408 |
fingers[index].id := fingers[pointerCount].id; |
|
409 |
fingers[index].x := fingers[pointerCount].x; |
|
410 |
fingers[index].y := fingers[pointerCount].y; |
|
411 |
fingers[index].historicalX := fingers[pointerCount].historicalX; |
|
412 |
fingers[index].historicalY := fingers[pointerCount].historicalY; |
|
413 |
fingers[index].timeSinceDown := fingers[pointerCount].timeSinceDown; |
|
414 |
fingers[index].pressedWidget := fingers[pointerCount].pressedWidget; |
|
8330 | 415 |
|
11785 | 416 |
fingers[pointerCount].id := nilFingerId; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
417 |
end |
11785 | 418 |
else |
419 |
fingers[index].id := nilFingerId; |
|
420 |
break; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
421 |
end; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
422 |
end; |
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
423 |
|
5589 | 424 |
end; |
425 |
||
6961
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
426 |
procedure NewTurnBeginning; |
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
427 |
begin |
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
428 |
targetted:= false; |
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
429 |
targetting:= false; |
7022 | 430 |
SetUtilityWidgetState(amNothing); |
6961
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
431 |
end; |
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
432 |
|
d5ac09894a1b
hide utilitywidget when changing turns, this also fixes some inconsistency when using targetting weapons
Xeli
parents:
6957
diff
changeset
|
433 |
|
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
434 |
procedure ProcessTouch; |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
435 |
var |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
436 |
deltaAngle: LongInt; |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
437 |
begin |
8330 | 438 |
invertCursor := not(bShowAmmoMenu or targetting); |
6705
d2e95dcf2bb0
stop the crosshair from twitching when it's not supposed to move + fix aimingUp/Down booleans
Xeli
parents:
6704
diff
changeset
|
439 |
if aimingCrosshair then |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
440 |
if CurrentHedgehog^.Gear <> nil then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
441 |
begin |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
442 |
deltaAngle:= CurrentHedgehog^.Gear^.Angle - targetAngle; |
8330 | 443 |
if (deltaAngle > -5) and (deltaAngle < 5) then |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
444 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
445 |
if(aimingUp)then |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
446 |
begin |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
447 |
aimingUp:= false; |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
448 |
ParseTeamCommand('-up'); |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
449 |
end; |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
450 |
if(aimingDown)then |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
451 |
begin |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
452 |
aimingDown:= false; |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
453 |
ParseTeamCommand('-down'); |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
454 |
end |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
455 |
end |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
456 |
else |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
457 |
begin |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
458 |
if (deltaAngle < 0) then |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
459 |
begin |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
460 |
if aimingUp then |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
461 |
begin |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
462 |
aimingUp:= false; |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
463 |
ParseTeamCommand('-up'); |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
464 |
end; |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
465 |
if(aimingDown)then |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
466 |
begin |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
467 |
aimingDown:= true; |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
468 |
ParseTeamCommand('-down'); |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
469 |
end |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
470 |
end |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
471 |
else |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
472 |
begin |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
473 |
if aimingDown then |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
474 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
475 |
ParseTeamCommand('-down'); |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
476 |
aimingDown:= false; |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
477 |
end; |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
478 |
if aimingUp then |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
479 |
begin |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
480 |
aimingUp:= true; |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
481 |
ParseTeamCommand('+up'); |
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
482 |
end; |
8330 | 483 |
end; |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
484 |
end; |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
485 |
end |
8330 | 486 |
else |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
487 |
begin |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
488 |
if aimingUp then |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
489 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
490 |
ParseTeamCommand('-up'); |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
491 |
aimingUp:= false; |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
492 |
end; |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
493 |
if aimingDown then |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
494 |
begin |
6919
bf7433e62b9c
in uTouch dont use bools to represent keystrokes, but issue ParseCommands
Xeli
parents:
6808
diff
changeset
|
495 |
ParseTeamCommand('-down'); |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
496 |
aimingDown:= false; |
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
497 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
498 |
end; |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
499 |
end; |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
500 |
|
6693 | 501 |
function findFinger(id: TSDL_FingerId): PTouch_Data; |
5733
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
502 |
var |
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
503 |
index: LongWord; |
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
504 |
begin |
11782
77afc967f38e
fix memory corruptions caused by outofbounds-writes in uTouch
sheepluva
parents:
11597
diff
changeset
|
505 |
for index:= 0 to (Length(fingers)-1) do |
8330 | 506 |
if fingers[index].id = id then |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
507 |
begin |
9379 | 508 |
findFinger:= @fingers[index]; |
509 |
exit; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
510 |
end; |
9379 | 511 |
findFinger:= nil; |
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
512 |
end; |
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
513 |
|
6693 | 514 |
procedure aim(finger: TTouch_Data); |
8330 | 515 |
var |
6702 | 516 |
hogX, hogY, touchX, touchY, deltaX, deltaY: LongInt; |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
517 |
begin |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
518 |
if CurrentHedgehog^.Gear <> nil then |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
519 |
begin |
6702 | 520 |
touchX := 0;//avoid compiler hint |
521 |
touchY := 0; |
|
522 |
hogX := hwRound(CurrentHedgehog^.Gear^.X); |
|
523 |
hogY := hwRound(CurrentHedgehog^.Gear^.Y); |
|
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
524 |
|
5609
9d66611e4d0a
Introduced a Touch_Finger type to replace the arrays with coords, makes cleaner code
Xeli
parents:
5605
diff
changeset
|
525 |
convertToWorldCoord(touchX, touchY, finger); |
6702 | 526 |
deltaX := abs(TouchX-HogX); |
527 |
deltaY := TouchY-HogY; |
|
8330 | 528 |
|
6703 | 529 |
targetAngle:= (Round(DeltaY / sqrt(sqr(deltaX) + sqr(deltaY)) * 2048) + 2048) div 2; |
6651
4103354b7599
fixed aiming by touching the crosshair, made it compatible with the aiming buttons and disabled camera movement when touching buttons + some formatting fixes
Xeli
parents:
6648
diff
changeset
|
530 |
end; //if CurrentHedgehog^.Gear <> nil |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
531 |
end; |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
532 |
|
6693 | 533 |
// These 4 convertToCursor functions convert xy coords from the SDL coordinate system to our CursorPoint coor system: |
9379 | 534 |
// - the SDL coordinate system is proportional to the screen and values are normalized in the onTouch* functions |
6693 | 535 |
// - the CursorPoint coordinate system goes from -cScreenWidth/2 to cScreenWidth/2 on the x axis |
536 |
// and 0 to cScreenHeight on the x axis, (-cScreenWidth, cScreenHeight) being top left. |
|
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
537 |
function convertToCursorX(x: LongInt): LongInt; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
538 |
begin |
9379 | 539 |
convertToCursorX:= x - cScreenWidth shr 1; |
6625
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
540 |
end; |
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
541 |
|
2d8c5815292f
some refactoring + you can now tap on the ammo menu to select a weapon
Xeli
parents:
6580
diff
changeset
|
542 |
function convertToCursorY(y: LongInt): LongInt; |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
543 |
begin |
9379 | 544 |
convertToCursorY:= cScreenHeight - y; |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
545 |
end; |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
546 |
|
6693 | 547 |
function isOnCrosshair(finger: TTouch_Data): boolean; |
5615
104f69e798bb
changed aiming to be triggered when touching the crosshair
Xeli
parents:
5609
diff
changeset
|
548 |
var |
9379 | 549 |
x, y: LongInt; |
5615
104f69e798bb
changed aiming to be triggered when touching the crosshair
Xeli
parents:
5609
diff
changeset
|
550 |
begin |
9379 | 551 |
x:= 0; |
552 |
y:= 0; |
|
6702 | 553 |
convertToFingerCoord(x, y, CrosshairX, CrosshairY); |
9379 | 554 |
isOnCrosshair:= isOnRect(x - HalfRectSize, y - HalfRectSize, RectSize, RectSize, finger); |
5615
104f69e798bb
changed aiming to be triggered when touching the crosshair
Xeli
parents:
5609
diff
changeset
|
555 |
end; |
104f69e798bb
changed aiming to be triggered when touching the crosshair
Xeli
parents:
5609
diff
changeset
|
556 |
|
6693 | 557 |
function isOnCurrentHog(finger: TTouch_Data): boolean; |
5595 | 558 |
var |
9379 | 559 |
x, y: LongInt; |
5595 | 560 |
begin |
9379 | 561 |
x:= 0; |
562 |
y:= 0; |
|
563 |
convertToFingerCoord(x, y, hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y)); |
|
564 |
isOnCurrentHog:= isOnRect(x - HalfRectSize, y - HalfRectSize, RectSize, RectSize, finger); |
|
5938
c186c454779d
isOnCurrentHog and isOnCrosshair now look at the distance relative to the screen rather than world coords, this means that zooming out doesn't make it harder to touch the hog or crosshair
Xeli
parents:
5828
diff
changeset
|
565 |
end; |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
566 |
|
9379 | 567 |
procedure convertToFingerCoord(var x, y : LongInt; oldX, oldY: LongInt); |
5938
c186c454779d
isOnCurrentHog and isOnCrosshair now look at the distance relative to the screen rather than world coords, this means that zooming out doesn't make it harder to touch the hog or crosshair
Xeli
parents:
5828
diff
changeset
|
568 |
begin |
6702 | 569 |
x := oldX + WorldDx; |
9379 | 570 |
y := cScreenHeight - oldY - WorldDy; |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
571 |
end; |
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
572 |
|
6702 | 573 |
procedure convertToWorldCoord(var x,y: LongInt; finger: TTouch_Data); |
5599
2e4b90f33a83
aiming fixed, inverted cursor on ammo menu, added equal and isZero function to uFloat, changed the way ammo menu opens, you must now click on the hog rather than anywhere on the screen
Xeli
parents:
5595
diff
changeset
|
574 |
begin |
9379 | 575 |
x := finger.x - WorldDx; |
576 |
y := cScreenHeight - finger.y - WorldDy; |
|
5595 | 577 |
end; |
578 |
||
5589 | 579 |
//Method to calculate the distance this finger has moved since the downEvent |
6693 | 580 |
function fingerHasMoved(finger: TTouch_Data): boolean; |
5589 | 581 |
begin |
6950
f34ff54b0cbd
-Fixed FingerHasMoved function, still might need a little tweaking
Xeli
parents:
6949
diff
changeset
|
582 |
fingerHasMoved := trunc(sqrt(sqr(finger.X-finger.historicalX) + sqr(finger.y-finger.historicalY))) > 30; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
583 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
584 |
|
6702 | 585 |
function calculateDelta(finger1, finger2: TTouch_Data): LongInt; inline; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
586 |
begin |
6702 | 587 |
calculateDelta := Round(sqrt(sqr(finger2.x-finger1.x) + sqr(finger2.y-finger1.y))); |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
588 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
589 |
|
6693 | 590 |
// Under the premise that all pointer ids in pointerIds:TSDL_FingerId are packed to the far left. |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
591 |
// If the pointer to be ignored is not pointerIds[0] the second must be there |
6693 | 592 |
function getSecondFinger(finger: TTouch_Data): PTouch_Data; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
593 |
begin |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
594 |
if fingers[0].id = finger.id then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
595 |
getSecondFinger := @fingers[1] |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
596 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6344
diff
changeset
|
597 |
getSecondFinger := @fingers[0]; |
5733
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
598 |
end; |
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
599 |
|
6693 | 600 |
function isOnRect(rect: TSDL_Rect; finger: TTouch_Data): boolean; |
6698 | 601 |
begin |
6703 | 602 |
isOnRect:= isOnRect(rect.x, rect.y, rect.w, rect.h, finger); |
603 |
end; |
|
604 |
||
605 |
function isOnRect(x,y,w,h: LongInt; finger: TTouch_Data): boolean; |
|
606 |
begin |
|
607 |
isOnRect:= (finger.x > x) and |
|
608 |
(finger.x < x + w) and |
|
609 |
(cScreenHeight - finger.y > y) and |
|
610 |
(cScreenHeight - finger.y < y + h); |
|
6640 | 611 |
end; |
612 |
||
6723
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
613 |
function isOnWidget(widget: TOnScreenWidget; finger: TTouch_Data): boolean; |
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
614 |
begin |
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
615 |
isOnWidget:= widget.show and isOnRect(widget.active, finger); |
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
616 |
end; |
b77e2d4d664b
check if the widget is shown before checking if the finger is on the widget
Xeli
parents:
6716
diff
changeset
|
617 |
|
6693 | 618 |
procedure printFinger(finger: TTouch_Data); |
5733
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
619 |
begin |
9379 | 620 |
WriteLnToConsole(Format('id: %d, x: %d y: %d (rel x: %d rel y: %d), time: %d', |
621 |
[finger.id, finger.x, finger.y, finger.historicalX, finger.historicalY, finger.timeSinceDown])); |
|
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
622 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
623 |
|
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
624 |
procedure initModule; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
625 |
var |
6228
1b7d4d7d162b
added lines to avoid compiler hints, is this really the way we want to do it though? ;/
Xeli
parents:
6029
diff
changeset
|
626 |
index: Longword; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
627 |
begin |
6701
58a43c2064ad
the onScreenwidgets are multitouch now, frequently (alternating) tapping left and right still causes it to bug though, but you have to try hard to duplicate it, works ok for now
Xeli
parents:
6700
diff
changeset
|
628 |
buttonsDown:= 0; |
9379 | 629 |
pointerCount:= 0; |
5605
31bd6e30df02
Added a hook to uGame which now allows uTouch to take action outside of SDL_Finger* events
Xeli
parents:
5599
diff
changeset
|
630 |
|
5733
5ab22736bdb6
Fixed a major bug (related to pointers) which also solves the stuttering when zooming in and out
Xeli
parents:
5621
diff
changeset
|
631 |
setLength(fingers, 4); |
11782
77afc967f38e
fix memory corruptions caused by outofbounds-writes in uTouch
sheepluva
parents:
11597
diff
changeset
|
632 |
for index := 0 to (Length(fingers)-1) do |
11783 | 633 |
fingers[index].id := nilFingerId; |
7185
92a045156255
Android: first attempt at using the density call from java
Xeli
parents:
7105
diff
changeset
|
634 |
|
9377 | 635 |
rectSize:= baseRectSize; |
9379 | 636 |
halfRectSize:= baseRectSize shr 1; |
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
637 |
end; |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
638 |
|
7850 | 639 |
procedure freeModule; |
640 |
begin |
|
641 |
end; |
|
642 |
||
5579
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
643 |
begin |
3176ee8a9d94
uTouch, has cursor move, zoom and click or tap to open the ammo menu
Xeli
parents:
diff
changeset
|
644 |
end. |