author | Stepan777 <stepik-777@mail.ru> |
Fri, 08 Jun 2012 02:52:35 +0400 | |
changeset 7198 | 5debd5fe526e |
parent 7194 | d8e68cbca7ee |
child 7386 | e82a076df09b |
permissions | -rw-r--r-- |
4976 | 1 |
(* |
2 |
* Hedgewars, a free turn based strategy game |
|
6700 | 3 |
* Copyright (c) 2004-2012 Andrey Korotaev <unC0Rr@gmail.com> |
4976 | 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 |
|
16 |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
|
17 |
*) |
|
18 |
||
4374 | 19 |
{$INCLUDE "options.inc"} |
4976 | 20 |
|
4374 | 21 |
unit uUtils; |
22 |
||
23 |
interface |
|
5661
45618bdce725
Fixed AddFileLog, there's now a log created in /sdcard/Android/data/org.hedgewars.mobile/cache/Data/
Xeli
parents:
5639
diff
changeset
|
24 |
uses uTypes, uFloat, GLunit; |
4374 | 25 |
|
26 |
procedure SplitBySpace(var a, b: shortstring); |
|
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
27 |
procedure SplitByChar(var a, b: shortstring; c: char); |
4374 | 28 |
procedure SplitByChar(var a, b: ansistring; c: char); |
29 |
||
6894 | 30 |
{$IFNDEF PAS2C} |
4374 | 31 |
function EnumToStr(const en : TGearType) : shortstring; overload; |
4453 | 32 |
function EnumToStr(const en : TVisualGearType) : shortstring; overload; |
4374 | 33 |
function EnumToStr(const en : TSound) : shortstring; overload; |
34 |
function EnumToStr(const en : TAmmoType) : shortstring; overload; |
|
35 |
function EnumToStr(const en : THogEffect) : shortstring; overload; |
|
5118 | 36 |
function EnumToStr(const en : TCapGroup) : shortstring; overload; |
6894 | 37 |
{$ENDIF} |
4374 | 38 |
|
39 |
function Min(a, b: LongInt): LongInt; inline; |
|
40 |
function Max(a, b: LongInt): LongInt; inline; |
|
41 |
||
42 |
function IntToStr(n: LongInt): shortstring; |
|
7151 | 43 |
function StrToInt(s: shortstring): LongInt; |
4374 | 44 |
function FloatToStr(n: hwFloat): shortstring; |
45 |
||
46 |
function DxDy2Angle(const _dY, _dX: hwFloat): GLfloat; |
|
47 |
function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; |
|
48 |
function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; |
|
6894 | 49 |
function DxDy2AttackAnglef(const _dY, _dX: extended): LongInt; |
4374 | 50 |
|
51 |
procedure SetLittle(var r: hwFloat); |
|
52 |
||
53 |
function Str2PChar(const s: shortstring): PChar; |
|
54 |
function DecodeBase64(s: shortstring): shortstring; |
|
55 |
||
56 |
function isPowerOf2(i: Longword): boolean; |
|
57 |
function toPowerOf2(i: Longword): Longword; inline; |
|
58 |
||
59 |
function endian(independent: LongWord): LongWord; inline; |
|
60 |
||
4380 | 61 |
function CheckCJKFont(s: ansistring; font: THWFont): THWFont; |
62 |
||
4374 | 63 |
procedure AddFileLog(s: shortstring); |
7180 | 64 |
procedure AddFileLogRaw(s: pchar); cdecl; |
4374 | 65 |
|
4900 | 66 |
function CheckNoTeamOrHH: boolean; inline; |
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
67 |
|
4403 | 68 |
function GetLaunchX(at: TAmmoType; dir: LongInt; angle: LongInt): LongInt; |
69 |
function GetLaunchY(at: TAmmoType; angle: LongInt): LongInt; |
|
70 |
||
7151 | 71 |
{$IFNDEF PAS2C} |
72 |
procedure Write(var f: textfile; s: shortstring); |
|
73 |
procedure WriteLn(var f: textfile; s: shortstring); |
|
74 |
{$ENDIF} |
|
75 |
||
7027 | 76 |
procedure initModule(isGame: boolean); |
4374 | 77 |
procedure freeModule; |
78 |
||
4385 | 79 |
|
4374 | 80 |
implementation |
7043
7c080e5ac8d0
Some work to make more units compile after conversion to c
unc0rr
parents:
7028
diff
changeset
|
81 |
uses {$IFNDEF PAS2C}typinfo, {$ENDIF}Math, uConsts, uVariables, SysUtils; |
4374 | 82 |
|
83 |
{$IFDEF DEBUGFILE} |
|
4437
05192cdbce9b
un-break build (wrong merge in uConsole) and update project file with the new sources
koda
parents:
4403
diff
changeset
|
84 |
var f: textfile; |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
85 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 86 |
logMutex: TRTLCriticalSection; // mutex for debug file |
4374 | 87 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
88 |
{$ENDIF} |
7028 | 89 |
var CharArray: array[byte] of Char; |
4374 | 90 |
|
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
91 |
procedure SplitBySpace(var a,b: shortstring); |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
92 |
begin |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
93 |
SplitByChar(a,b,' '); |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
94 |
end; |
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
95 |
|
4374 | 96 |
// should this include "strtolower()" for the split string? |
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
97 |
procedure SplitByChar(var a, b: shortstring; c : char); |
4374 | 98 |
var i, t: LongInt; |
99 |
begin |
|
7191
9419294e5f33
first attempt at implementing support for keys with modifiers
Xeli
parents:
7151
diff
changeset
|
100 |
i:= Pos(c, a); |
4374 | 101 |
if i > 0 then |
102 |
begin |
|
103 |
for t:= 1 to Pred(i) do |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
104 |
if (a[t] >= 'A')and(a[t] <= 'Z') then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
105 |
Inc(a[t], 32); |
4374 | 106 |
b:= copy(a, i + 1, Length(a) - i); |
7074 | 107 |
a[0]:= char(Pred(i)) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
108 |
end |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
109 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
110 |
b:= ''; |
4374 | 111 |
end; |
112 |
||
113 |
procedure SplitByChar(var a, b: ansistring; c: char); |
|
114 |
var i: LongInt; |
|
115 |
begin |
|
116 |
i:= Pos(c, a); |
|
117 |
if i > 0 then |
|
118 |
begin |
|
119 |
b:= copy(a, i + 1, Length(a) - i); |
|
120 |
setlength(a, Pred(i)); |
|
121 |
end else b:= ''; |
|
122 |
end; |
|
123 |
||
6894 | 124 |
{$IFNDEF PAS2C} |
4374 | 125 |
function EnumToStr(const en : TGearType) : shortstring; overload; |
126 |
begin |
|
127 |
EnumToStr:= GetEnumName(TypeInfo(TGearType), ord(en)) |
|
128 |
end; |
|
4453 | 129 |
function EnumToStr(const en : TVisualGearType) : shortstring; overload; |
130 |
begin |
|
131 |
EnumToStr:= GetEnumName(TypeInfo(TVisualGearType), ord(en)) |
|
132 |
end; |
|
4374 | 133 |
|
134 |
function EnumToStr(const en : TSound) : shortstring; overload; |
|
135 |
begin |
|
136 |
EnumToStr:= GetEnumName(TypeInfo(TSound), ord(en)) |
|
137 |
end; |
|
138 |
||
139 |
function EnumToStr(const en : TAmmoType) : shortstring; overload; |
|
140 |
begin |
|
141 |
EnumToStr:= GetEnumName(TypeInfo(TAmmoType), ord(en)) |
|
142 |
end; |
|
143 |
||
144 |
function EnumToStr(const en: THogEffect) : shortstring; overload; |
|
145 |
begin |
|
5118 | 146 |
EnumToStr := GetEnumName(TypeInfo(THogEffect), ord(en)) |
147 |
end; |
|
148 |
||
149 |
function EnumToStr(const en: TCapGroup) : shortstring; overload; |
|
150 |
begin |
|
151 |
EnumToStr := GetEnumName(TypeInfo(TCapGroup), ord(en)) |
|
4374 | 152 |
end; |
6894 | 153 |
{$ENDIF} |
4374 | 154 |
|
155 |
function Min(a, b: LongInt): LongInt; |
|
156 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
157 |
if a < b then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
158 |
Min:= a |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
159 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
160 |
Min:= b |
4374 | 161 |
end; |
162 |
||
163 |
function Max(a, b: LongInt): LongInt; |
|
164 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
165 |
if a > b then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
166 |
Max:= a |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
167 |
else |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
168 |
Max:= b |
4374 | 169 |
end; |
170 |
||
171 |
||
172 |
function IntToStr(n: LongInt): shortstring; |
|
173 |
begin |
|
174 |
str(n, IntToStr) |
|
175 |
end; |
|
176 |
||
7151 | 177 |
function StrToInt(s: shortstring): LongInt; |
178 |
var c: LongInt; |
|
179 |
begin |
|
180 |
val(s, StrToInt, c) |
|
181 |
end; |
|
182 |
||
4374 | 183 |
function FloatToStr(n: hwFloat): shortstring; |
184 |
begin |
|
185 |
FloatToStr:= cstr(n) + '_' + inttostr(Lo(n.QWordValue)) |
|
186 |
end; |
|
187 |
||
188 |
||
189 |
function DxDy2Angle(const _dY, _dX: hwFloat): GLfloat; |
|
190 |
var dY, dX: Extended; |
|
191 |
begin |
|
192 |
dY:= _dY.QWordValue / $100000000; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
193 |
if _dY.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
194 |
dY:= - dY; |
4374 | 195 |
dX:= _dX.QWordValue / $100000000; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
196 |
if _dX.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
197 |
dX:= - dX; |
4374 | 198 |
DxDy2Angle:= arctan2(dY, dX) * 180 / pi |
199 |
end; |
|
200 |
||
201 |
function DxDy2Angle32(const _dY, _dX: hwFloat): LongInt; |
|
202 |
const _16divPI: Extended = 16/pi; |
|
203 |
var dY, dX: Extended; |
|
204 |
begin |
|
205 |
dY:= _dY.QWordValue / $100000000; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
206 |
if _dY.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
207 |
dY:= - dY; |
4374 | 208 |
dX:= _dX.QWordValue / $100000000; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
209 |
if _dX.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
210 |
dX:= - dX; |
4374 | 211 |
DxDy2Angle32:= trunc(arctan2(dY, dX) * _16divPI) and $1f |
212 |
end; |
|
213 |
||
214 |
function DxDy2AttackAngle(const _dY, _dX: hwFloat): LongInt; |
|
215 |
const MaxAngleDivPI: Extended = cMaxAngle/pi; |
|
216 |
var dY, dX: Extended; |
|
217 |
begin |
|
218 |
dY:= _dY.QWordValue / $100000000; |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
219 |
if _dY.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
220 |
dY:= - dY; |
4374 | 221 |
dX:= _dX.QWordValue / $100000000; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
222 |
if _dX.isNegative then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
223 |
dX:= - dX; |
4374 | 224 |
DxDy2AttackAngle:= trunc(arctan2(dY, dX) * MaxAngleDivPI) |
225 |
end; |
|
226 |
||
6894 | 227 |
function DxDy2AttackAnglef(const _dY, _dX: extended): LongInt; inline; |
5151
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5130
diff
changeset
|
228 |
begin |
6894 | 229 |
DxDy2AttackAnglef:= trunc(arctan2(_dY, _dX) * (cMaxAngle/pi)) |
5151
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5130
diff
changeset
|
230 |
end; |
cbadb9fa52fc
An experiment - make bazooka AI use float instead of hwFloat - should be as accurate, but faster.
nemo
parents:
5130
diff
changeset
|
231 |
|
4374 | 232 |
|
233 |
procedure SetLittle(var r: hwFloat); |
|
234 |
begin |
|
235 |
r:= SignAs(cLittle, r) |
|
236 |
end; |
|
237 |
||
238 |
||
239 |
function isPowerOf2(i: Longword): boolean; |
|
240 |
begin |
|
4981
0c60ade27a0a
Optimize check (not like it is called much, just ffs; not tested)
unc0rr
parents:
4976
diff
changeset
|
241 |
isPowerOf2:= (i and (i - 1)) = 0 |
4374 | 242 |
end; |
243 |
||
244 |
function toPowerOf2(i: Longword): Longword; |
|
245 |
begin |
|
246 |
toPowerOf2:= 1; |
|
247 |
while (toPowerOf2 < i) do toPowerOf2:= toPowerOf2 shl 1 |
|
248 |
end; |
|
249 |
||
250 |
||
251 |
function DecodeBase64(s: shortstring): shortstring; |
|
252 |
const table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
|
253 |
var i, t, c: Longword; |
|
254 |
begin |
|
255 |
c:= 0; |
|
256 |
for i:= 1 to Length(s) do |
|
257 |
begin |
|
258 |
t:= Pos(s[i], table); |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
259 |
if s[i] = '=' then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
260 |
inc(c); |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
261 |
if t > 0 then |
7074 | 262 |
s[i]:= char(t - 1) |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
263 |
else |
7074 | 264 |
s[i]:= #0 |
4374 | 265 |
end; |
266 |
||
267 |
i:= 1; |
|
268 |
t:= 1; |
|
269 |
while i <= length(s) do |
|
270 |
begin |
|
271 |
DecodeBase64[t ]:= char((byte(s[i ]) shl 2) or (byte(s[i + 1]) shr 4)); |
|
272 |
DecodeBase64[t + 1]:= char((byte(s[i + 1]) shl 4) or (byte(s[i + 2]) shr 2)); |
|
273 |
DecodeBase64[t + 2]:= char((byte(s[i + 2]) shl 6) or (byte(s[i + 3]) )); |
|
274 |
inc(t, 3); |
|
275 |
inc(i, 4) |
|
276 |
end; |
|
277 |
||
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
278 |
if c < 3 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
279 |
t:= t - c; |
4374 | 280 |
|
7074 | 281 |
DecodeBase64[0]:= char(t - 1) |
4374 | 282 |
end; |
283 |
||
284 |
||
285 |
function Str2PChar(const s: shortstring): PChar; |
|
286 |
begin |
|
287 |
CharArray:= s; |
|
288 |
CharArray[Length(s)]:= #0; |
|
289 |
Str2PChar:= @CharArray |
|
290 |
end; |
|
291 |
||
292 |
||
293 |
function endian(independent: LongWord): LongWord; inline; |
|
294 |
begin |
|
295 |
{$IFDEF ENDIAN_LITTLE} |
|
296 |
endian:= independent; |
|
297 |
{$ELSE} |
|
298 |
endian:= (((independent and $FF000000) shr 24) or |
|
299 |
((independent and $00FF0000) shr 8) or |
|
300 |
((independent and $0000FF00) shl 8) or |
|
301 |
((independent and $000000FF) shl 24)) |
|
302 |
{$ENDIF} |
|
303 |
end; |
|
304 |
||
305 |
||
306 |
procedure AddFileLog(s: shortstring); |
|
307 |
begin |
|
4900 | 308 |
s:= s; |
309 |
{$IFDEF DEBUGFILE} |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
310 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 311 |
EnterCriticalSection(logMutex); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
312 |
{$ENDIF} |
7151 | 313 |
writeln(f, inttostr(GameTicks) + ': ' + s); |
7180 | 314 |
flush(f); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
315 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 316 |
LeaveCriticalSection(logMutex); |
4900 | 317 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
318 |
{$ENDIF} |
4374 | 319 |
end; |
320 |
||
7180 | 321 |
procedure AddFileLogRaw(s: pchar); cdecl; |
322 |
begin |
|
323 |
s:= s; |
|
324 |
{$IFDEF DEBUGFILE} |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
325 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 326 |
EnterCriticalSection(logMutex); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
327 |
{$ENDIF} |
7180 | 328 |
write(f, s); |
329 |
flush(f); |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
330 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 331 |
LeaveCriticalSection(logMutex); |
332 |
{$ENDIF} |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
333 |
{$ENDIF} |
7180 | 334 |
end; |
4374 | 335 |
|
4380 | 336 |
function CheckCJKFont(s: ansistring; font: THWFont): THWFont; |
337 |
var l, i : LongInt; |
|
338 |
u: WideChar; |
|
339 |
tmpstr: array[0..256] of WideChar; |
|
340 |
begin |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
341 |
CheckCJKFont:= font; |
4380 | 342 |
|
5639 | 343 |
{$IFNDEF MOBILE} |
4380 | 344 |
// remove chinese fonts for now |
345 |
if (font >= CJKfnt16) or (length(s) = 0) then |
|
346 |
{$ENDIF} |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
347 |
exit; |
4380 | 348 |
|
349 |
l:= Utf8ToUnicode(@tmpstr, Str2PChar(s), length(s))-1; |
|
350 |
i:= 0; |
|
4737 | 351 |
|
4380 | 352 |
while i < l do |
353 |
begin |
|
354 |
u:= tmpstr[i]; |
|
4737 | 355 |
if (#$1100 <= u) and ( |
356 |
(u <= #$11FF ) or // Hangul Jamo |
|
357 |
((#$2E80 <= u) and (u <= #$2FDF)) or // CJK Radicals Supplement / Kangxi Radicals |
|
4380 | 358 |
((#$2FF0 <= u) and (u <= #$303F)) or // Ideographic Description Characters / CJK Radicals Supplement |
4737 | 359 |
((#$3130 <= u) and (u <= #$318F)) or // Hangul Compatibility Jamo |
4380 | 360 |
((#$31C0 <= u) and (u <= #$31EF)) or // CJK Strokes |
361 |
((#$3200 <= u) and (u <= #$4DBF)) or // Enclosed CJK Letters and Months / CJK Compatibility / CJK Unified Ideographs Extension A |
|
362 |
((#$4E00 <= u) and (u <= #$9FFF)) or // CJK Unified Ideographs |
|
4737 | 363 |
((#$AC00 <= u) and (u <= #$D7AF)) or // Hangul Syllables |
4380 | 364 |
((#$F900 <= u) and (u <= #$FAFF)) or // CJK Compatibility Ideographs |
365 |
((#$FE30 <= u) and (u <= #$FE4F))) // CJK Compatibility Forms |
|
6990
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
366 |
then |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
367 |
begin |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
368 |
CheckCJKFont:= THWFont( ord(font) + ((ord(High(THWFont))+1) div 2) ); |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
369 |
exit; |
40e5af28d026
change every return value into a more pascal-ish form, using the name of the fucntion (helps the parser and macpas compaitilibity)
koda
parents:
6978
diff
changeset
|
370 |
end; |
4380 | 371 |
inc(i) |
372 |
end; |
|
373 |
(* two more to check. pascal WideChar is only 16 bit though |
|
374 |
((#$20000 <= u) and (u >= #$2A6DF)) or // CJK Unified Ideographs Extension B |
|
375 |
((#$2F800 <= u) and (u >= #$2FA1F))) // CJK Compatibility Ideographs Supplement *) |
|
376 |
end; |
|
377 |
||
4385 | 378 |
|
379 |
function GetLaunchX(at: TAmmoType; dir: LongInt; angle: LongInt): LongInt; |
|
380 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
381 |
GetLaunchX:= 0 |
4665
fa7ad5f3725f
Make basic training solvable again. Freeze RNG at current version for less of this kind of issue in future, and a bit more savable of seeds. Disable offsets in preparation for release.
nemo
parents:
4453
diff
changeset
|
382 |
(* |
4385 | 383 |
if (Ammoz[at].ejectX <> 0) or (Ammoz[at].ejectY <> 0) then |
384 |
GetLaunchX:= sign(dir) * (8 + hwRound(AngleSin(angle) * Ammoz[at].ejectX) + hwRound(AngleCos(angle) * Ammoz[at].ejectY)) |
|
385 |
else |
|
4665
fa7ad5f3725f
Make basic training solvable again. Freeze RNG at current version for less of this kind of issue in future, and a bit more savable of seeds. Disable offsets in preparation for release.
nemo
parents:
4453
diff
changeset
|
386 |
GetLaunchX:= 0 *) |
4385 | 387 |
end; |
388 |
||
389 |
function GetLaunchY(at: TAmmoType; angle: LongInt): LongInt; |
|
390 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
391 |
GetLaunchY:= 0 |
4665
fa7ad5f3725f
Make basic training solvable again. Freeze RNG at current version for less of this kind of issue in future, and a bit more savable of seeds. Disable offsets in preparation for release.
nemo
parents:
4453
diff
changeset
|
392 |
(* |
4385 | 393 |
if (Ammoz[at].ejectX <> 0) or (Ammoz[at].ejectY <> 0) then |
394 |
GetLaunchY:= hwRound(AngleSin(angle) * Ammoz[at].ejectY) - hwRound(AngleCos(angle) * Ammoz[at].ejectX) - 2 |
|
395 |
else |
|
4665
fa7ad5f3725f
Make basic training solvable again. Freeze RNG at current version for less of this kind of issue in future, and a bit more savable of seeds. Disable offsets in preparation for release.
nemo
parents:
4453
diff
changeset
|
396 |
GetLaunchY:= 0*) |
4385 | 397 |
end; |
398 |
||
4398
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
399 |
function CheckNoTeamOrHH: boolean; |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
400 |
begin |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
401 |
CheckNoTeamOrHH:= (CurrentTeam = nil) or (CurrentHedgehog^.Gear = nil); |
36d7e4b6ca81
Move some command handlers out of uCommands into more appropriate places, thus removing some dependencies. Ideally uCommands shouldn't depend on anything (except for uTypes and uConsts probably)
unc0rr
parents:
4385
diff
changeset
|
402 |
end; |
4385 | 403 |
|
7151 | 404 |
{$IFNDEF PAS2C} |
405 |
procedure Write(var f: textfile; s: shortstring); |
|
406 |
begin |
|
407 |
system.write(f, s) |
|
408 |
end; |
|
409 |
||
410 |
procedure WriteLn(var f: textfile; s: shortstring); |
|
411 |
begin |
|
412 |
system.writeln(f, s) |
|
413 |
end; |
|
414 |
{$ENDIF} |
|
415 |
||
7027 | 416 |
procedure initModule(isGame: boolean); |
417 |
{$IFDEF DEBUGFILE} |
|
418 |
var logfileBase: shortstring; |
|
419 |
{$IFNDEF MOBILE}var i: LongInt;{$ENDIF} |
|
420 |
{$ENDIF} |
|
4374 | 421 |
begin |
422 |
{$IFDEF DEBUGFILE} |
|
7027 | 423 |
if isGame then |
424 |
logfileBase:= 'game' |
|
425 |
else |
|
426 |
logfileBase:= 'preview'; |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
427 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 428 |
InitCriticalSection(logMutex); |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
429 |
{$ENDIF} |
4374 | 430 |
{$I-} |
5661
45618bdce725
Fixed AddFileLog, there's now a log created in /sdcard/Android/data/org.hedgewars.mobile/cache/Data/
Xeli
parents:
5639
diff
changeset
|
431 |
{$IFDEF MOBILE} |
7027 | 432 |
{$IFDEF IPHONEOS} Assign(f,'../Documents/hw-' + logfileBase + '.log'); {$ENDIF} |
433 |
{$IFDEF ANDROID} Assign(f,pathPrefix + '/' + logfileBase + '.log'); {$ENDIF} |
|
4374 | 434 |
Rewrite(f); |
435 |
{$ELSE} |
|
5831 | 436 |
if (UserPathPrefix <> '') then |
4374 | 437 |
begin |
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5118
diff
changeset
|
438 |
i:= 0; |
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5118
diff
changeset
|
439 |
while(i < 7) do |
4374 | 440 |
begin |
7027 | 441 |
assign(f, UserPathPrefix + '/Logs/' + logfileBase + inttostr(i) + '.log'); |
4374 | 442 |
rewrite(f); |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
443 |
if IOResult = 0 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
444 |
break; |
5130
3602ede67ec5
Add a parameter for game simulation with no gui/sound enabled, just to get statistics
unc0rr
parents:
5118
diff
changeset
|
445 |
inc(i) |
4374 | 446 |
end; |
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
447 |
if i = 7 then |
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
448 |
f:= stderr; // if everything fails, write to stderr |
4374 | 449 |
end |
450 |
else |
|
451 |
f:= stderr; |
|
452 |
{$ENDIF} |
|
453 |
{$I+} |
|
454 |
{$ENDIF} |
|
455 |
||
456 |
end; |
|
457 |
||
458 |
procedure freeModule; |
|
459 |
begin |
|
6580
6155187bf599
A partial reformatting of the pascal code to have consistent syntax. Things that are still inconsistent.
lovelacer
parents:
6444
diff
changeset
|
460 |
recordFileName:= ''; |
4374 | 461 |
|
462 |
{$IFDEF DEBUGFILE} |
|
7151 | 463 |
writeln(f, 'halt at ' + inttostr(GameTicks) + ' ticks. TurnTimeLeft = ' + inttostr(TurnTimeLeft)); |
4374 | 464 |
flush(f); |
465 |
close(f); |
|
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
466 |
{$IFDEF USE_VIDEO_RECORDING} |
7180 | 467 |
DoneCriticalSection(logMutex); |
4374 | 468 |
{$ENDIF} |
7198
5debd5fe526e
1. Add IFDEFs for video recording
Stepan777 <stepik-777@mail.ru>
parents:
7194
diff
changeset
|
469 |
{$ENDIF} |
4374 | 470 |
end; |
471 |
||
4453 | 472 |
end. |