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

◆ GrowTreeWithSettings()

static bool Terraria.WorldGen.GrowTreeWithSettings ( int checkedX,
int checkedY,
GrowTreeSettings settings )
inlinestatic

Definition at line 22212 of file WorldGen.cs.

22213 {
22214 int i;
22215 for (i = checkedY; Main.tile[checkedX, i].type == settings.SaplingTileType; i++)
22216 {
22217 }
22218 if (Main.tile[checkedX - 1, i - 1].liquid != 0 || Main.tile[checkedX, i - 1].liquid != 0 || Main.tile[checkedX + 1, i - 1].liquid != 0)
22219 {
22220 return false;
22221 }
22222 Tile tile = Main.tile[checkedX, i];
22223 if (!tile.nactive() || tile.halfBrick() || tile.slope() != 0)
22224 {
22225 return false;
22226 }
22227 bool flag = settings.WallTest(Main.tile[checkedX, i - 1].wall);
22228 if (!settings.GroundTest(tile.type) || !flag)
22229 {
22230 return false;
22231 }
22232 if ((!Main.tile[checkedX - 1, i].active() || !settings.GroundTest(Main.tile[checkedX - 1, i].type)) && (!Main.tile[checkedX + 1, i].active() || !settings.GroundTest(Main.tile[checkedX + 1, i].type)))
22233 {
22234 return false;
22235 }
22236 TileColorCache cache = Main.tile[checkedX, i].BlockColorAndCoating();
22237 if (Main.tenthAnniversaryWorld && !gen && (settings.TreeTileType == 596 || settings.TreeTileType == 616))
22238 {
22239 cache.Color = (byte)genRand.Next(1, 13);
22240 }
22241 int num = 2;
22242 int num2 = genRand.Next(settings.TreeHeightMin, settings.TreeHeightMax + 1);
22243 int num3 = num2 + settings.TreeTopPaddingNeeded;
22244 if (!EmptyTileCheck(checkedX - num, checkedX + num, i - num3, i - 1, 20))
22245 {
22246 return false;
22247 }
22248 bool flag2 = false;
22249 bool flag3 = false;
22250 int num4;
22251 for (int j = i - num2; j < i; j++)
22252 {
22253 Tile tile2 = Main.tile[checkedX, j];
22254 tile2.frameNumber((byte)genRand.Next(3));
22255 tile2.active(active: true);
22256 tile2.type = settings.TreeTileType;
22257 tile2.UseBlockColors(cache);
22258 num4 = genRand.Next(3);
22259 int num5 = genRand.Next(10);
22260 if (j == i - 1 || j == i - num2)
22261 {
22262 num5 = 0;
22263 }
22264 while (((num5 == 5 || num5 == 7) && flag2) || ((num5 == 6 || num5 == 7) && flag3))
22265 {
22266 num5 = genRand.Next(10);
22267 }
22268 flag2 = false;
22269 flag3 = false;
22270 if (num5 == 5 || num5 == 7)
22271 {
22272 flag2 = true;
22273 }
22274 if (num5 == 6 || num5 == 7)
22275 {
22276 flag3 = true;
22277 }
22278 switch (num5)
22279 {
22280 case 1:
22281 if (num4 == 0)
22282 {
22283 tile2.frameX = 0;
22284 tile2.frameY = 66;
22285 }
22286 if (num4 == 1)
22287 {
22288 tile2.frameX = 0;
22289 tile2.frameY = 88;
22290 }
22291 if (num4 == 2)
22292 {
22293 tile2.frameX = 0;
22294 tile2.frameY = 110;
22295 }
22296 break;
22297 case 2:
22298 if (num4 == 0)
22299 {
22300 tile2.frameX = 22;
22301 tile2.frameY = 0;
22302 }
22303 if (num4 == 1)
22304 {
22305 tile2.frameX = 22;
22306 tile2.frameY = 22;
22307 }
22308 if (num4 == 2)
22309 {
22310 tile2.frameX = 22;
22311 tile2.frameY = 44;
22312 }
22313 break;
22314 case 3:
22315 if (num4 == 0)
22316 {
22317 tile2.frameX = 44;
22318 tile2.frameY = 66;
22319 }
22320 if (num4 == 1)
22321 {
22322 tile2.frameX = 44;
22323 tile2.frameY = 88;
22324 }
22325 if (num4 == 2)
22326 {
22327 tile2.frameX = 44;
22328 tile2.frameY = 110;
22329 }
22330 break;
22331 case 4:
22332 if (num4 == 0)
22333 {
22334 tile2.frameX = 22;
22335 tile2.frameY = 66;
22336 }
22337 if (num4 == 1)
22338 {
22339 tile2.frameX = 22;
22340 tile2.frameY = 88;
22341 }
22342 if (num4 == 2)
22343 {
22344 tile2.frameX = 22;
22345 tile2.frameY = 110;
22346 }
22347 break;
22348 case 5:
22349 if (num4 == 0)
22350 {
22351 tile2.frameX = 88;
22352 tile2.frameY = 0;
22353 }
22354 if (num4 == 1)
22355 {
22356 tile2.frameX = 88;
22357 tile2.frameY = 22;
22358 }
22359 if (num4 == 2)
22360 {
22361 tile2.frameX = 88;
22362 tile2.frameY = 44;
22363 }
22364 break;
22365 case 6:
22366 if (num4 == 0)
22367 {
22368 tile2.frameX = 66;
22369 tile2.frameY = 66;
22370 }
22371 if (num4 == 1)
22372 {
22373 tile2.frameX = 66;
22374 tile2.frameY = 88;
22375 }
22376 if (num4 == 2)
22377 {
22378 tile2.frameX = 66;
22379 tile2.frameY = 110;
22380 }
22381 break;
22382 case 7:
22383 if (num4 == 0)
22384 {
22385 tile2.frameX = 110;
22386 tile2.frameY = 66;
22387 }
22388 if (num4 == 1)
22389 {
22390 tile2.frameX = 110;
22391 tile2.frameY = 88;
22392 }
22393 if (num4 == 2)
22394 {
22395 tile2.frameX = 110;
22396 tile2.frameY = 110;
22397 }
22398 break;
22399 default:
22400 if (num4 == 0)
22401 {
22402 tile2.frameX = 0;
22403 tile2.frameY = 0;
22404 }
22405 if (num4 == 1)
22406 {
22407 tile2.frameX = 0;
22408 tile2.frameY = 22;
22409 }
22410 if (num4 == 2)
22411 {
22412 tile2.frameX = 0;
22413 tile2.frameY = 44;
22414 }
22415 break;
22416 }
22417 if (num5 == 5 || num5 == 7)
22418 {
22419 Tile tile3 = Main.tile[checkedX - 1, j];
22420 tile3.active(active: true);
22421 tile3.type = settings.TreeTileType;
22422 tile3.UseBlockColors(cache);
22423 num4 = genRand.Next(3);
22424 if (genRand.Next(3) < 2)
22425 {
22426 if (num4 == 0)
22427 {
22428 tile3.frameX = 44;
22429 tile3.frameY = 198;
22430 }
22431 if (num4 == 1)
22432 {
22433 tile3.frameX = 44;
22434 tile3.frameY = 220;
22435 }
22436 if (num4 == 2)
22437 {
22438 tile3.frameX = 44;
22439 tile3.frameY = 242;
22440 }
22441 }
22442 else
22443 {
22444 if (num4 == 0)
22445 {
22446 tile3.frameX = 66;
22447 tile3.frameY = 0;
22448 }
22449 if (num4 == 1)
22450 {
22451 tile3.frameX = 66;
22452 tile3.frameY = 22;
22453 }
22454 if (num4 == 2)
22455 {
22456 tile3.frameX = 66;
22457 tile3.frameY = 44;
22458 }
22459 }
22460 }
22461 if (num5 != 6 && num5 != 7)
22462 {
22463 continue;
22464 }
22465 Tile tile4 = Main.tile[checkedX + 1, j];
22466 tile4.active(active: true);
22467 tile4.type = settings.TreeTileType;
22468 tile4.UseBlockColors(cache);
22469 num4 = genRand.Next(3);
22470 if (genRand.Next(3) < 2)
22471 {
22472 if (num4 == 0)
22473 {
22474 tile4.frameX = 66;
22475 tile4.frameY = 198;
22476 }
22477 if (num4 == 1)
22478 {
22479 tile4.frameX = 66;
22480 tile4.frameY = 220;
22481 }
22482 if (num4 == 2)
22483 {
22484 tile4.frameX = 66;
22485 tile4.frameY = 242;
22486 }
22487 }
22488 else
22489 {
22490 if (num4 == 0)
22491 {
22492 tile4.frameX = 88;
22493 tile4.frameY = 66;
22494 }
22495 if (num4 == 1)
22496 {
22497 tile4.frameX = 88;
22498 tile4.frameY = 88;
22499 }
22500 if (num4 == 2)
22501 {
22502 tile4.frameX = 88;
22503 tile4.frameY = 110;
22504 }
22505 }
22506 }
22507 bool flag4 = false;
22508 bool flag5 = false;
22509 if (Main.tile[checkedX - 1, i].nactive() && !Main.tile[checkedX - 1, i].halfBrick() && Main.tile[checkedX - 1, i].slope() == 0 && IsTileTypeFitForTree(Main.tile[checkedX - 1, i].type))
22510 {
22511 flag4 = true;
22512 }
22513 if (Main.tile[checkedX + 1, i].nactive() && !Main.tile[checkedX + 1, i].halfBrick() && Main.tile[checkedX + 1, i].slope() == 0 && IsTileTypeFitForTree(Main.tile[checkedX + 1, i].type))
22514 {
22515 flag5 = true;
22516 }
22517 if (genRand.Next(3) == 0)
22518 {
22519 flag4 = false;
22520 }
22521 if (genRand.Next(3) == 0)
22522 {
22523 flag5 = false;
22524 }
22525 if (flag5)
22526 {
22527 Main.tile[checkedX + 1, i - 1].active(active: true);
22528 Main.tile[checkedX + 1, i - 1].type = settings.TreeTileType;
22529 Main.tile[checkedX + 1, i - 1].UseBlockColors(cache);
22530 num4 = genRand.Next(3);
22531 if (num4 == 0)
22532 {
22533 Main.tile[checkedX + 1, i - 1].frameX = 22;
22534 Main.tile[checkedX + 1, i - 1].frameY = 132;
22535 }
22536 if (num4 == 1)
22537 {
22538 Main.tile[checkedX + 1, i - 1].frameX = 22;
22539 Main.tile[checkedX + 1, i - 1].frameY = 154;
22540 }
22541 if (num4 == 2)
22542 {
22543 Main.tile[checkedX + 1, i - 1].frameX = 22;
22544 Main.tile[checkedX + 1, i - 1].frameY = 176;
22545 }
22546 }
22547 if (flag4)
22548 {
22549 Main.tile[checkedX - 1, i - 1].active(active: true);
22550 Main.tile[checkedX - 1, i - 1].type = settings.TreeTileType;
22551 Main.tile[checkedX - 1, i - 1].UseBlockColors(cache);
22552 num4 = genRand.Next(3);
22553 if (num4 == 0)
22554 {
22555 Main.tile[checkedX - 1, i - 1].frameX = 44;
22556 Main.tile[checkedX - 1, i - 1].frameY = 132;
22557 }
22558 if (num4 == 1)
22559 {
22560 Main.tile[checkedX - 1, i - 1].frameX = 44;
22561 Main.tile[checkedX - 1, i - 1].frameY = 154;
22562 }
22563 if (num4 == 2)
22564 {
22565 Main.tile[checkedX - 1, i - 1].frameX = 44;
22566 Main.tile[checkedX - 1, i - 1].frameY = 176;
22567 }
22568 }
22569 num4 = genRand.Next(3);
22570 if (flag4 && flag5)
22571 {
22572 if (num4 == 0)
22573 {
22574 Main.tile[checkedX, i - 1].frameX = 88;
22575 Main.tile[checkedX, i - 1].frameY = 132;
22576 }
22577 if (num4 == 1)
22578 {
22579 Main.tile[checkedX, i - 1].frameX = 88;
22580 Main.tile[checkedX, i - 1].frameY = 154;
22581 }
22582 if (num4 == 2)
22583 {
22584 Main.tile[checkedX, i - 1].frameX = 88;
22585 Main.tile[checkedX, i - 1].frameY = 176;
22586 }
22587 }
22588 else if (flag4)
22589 {
22590 if (num4 == 0)
22591 {
22592 Main.tile[checkedX, i - 1].frameX = 0;
22593 Main.tile[checkedX, i - 1].frameY = 132;
22594 }
22595 if (num4 == 1)
22596 {
22597 Main.tile[checkedX, i - 1].frameX = 0;
22598 Main.tile[checkedX, i - 1].frameY = 154;
22599 }
22600 if (num4 == 2)
22601 {
22602 Main.tile[checkedX, i - 1].frameX = 0;
22603 Main.tile[checkedX, i - 1].frameY = 176;
22604 }
22605 }
22606 else if (flag5)
22607 {
22608 if (num4 == 0)
22609 {
22610 Main.tile[checkedX, i - 1].frameX = 66;
22611 Main.tile[checkedX, i - 1].frameY = 132;
22612 }
22613 if (num4 == 1)
22614 {
22615 Main.tile[checkedX, i - 1].frameX = 66;
22616 Main.tile[checkedX, i - 1].frameY = 154;
22617 }
22618 if (num4 == 2)
22619 {
22620 Main.tile[checkedX, i - 1].frameX = 66;
22621 Main.tile[checkedX, i - 1].frameY = 176;
22622 }
22623 }
22624 if (genRand.Next(13) != 0)
22625 {
22626 num4 = genRand.Next(3);
22627 if (num4 == 0)
22628 {
22629 Main.tile[checkedX, i - num2].frameX = 22;
22630 Main.tile[checkedX, i - num2].frameY = 198;
22631 }
22632 if (num4 == 1)
22633 {
22634 Main.tile[checkedX, i - num2].frameX = 22;
22635 Main.tile[checkedX, i - num2].frameY = 220;
22636 }
22637 if (num4 == 2)
22638 {
22639 Main.tile[checkedX, i - num2].frameX = 22;
22640 Main.tile[checkedX, i - num2].frameY = 242;
22641 }
22642 }
22643 else
22644 {
22645 num4 = genRand.Next(3);
22646 if (num4 == 0)
22647 {
22648 Main.tile[checkedX, i - num2].frameX = 0;
22649 Main.tile[checkedX, i - num2].frameY = 198;
22650 }
22651 if (num4 == 1)
22652 {
22653 Main.tile[checkedX, i - num2].frameX = 0;
22654 Main.tile[checkedX, i - num2].frameY = 220;
22655 }
22656 if (num4 == 2)
22657 {
22658 Main.tile[checkedX, i - num2].frameX = 0;
22659 Main.tile[checkedX, i - num2].frameY = 242;
22660 }
22661 }
22662 RangeFrame(checkedX - 2, i - num2 - 1, checkedX + 2, i + 1);
22663 if (Main.netMode == 2)
22664 {
22665 NetMessage.SendTileSquare(-1, checkedX - 1, i - num2, 3, num2);
22666 }
22667 return true;
22668 }
static bool IsTileTypeFitForTree(ushort type)
static volatile bool gen
Definition WorldGen.cs:972
static UnifiedRandom genRand
Definition WorldGen.cs:1215
static bool EmptyTileCheck(int startX, int endX, int startY, int endY, int ignoreID=-1)
static void RangeFrame(int startX, int startY, int endX, int endY)

References Terraria.WorldGen.GrowTreeSettings.GroundTest, Terraria.Tile.halfBrick(), Terraria.Tile.nactive(), Terraria.Main.netMode, Terraria.WorldGen.GrowTreeSettings.SaplingTileType, Terraria.NetMessage.SendTileSquare(), Terraria.Tile.slope(), Terraria.Main.tenthAnniversaryWorld, Terraria.Main.tile, Terraria.WorldGen.GrowTreeSettings.TreeHeightMax, Terraria.WorldGen.GrowTreeSettings.TreeHeightMin, Terraria.WorldGen.GrowTreeSettings.TreeTileType, Terraria.WorldGen.GrowTreeSettings.TreeTopPaddingNeeded, Terraria.Tile.type, and Terraria.WorldGen.GrowTreeSettings.WallTest.