263 if ((x and LAND_WIDTH_MASK) = 0) and ((y and LAND_HEIGHT_MASK) = 0) then |
263 if ((x and LAND_WIDTH_MASK) = 0) and ((y and LAND_HEIGHT_MASK) = 0) then |
264 begin |
264 begin |
265 MeX:= hwRound(Me^.X); |
265 MeX:= hwRound(Me^.X); |
266 MeY:= hwRound(Me^.Y); |
266 MeY:= hwRound(Me^.Y); |
267 // We are still inside the hog. Skip radius test |
267 // We are still inside the hog. Skip radius test |
268 if ((((x-MeX)*(x-MeX)) + ((y-MeY)*(y-MeY))) < 256) and ((Land[y, x] and $FF00) = 0) then |
268 if ((((x-MeX)*(x-MeX)) + ((y-MeY)*(y-MeY))) < 256) and (Land[y, x] <= lfAllObjMask) then |
269 exit(false); |
269 exit(false); |
270 end; |
270 end; |
271 TestCollExcludingMe:= TestColl(x, y, r) |
271 TestCollExcludingMe:= TestColl(x, y, r) |
272 end; |
272 end; |
273 |
273 |
274 function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline; |
274 function TestCollExcludingObjects(x, y, r: LongInt): boolean; inline; |
275 var b: boolean; |
275 var b: boolean; |
276 begin |
276 begin |
277 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] and $FF00 <> 0); |
277 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] > lfAllObjMask); |
278 if b then |
278 if b then |
279 exit(true); |
279 exit(true); |
280 |
280 |
281 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] and $FF00 <> 0); |
281 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] > lfAllObjMask); |
282 if b then |
282 if b then |
283 exit(true); |
283 exit(true); |
284 |
284 |
285 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] and $FF00 <> 0); |
285 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] > lfAllObjMask); |
286 if b then |
286 if b then |
287 exit(true); |
287 exit(true); |
288 |
288 |
289 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] and $FF00 <> 0); |
289 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] > lfAllObjMask); |
290 if b then |
290 if b then |
291 exit(true); |
291 exit(true); |
292 |
292 |
293 TestCollExcludingObjects:= false; |
293 TestCollExcludingObjects:= false; |
294 end; |
294 end; |
295 |
295 |
296 function TestColl(x, y, r: LongInt): boolean; inline; |
296 function TestColl(x, y, r: LongInt): boolean; inline; |
297 var b: boolean; |
297 var b: boolean; |
298 begin |
298 begin |
299 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] and lfCurrentMask <> 0); |
299 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] and lfNotCurrentMask <> 0); |
300 if b then |
300 if b then |
301 exit(true); |
301 exit(true); |
302 |
302 |
303 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] and lfCurrentMask <> 0); |
303 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] and lfNotCurrentMask <> 0); |
304 if b then |
304 if b then |
305 exit(true); |
305 exit(true); |
306 |
306 |
307 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] and lfCurrentMask <> 0); |
307 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] and lfNotCurrentMask <> 0); |
308 if b then |
308 if b then |
309 exit(true); |
309 exit(true); |
310 |
310 |
311 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] and lfCurrentMask <> 0); |
311 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] and lfNotCurrentMask <> 0); |
312 if b then |
312 if b then |
313 exit(true); |
313 exit(true); |
314 |
314 |
315 TestColl:= false; |
315 TestColl:= false; |
316 end; |
316 end; |
317 |
317 |
318 function TestCollWithLand(x, y, r: LongInt): boolean; inline; |
318 function TestCollWithLand(x, y, r: LongInt): boolean; inline; |
319 var b: boolean; |
319 var b: boolean; |
320 begin |
320 begin |
321 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] > 255); |
321 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x-r] > lfAllObjMask); |
322 if b then |
322 if b then |
323 exit(true); |
323 exit(true); |
324 |
324 |
325 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] > 255); |
325 b:= (((x-r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x-r] > lfAllObjMask); |
326 if b then |
326 if b then |
327 exit(true); |
327 exit(true); |
328 |
328 |
329 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] > 255); |
329 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y-r) and LAND_HEIGHT_MASK) = 0) and (Land[y-r, x+r] > lfAllObjMask); |
330 if b then |
330 if b then |
331 exit(true); |
331 exit(true); |
332 |
332 |
333 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] > 255); |
333 b:= (((x+r) and LAND_WIDTH_MASK) = 0) and (((y+r) and LAND_HEIGHT_MASK) = 0) and (Land[y+r, x+r] > lfAllObjMask); |
334 if b then |
334 if b then |
335 exit(true); |
335 exit(true); |
336 |
336 |
337 TestCollWithLand:= false; |
337 TestCollWithLand:= false; |
338 end; |
338 end; |