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

◆ Draw()

void Terraria.GameContent.Drawing.TileDrawing.Draw ( bool solidLayer,
bool forRenderTargets,
bool intoRenderTargets,
int waterStyleOverride = -1 )
inline

Definition at line 448 of file TileDrawing.cs.

449 {
451 stopwatch.Start();
452 _isActiveAndNotPaused = !Main.gamePaused && Main.instance.IsActive;
453 _localPlayer = Main.LocalPlayer;
454 Vector2 unscaledPosition = Main.Camera.UnscaledPosition;
455 Vector2 vector = new Vector2(Main.offScreenRange, Main.offScreenRange);
456 if (Main.drawToScreen)
457 {
459 }
460 if (!solidLayer)
461 {
462 Main.critterCage = false;
463 }
466 bool flag = intoRenderTargets || Main.LightingEveryFrame;
467 if (flag)
468 {
470 }
471 float num = 255f * (1f - Main.gfxQuality) + 30f * Main.gfxQuality;
472 _highQualityLightingRequirement.R = (byte)num;
473 _highQualityLightingRequirement.G = (byte)((double)num * 1.1);
474 _highQualityLightingRequirement.B = (byte)((double)num * 1.2);
475 float num2 = 50f * (1f - Main.gfxQuality) + 2f * Main.gfxQuality;
476 _mediumQualityLightingRequirement.R = (byte)num2;
477 _mediumQualityLightingRequirement.G = (byte)((double)num2 * 1.1);
478 _mediumQualityLightingRequirement.B = (byte)((double)num2 * 1.2);
479 GetScreenDrawArea(unscaledPosition, vector + (Main.Camera.UnscaledPosition - Main.Camera.ScaledPosition), out var firstTileX, out var lastTileX, out var firstTileY, out var lastTileY);
480 byte b = (byte)(100f + 150f * Main.martianLight);
481 _martianGlow = new Color(b, b, b, 0);
483 for (int i = firstTileY; i < lastTileY + 4; i++)
484 {
485 for (int j = firstTileX - 2; j < lastTileX + 2; j++)
486 {
487 Tile tile = Main.tile[j, i];
488 if (tile == null)
489 {
490 tile = new Tile();
491 Main.tile[j, i] = tile;
492 Main.mapTime += 60;
493 }
494 else
495 {
496 if (!tile.active() || IsTileDrawLayerSolid(tile.type) != solidLayer)
497 {
498 continue;
499 }
500 if (solidLayer)
501 {
503 }
504 ushort type = tile.type;
505 short frameX = tile.frameX;
506 short frameY = tile.frameY;
507 if (!TextureAssets.Tile[type].IsLoaded)
508 {
509 Main.instance.LoadTiles(type);
510 }
511 switch (type)
512 {
513 case 52:
514 case 62:
515 case 115:
516 case 205:
517 case 382:
518 case 528:
519 case 636:
520 case 638:
521 if (flag)
522 {
524 }
525 continue;
526 case 549:
527 if (flag)
528 {
530 }
531 continue;
532 case 34:
533 if (frameX % 54 == 0 && frameY % 54 == 0 && flag)
534 {
535 AddSpecialPoint(j, i, TileCounterType.MultiTileVine);
536 }
537 continue;
538 case 454:
539 if (frameX % 72 == 0 && frameY % 54 == 0 && flag)
540 {
541 AddSpecialPoint(j, i, TileCounterType.MultiTileVine);
542 }
543 continue;
544 case 42:
545 case 270:
546 case 271:
547 case 572:
548 case 581:
549 case 660:
550 if (frameX % 18 == 0 && frameY % 36 == 0 && flag)
551 {
552 AddSpecialPoint(j, i, TileCounterType.MultiTileVine);
553 }
554 continue;
555 case 91:
556 if (frameX % 18 == 0 && frameY % 54 == 0 && flag)
557 {
558 AddSpecialPoint(j, i, TileCounterType.MultiTileVine);
559 }
560 continue;
561 case 95:
562 case 126:
563 case 444:
564 if (frameX % 36 == 0 && frameY % 36 == 0 && flag)
565 {
566 AddSpecialPoint(j, i, TileCounterType.MultiTileVine);
567 }
568 continue;
569 case 465:
570 case 591:
571 case 592:
572 if (frameX % 36 == 0 && frameY % 54 == 0 && flag)
573 {
574 AddSpecialPoint(j, i, TileCounterType.MultiTileVine);
575 }
576 continue;
577 case 27:
578 if (frameX % 36 == 0 && frameY == 0 && flag)
579 {
580 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
581 }
582 continue;
583 case 236:
584 case 238:
585 if (frameX % 36 == 0 && frameY == 0 && flag)
586 {
587 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
588 }
589 continue;
590 case 233:
591 if (frameY == 0 && frameX % 54 == 0 && flag)
592 {
593 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
594 }
595 if (frameY == 34 && frameX % 36 == 0 && flag)
596 {
597 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
598 }
599 continue;
600 case 652:
601 if (frameX % 36 == 0 && flag)
602 {
603 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
604 }
605 continue;
606 case 651:
607 if (frameX % 54 == 0 && flag)
608 {
609 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
610 }
611 continue;
612 case 530:
613 if (frameX < 270)
614 {
615 if (frameX % 54 == 0 && frameY == 0 && flag)
616 {
617 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
618 }
619 continue;
620 }
621 break;
622 case 485:
623 case 489:
624 case 490:
625 if (frameY == 0 && frameX % 36 == 0 && flag)
626 {
627 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
628 }
629 continue;
630 case 521:
631 case 522:
632 case 523:
633 case 524:
634 case 525:
635 case 526:
636 case 527:
637 if (frameY == 0 && frameX % 36 == 0 && flag)
638 {
639 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
640 }
641 continue;
642 case 493:
643 if (frameY == 0 && frameX % 18 == 0 && flag)
644 {
645 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
646 }
647 continue;
648 case 519:
649 if (frameX / 18 <= 4 && flag)
650 {
651 AddSpecialPoint(j, i, TileCounterType.MultiTileGrass);
652 }
653 continue;
654 case 373:
655 case 374:
656 case 375:
657 case 461:
658 EmitLiquidDrops(i, j, tile, type);
659 continue;
660 case 491:
661 if (flag && frameX == 18 && frameY == 18)
662 {
663 AddSpecialPoint(j, i, TileCounterType.VoidLens);
664 }
665 break;
666 case 597:
667 if (flag && frameX % 54 == 0 && frameY == 0)
668 {
669 AddSpecialPoint(j, i, TileCounterType.TeleportationPylon);
670 }
671 break;
672 case 617:
673 if (flag && frameX % 54 == 0 && frameY % 72 == 0)
674 {
675 AddSpecialPoint(j, i, TileCounterType.MasterTrophy);
676 }
677 break;
678 case 184:
679 if (flag)
680 {
681 AddSpecialPoint(j, i, TileCounterType.AnyDirectionalGrass);
682 }
683 continue;
684 default:
685 if (ShouldSwayInWind(j, i, tile))
686 {
687 if (flag)
688 {
689 AddSpecialPoint(j, i, TileCounterType.WindyGrass);
690 }
691 continue;
692 }
693 break;
694 }
696 }
697 }
698 }
699 if (solidLayer)
700 {
701 Main.instance.DrawTileCracks(1, Main.player[Main.myPlayer].hitReplace);
702 Main.instance.DrawTileCracks(1, Main.player[Main.myPlayer].hitTile);
703 }
705 if (TileObject.objectPreview.Active && _localPlayer.cursorItemIconEnabled && Main.placementPreview && !CaptureManager.Instance.Active)
706 {
707 Main.instance.LoadTiles(TileObject.objectPreview.Type);
708 TileObject.DrawPreview(Main.spriteBatch, TileObject.objectPreview, unscaledPosition - vector);
709 }
710 if (solidLayer)
711 {
712 TimeLogger.DrawTime(0, stopwatch.Elapsed.TotalMilliseconds);
713 }
714 else
715 {
716 TimeLogger.DrawTime(1, stopwatch.Elapsed.TotalMilliseconds);
717 }
718 }
void GetScreenDrawArea(Vector2 screenPosition, Vector2 offSet, out int firstTileX, out int lastTileX, out int firstTileY, out int lastTileY)
bool IsTileDrawLayerSolid(ushort typeCache)
bool ShouldSwayInWind(int x, int y, Tile tileCache)
void AddSpecialPoint(int x, int y, TileCounterType type)
void EmitLiquidDrops(int j, int i, Tile tileCache, ushort typeCache)
void DrawSingleTile(TileDrawInfo drawData, bool solidLayer, int waterStyleOverride, Vector2 screenPosition, Vector2 screenOffset, int tileX, int tileY)
void CrawlToBottomOfReverseVineAndAddSpecialPoint(int j, int i)
ThreadLocal< TileDrawInfo > _currentTileDrawInfo
void CrawlToTopOfVineAndAddSpecialPoint(int j, int i)
void DrawTile_LiquidBehindTile(bool solidLayer, bool inFrontOfPlayers, int waterStyleOverride, Vector2 screenPosition, Vector2 screenOffset, int tileX, int tileY, Tile tileCache)
void DrawSpecialTilesLegacy(Vector2 screenPosition, Vector2 offSet)
bool cursorItemIconEnabled
Definition Player.cs:1489

References Terraria.GameContent.Drawing.TileDrawing._currentTileDrawInfo, Terraria.GameContent.Drawing.TileDrawing._isActiveAndNotPaused, Terraria.GameContent.Drawing.TileDrawing._localPlayer, Terraria.GameContent.Drawing.TileDrawing._martianGlow, Terraria.Tile.active(), Terraria.GameContent.Drawing.TileDrawing.AddSpecialPoint(), Terraria.Main.Camera, Terraria.GameContent.Drawing.TileDrawing.ClearCachedTileDraws(), Terraria.GameContent.Drawing.TileDrawing.ClearLegacyCachedDraws(), Microsoft.Xna.Framework.Graphics.Color, Terraria.GameContent.Drawing.TileDrawing.CrawlToBottomOfReverseVineAndAddSpecialPoint(), Terraria.GameContent.Drawing.TileDrawing.CrawlToTopOfVineAndAddSpecialPoint(), Terraria.Player.cursorItemIconEnabled, Terraria.TileObject.DrawPreview(), Terraria.GameContent.Drawing.TileDrawing.DrawSingleTile(), Terraria.GameContent.Drawing.TileDrawing.DrawSpecialTilesLegacy(), Terraria.GameContent.Drawing.TileDrawing.DrawTile_LiquidBehindTile(), Terraria.TimeLogger.DrawTime(), Terraria.Main.drawToScreen, Terraria.GameContent.Drawing.TileDrawing.EmitLiquidDrops(), Terraria.GameContent.Drawing.TileDrawing.EnsureWindGridSize(), Terraria.Tile.frameX, Terraria.Tile.frameY, Terraria.GameContent.Drawing.TileDrawing.GetScreenDrawArea(), Terraria.Main.gfxQuality, Terraria.Graphics.Capture.CaptureManager.Instance, Terraria.Main.instance, Terraria.GameContent.Drawing.TileDrawing.IsTileDrawLayerSolid(), Terraria.Main.LightingEveryFrame, Terraria.Main.LocalPlayer, Terraria.Main.martianLight, Terraria.Main.myPlayer, Terraria.TileObject.objectPreview, Terraria.Main.offScreenRange, Terraria.Main.placementPreview, Terraria.Main.player, Terraria.GameContent.Drawing.TileDrawing.ShouldSwayInWind(), Terraria.Main.spriteBatch, Terraria.DataStructures.Tile, Terraria.GameContent.TextureAssets.Tile, Terraria.Main.tile, System.type, Terraria.Tile.type, System.Threading.ThreadLocal< T >.Value, System.value, Microsoft.Xna.Framework.Graphics.Vector2, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.Main.DrawTiles().