Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CanHit() [3/4]

static bool Terraria.Collision.CanHit ( Point Position1,
int Width1,
int Height1,
Point Position2,
int Width2,
int Height2 )
inlinestatic

Definition at line 359 of file Collision.cs.

360 {
361 int num = (Position1.X + Width1 / 2) / 16;
362 int num2 = (Position1.Y + Height1 / 2) / 16;
363 int num3 = (Position2.X + Width2 / 2) / 16;
364 int num4 = (Position2.Y + Height2 / 2) / 16;
365 if (num <= 1)
366 {
367 num = 1;
368 }
369 if (num >= Main.maxTilesX)
370 {
371 num = Main.maxTilesX - 1;
372 }
373 if (num3 <= 1)
374 {
375 num3 = 1;
376 }
377 if (num3 >= Main.maxTilesX)
378 {
379 num3 = Main.maxTilesX - 1;
380 }
381 if (num2 <= 1)
382 {
383 num2 = 1;
384 }
385 if (num2 >= Main.maxTilesY)
386 {
387 num2 = Main.maxTilesY - 1;
388 }
389 if (num4 <= 1)
390 {
391 num4 = 1;
392 }
393 if (num4 >= Main.maxTilesY)
394 {
395 num4 = Main.maxTilesY - 1;
396 }
397 try
398 {
399 do
400 {
401 int num5 = Math.Abs(num - num3);
402 int num6 = Math.Abs(num2 - num4);
403 if (num == num3 && num2 == num4)
404 {
405 return true;
406 }
407 if (num5 > num6)
408 {
409 num = ((num >= num3) ? (num - 1) : (num + 1));
410 if (Main.tile[num, num2 - 1] == null)
411 {
412 return false;
413 }
414 if (Main.tile[num, num2 + 1] == null)
415 {
416 return false;
417 }
418 if (!Main.tile[num, num2 - 1].inActive() && Main.tile[num, num2 - 1].active() && Main.tileSolid[Main.tile[num, num2 - 1].type] && !Main.tileSolidTop[Main.tile[num, num2 - 1].type] && Main.tile[num, num2 - 1].slope() == 0 && !Main.tile[num, num2 - 1].halfBrick() && !Main.tile[num, num2 + 1].inActive() && Main.tile[num, num2 + 1].active() && Main.tileSolid[Main.tile[num, num2 + 1].type] && !Main.tileSolidTop[Main.tile[num, num2 + 1].type] && Main.tile[num, num2 + 1].slope() == 0 && !Main.tile[num, num2 + 1].halfBrick())
419 {
420 return false;
421 }
422 }
423 else
424 {
425 num2 = ((num2 >= num4) ? (num2 - 1) : (num2 + 1));
426 if (Main.tile[num - 1, num2] == null)
427 {
428 return false;
429 }
430 if (Main.tile[num + 1, num2] == null)
431 {
432 return false;
433 }
434 if (!Main.tile[num - 1, num2].inActive() && Main.tile[num - 1, num2].active() && Main.tileSolid[Main.tile[num - 1, num2].type] && !Main.tileSolidTop[Main.tile[num - 1, num2].type] && Main.tile[num - 1, num2].slope() == 0 && !Main.tile[num - 1, num2].halfBrick() && !Main.tile[num + 1, num2].inActive() && Main.tile[num + 1, num2].active() && Main.tileSolid[Main.tile[num + 1, num2].type] && !Main.tileSolidTop[Main.tile[num + 1, num2].type] && Main.tile[num + 1, num2].slope() == 0 && !Main.tile[num + 1, num2].halfBrick())
435 {
436 return false;
437 }
438 }
439 if (Main.tile[num, num2] == null)
440 {
441 return false;
442 }
443 }
444 while (Main.tile[num, num2].inActive() || !Main.tile[num, num2].active() || !Main.tileSolid[Main.tile[num, num2].type] || Main.tileSolidTop[Main.tile[num, num2].type]);
445 return false;
446 }
447 catch
448 {
449 return false;
450 }
451 }
static double Abs(double value)

References System.Math.Abs(), Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Main.tile, Terraria.Main.tileSolid, and Terraria.Main.tileSolidTop.