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

◆ ScoreRoom()

static void Terraria.WorldGen.ScoreRoom ( int ignoreNPC = -1,
int npcTypeAskingToScoreRoom = -1 )
inlinestatic

Definition at line 2380 of file WorldGen.cs.

2381 {
2382 roomOccupied = false;
2383 roomEvil = false;
2384 sharedRoomX = -1;
2386 {
2387 roomOccupied = true;
2388 hiScore = -1;
2389 return;
2390 }
2391 hiScore = 0;
2392 int num = 0;
2393 int num2 = 50;
2395 int[] tileTypeCounts = new int[TileID.Count];
2398 if (num3 < 50)
2399 {
2400 num3 = 0;
2401 }
2402 num2 -= num3;
2403 if (num3 > 0)
2404 {
2405 roomEvil = true;
2406 }
2407 if (num2 <= -250)
2408 {
2409 hiScore = num2;
2410 return;
2411 }
2412 startX = roomX1;
2413 endX = roomX2;
2414 startY = roomY1;
2415 endY = roomY2;
2416 for (int i = startX + 1; i < endX; i++)
2417 {
2418 for (int j = startY + 2; j < endY + 2; j++)
2419 {
2420 if (!Main.tile[i, j].nactive() || !ScoreRoom_CanBeHomeSpot(i, j))
2421 {
2422 continue;
2423 }
2424 num = num2;
2425 if (!Main.tileSolid[Main.tile[i, j].type] || Main.tileSolidTop[Main.tile[i, j].type] || Collision.SolidTiles(i - 1, i + 1, j - 3, j - 1) || !Main.tile[i - 1, j].nactive() || !Main.tileSolid[Main.tile[i - 1, j].type] || !Main.tile[i + 1, j].nactive() || !Main.tileSolid[Main.tile[i + 1, j].type])
2426 {
2427 continue;
2428 }
2429 int num4 = 0;
2430 int num5 = 0;
2431 for (int k = i - 2; k < i + 3; k++)
2432 {
2433 for (int l = j - 4; l < j; l++)
2434 {
2435 Tile tile = Main.tile[k, l];
2436 if (tile.nactive() && !TileID.Sets.IgnoredInHouseScore[tile.type] && (tile.type != 11 || IsOpenDoorAnchorFrame(k, l)))
2437 {
2438 if (k == i)
2439 {
2440 num4++;
2441 }
2442 else if (TileID.Sets.BasicChest[tile.type])
2443 {
2444 num5++;
2445 }
2446 else
2447 {
2448 num = ((tile.type != 10 && tile.type != 388) ? ((!IsOpenDoorAnchorFrame(k, l) && tile.type != 389) ? ((!Main.tileSolid[tile.type]) ? (num + 5) : (num - 5)) : (num - 20)) : (num - 20));
2449 }
2450 }
2451 }
2452 }
2453 if (sharedRoomX >= 0 && num >= 1 && Math.Abs(sharedRoomX - i) < 3)
2454 {
2455 num = 1;
2456 }
2457 if (num > 0 && num5 > 0)
2458 {
2459 num -= 30 * num5;
2460 if (num < 1)
2461 {
2462 num = 1;
2463 }
2464 }
2465 if (num > 0 && num4 > 0)
2466 {
2467 num -= 15 * num4;
2468 if (num <= 0)
2469 {
2470 num = 0;
2471 }
2472 }
2473 if (num <= hiScore)
2474 {
2475 continue;
2476 }
2477 bool flag = Housing_CheckIfInRoom(i, j);
2478 bool[] array = new bool[3];
2479 for (int m = 1; m <= 3; m++)
2480 {
2481 if (!Main.tile[i, j - m].active() || !Main.tileSolid[Main.tile[i, j - m].type])
2482 {
2483 array[m - 1] = true;
2484 }
2485 if (!Housing_CheckIfInRoom(i, j - m))
2486 {
2487 array[m - 1] = false;
2488 }
2489 }
2490 bool[] array2 = array;
2491 for (int n = 0; n < array2.Length; n++)
2492 {
2493 if (!array2[n])
2494 {
2495 flag = false;
2496 break;
2497 }
2498 }
2499 if (flag && !Housing_CheckIfIsCeiling(i, j))
2500 {
2501 hiScore = num;
2502 bestX = i;
2503 bestY = j;
2504 }
2505 }
2506 }
2507 }
static double Abs(double value)
static bool[] IgnoredInHouseScore
Definition TileID.cs:305
static bool[] BasicChest
Definition TileID.cs:223
static readonly ushort Count
Definition TileID.cs:1698
static bool Housing_CheckIfIsCeiling(int i, int j)
Definition WorldGen.cs:2550
static bool ScoreRoom_IsThisRoomOccupiedBySomeone(int ignoreNPC=-1, int npcTypeAsking=-1)
Definition WorldGen.cs:2304
static int roomY2
Definition WorldGen.cs:1064
static void CountTileTypesInArea(int[] tileTypeCounts, int startX, int endX, int startY, int endY)
Definition WorldGen.cs:2340
static bool roomEvil
Definition WorldGen.cs:1086
static int sharedRoomX
Definition WorldGen.cs:1104
static int roomX2
Definition WorldGen.cs:1060
static int GetTileTypeCountByCategory(int[] tileTypeCounts, TileScanGroup group)
Definition WorldGen.cs:2354
static int hiScore
Definition WorldGen.cs:1074
static bool ScoreRoom_CanBeHomeSpot(int x, int y)
Definition WorldGen.cs:2536
static int bestX
Definition WorldGen.cs:1070
static bool Housing_CheckIfInRoom(int i, int j)
Definition WorldGen.cs:2567
static bool IsOpenDoorAnchorFrame(int x, int y)
static bool roomOccupied
Definition WorldGen.cs:1084
static void Housing_GetTestedRoomBounds(out int startX, out int endX, out int startY, out int endY)
Definition WorldGen.cs:2509
static int roomY1
Definition WorldGen.cs:1062
static int bestY
Definition WorldGen.cs:1072
static int roomX1
Definition WorldGen.cs:1058

References System.Math.Abs(), System.array, Terraria.ID.TileID.Sets.BasicChest, Terraria.WorldGen.bestX, Terraria.WorldGen.bestY, Terraria.ID.TileID.Count, Terraria.WorldGen.CountTileTypesInArea(), Terraria.WorldGen.GetTileTypeCountByCategory(), Terraria.WorldGen.hiScore, Terraria.WorldGen.Housing_CheckIfInRoom(), Terraria.WorldGen.Housing_CheckIfIsCeiling(), Terraria.WorldGen.Housing_GetTestedRoomBounds(), Terraria.ID.TileID.Sets.IgnoredInHouseScore, Terraria.WorldGen.IsOpenDoorAnchorFrame(), Terraria.Tile.nactive(), Terraria.WorldGen.roomEvil, Terraria.WorldGen.roomOccupied, Terraria.WorldGen.roomX1, Terraria.WorldGen.roomX2, Terraria.WorldGen.roomY1, Terraria.WorldGen.roomY2, Terraria.WorldGen.ScoreRoom_CanBeHomeSpot(), Terraria.WorldGen.ScoreRoom_IsThisRoomOccupiedBySomeone(), Terraria.WorldGen.sharedRoomX, Terraria.Collision.SolidTiles(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, and Terraria.Tile.type.

Referenced by Terraria.WorldGen.MoveTownNPC(), Terraria.WorldGen.QuickFindHome(), and Terraria.WorldGen.SpawnTownNPC().