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

◆ Update()

void Terraria.Liquid.Update ( )
inline

Definition at line 442 of file Liquid.cs.

443 {
444 Main.tileSolid[379] = true;
445 Tile tile = Main.tile[x - 1, y];
446 Tile tile2 = Main.tile[x + 1, y];
447 Tile tile3 = Main.tile[x, y - 1];
448 Tile tile4 = Main.tile[x, y + 1];
449 Tile tile5 = Main.tile[x, y];
450 if (tile5.nactive() && Main.tileSolid[tile5.type] && !Main.tileSolidTop[tile5.type])
451 {
452 _ = tile5.type;
453 _ = 10;
454 kill = 999;
455 return;
456 }
457 byte liquid = tile5.liquid;
458 float num = 0f;
459 if (y > Main.UnderworldLayer && tile5.liquidType() == 0 && tile5.liquid > 0)
460 {
461 byte b = 2;
462 if (tile5.liquid < b)
463 {
464 b = tile5.liquid;
465 }
466 tile5.liquid -= b;
467 }
468 if (tile5.liquid == 0)
469 {
470 kill = 999;
471 return;
472 }
473 if (tile5.lava())
474 {
475 LavaCheck(x, y);
476 if (!quickFall)
477 {
478 if (delay < 5)
479 {
480 delay++;
481 return;
482 }
483 delay = 0;
484 }
485 }
486 else
487 {
488 if (tile.lava())
489 {
490 AddWater(x - 1, y);
491 }
492 if (tile2.lava())
493 {
494 AddWater(x + 1, y);
495 }
496 if (tile3.lava())
497 {
498 AddWater(x, y - 1);
499 }
500 if (tile4.lava())
501 {
502 AddWater(x, y + 1);
503 }
504 if (tile5.honey())
505 {
506 HoneyCheck(x, y);
507 if (!quickFall)
508 {
509 if (delay < 10)
510 {
511 delay++;
512 return;
513 }
514 delay = 0;
515 }
516 }
517 else
518 {
519 if (tile.honey())
520 {
521 AddWater(x - 1, y);
522 }
523 if (tile2.honey())
524 {
525 AddWater(x + 1, y);
526 }
527 if (tile3.honey())
528 {
529 AddWater(x, y - 1);
530 }
531 if (tile4.honey())
532 {
533 AddWater(x, y + 1);
534 }
535 if (tile5.shimmer())
536 {
537 ShimmerCheck(x, y);
538 }
539 else
540 {
541 if (tile.shimmer())
542 {
543 AddWater(x - 1, y);
544 }
545 if (tile2.shimmer())
546 {
547 AddWater(x + 1, y);
548 }
549 if (tile3.shimmer())
550 {
551 AddWater(x, y - 1);
552 }
553 if (tile4.shimmer())
554 {
555 AddWater(x, y + 1);
556 }
557 }
558 }
559 }
560 if ((!tile4.nactive() || !Main.tileSolid[tile4.type] || Main.tileSolidTop[tile4.type]) && (tile4.liquid <= 0 || tile4.liquidType() == tile5.liquidType()) && tile4.liquid < byte.MaxValue)
561 {
562 bool flag = false;
563 num = 255 - tile4.liquid;
564 if (num > (float)(int)tile5.liquid)
565 {
566 num = (int)tile5.liquid;
567 }
568 if (num == 1f && tile5.liquid == byte.MaxValue)
569 {
570 flag = true;
571 }
572 if (!flag)
573 {
574 tile5.liquid -= (byte)num;
575 }
576 tile4.liquid += (byte)num;
577 tile4.liquidType(tile5.liquidType());
578 AddWater(x, y + 1);
579 tile4.skipLiquid(skipLiquid: true);
580 tile5.skipLiquid(skipLiquid: true);
581 if (quickSettle && tile5.liquid > 250)
582 {
583 tile5.liquid = byte.MaxValue;
584 }
585 else if (!flag)
586 {
587 AddWater(x - 1, y);
588 AddWater(x + 1, y);
589 }
590 }
591 if (tile5.liquid > 0)
592 {
593 bool flag2 = true;
594 bool flag3 = true;
595 bool flag4 = true;
596 bool flag5 = true;
597 if (tile.nactive() && Main.tileSolid[tile.type] && !Main.tileSolidTop[tile.type])
598 {
599 flag2 = false;
600 }
601 else if (tile.liquid > 0 && tile.liquidType() != tile5.liquidType())
602 {
603 flag2 = false;
604 }
605 else if (Main.tile[x - 2, y].nactive() && Main.tileSolid[Main.tile[x - 2, y].type] && !Main.tileSolidTop[Main.tile[x - 2, y].type])
606 {
607 flag4 = false;
608 }
609 else if (Main.tile[x - 2, y].liquid == 0)
610 {
611 flag4 = false;
612 }
613 else if (Main.tile[x - 2, y].liquid > 0 && Main.tile[x - 2, y].liquidType() != tile5.liquidType())
614 {
615 flag4 = false;
616 }
617 if (tile2.nactive() && Main.tileSolid[tile2.type] && !Main.tileSolidTop[tile2.type])
618 {
619 flag3 = false;
620 }
621 else if (tile2.liquid > 0 && tile2.liquidType() != tile5.liquidType())
622 {
623 flag3 = false;
624 }
625 else if (Main.tile[x + 2, y].nactive() && Main.tileSolid[Main.tile[x + 2, y].type] && !Main.tileSolidTop[Main.tile[x + 2, y].type])
626 {
627 flag5 = false;
628 }
629 else if (Main.tile[x + 2, y].liquid == 0)
630 {
631 flag5 = false;
632 }
633 else if (Main.tile[x + 2, y].liquid > 0 && Main.tile[x + 2, y].liquidType() != tile5.liquidType())
634 {
635 flag5 = false;
636 }
637 int num2 = 0;
638 if (tile5.liquid < 3)
639 {
640 num2 = -1;
641 }
642 if (tile5.liquid > 250)
643 {
644 flag4 = false;
645 flag5 = false;
646 }
647 if (flag2 && flag3)
648 {
649 if (flag4 && flag5)
650 {
651 bool flag6 = true;
652 bool flag7 = true;
653 if (Main.tile[x - 3, y].nactive() && Main.tileSolid[Main.tile[x - 3, y].type] && !Main.tileSolidTop[Main.tile[x - 3, y].type])
654 {
655 flag6 = false;
656 }
657 else if (Main.tile[x - 3, y].liquid == 0)
658 {
659 flag6 = false;
660 }
661 else if (Main.tile[x - 3, y].liquidType() != tile5.liquidType())
662 {
663 flag6 = false;
664 }
665 if (Main.tile[x + 3, y].nactive() && Main.tileSolid[Main.tile[x + 3, y].type] && !Main.tileSolidTop[Main.tile[x + 3, y].type])
666 {
667 flag7 = false;
668 }
669 else if (Main.tile[x + 3, y].liquid == 0)
670 {
671 flag7 = false;
672 }
673 else if (Main.tile[x + 3, y].liquidType() != tile5.liquidType())
674 {
675 flag7 = false;
676 }
677 if (flag6 && flag7)
678 {
679 num = tile.liquid + tile2.liquid + Main.tile[x - 2, y].liquid + Main.tile[x + 2, y].liquid + Main.tile[x - 3, y].liquid + Main.tile[x + 3, y].liquid + tile5.liquid + num2;
680 num = (float)Math.Round(num / 7f);
681 int num3 = 0;
682 tile.liquidType(tile5.liquidType());
683 if (tile.liquid != (byte)num)
684 {
685 tile.liquid = (byte)num;
686 AddWater(x - 1, y);
687 }
688 else
689 {
690 num3++;
691 }
692 tile2.liquidType(tile5.liquidType());
693 if (tile2.liquid != (byte)num)
694 {
695 tile2.liquid = (byte)num;
696 AddWater(x + 1, y);
697 }
698 else
699 {
700 num3++;
701 }
702 Main.tile[x - 2, y].liquidType(tile5.liquidType());
703 if (Main.tile[x - 2, y].liquid != (byte)num)
704 {
705 Main.tile[x - 2, y].liquid = (byte)num;
706 AddWater(x - 2, y);
707 }
708 else
709 {
710 num3++;
711 }
712 Main.tile[x + 2, y].liquidType(tile5.liquidType());
713 if (Main.tile[x + 2, y].liquid != (byte)num)
714 {
715 Main.tile[x + 2, y].liquid = (byte)num;
716 AddWater(x + 2, y);
717 }
718 else
719 {
720 num3++;
721 }
722 Main.tile[x - 3, y].liquidType(tile5.liquidType());
723 if (Main.tile[x - 3, y].liquid != (byte)num)
724 {
725 Main.tile[x - 3, y].liquid = (byte)num;
726 AddWater(x - 3, y);
727 }
728 else
729 {
730 num3++;
731 }
732 Main.tile[x + 3, y].liquidType(tile5.liquidType());
733 if (Main.tile[x + 3, y].liquid != (byte)num)
734 {
735 Main.tile[x + 3, y].liquid = (byte)num;
736 AddWater(x + 3, y);
737 }
738 else
739 {
740 num3++;
741 }
742 if (tile.liquid != (byte)num || tile5.liquid != (byte)num)
743 {
744 AddWater(x - 1, y);
745 }
746 if (tile2.liquid != (byte)num || tile5.liquid != (byte)num)
747 {
748 AddWater(x + 1, y);
749 }
750 if (Main.tile[x - 2, y].liquid != (byte)num || tile5.liquid != (byte)num)
751 {
752 AddWater(x - 2, y);
753 }
754 if (Main.tile[x + 2, y].liquid != (byte)num || tile5.liquid != (byte)num)
755 {
756 AddWater(x + 2, y);
757 }
758 if (Main.tile[x - 3, y].liquid != (byte)num || tile5.liquid != (byte)num)
759 {
760 AddWater(x - 3, y);
761 }
762 if (Main.tile[x + 3, y].liquid != (byte)num || tile5.liquid != (byte)num)
763 {
764 AddWater(x + 3, y);
765 }
766 if (num3 != 6 || tile3.liquid <= 0)
767 {
768 tile5.liquid = (byte)num;
769 }
770 }
771 else
772 {
773 int num4 = 0;
774 num = tile.liquid + tile2.liquid + Main.tile[x - 2, y].liquid + Main.tile[x + 2, y].liquid + tile5.liquid + num2;
775 num = (float)Math.Round(num / 5f);
776 tile.liquidType(tile5.liquidType());
777 if (tile.liquid != (byte)num)
778 {
779 tile.liquid = (byte)num;
780 AddWater(x - 1, y);
781 }
782 else
783 {
784 num4++;
785 }
786 tile2.liquidType(tile5.liquidType());
787 if (tile2.liquid != (byte)num)
788 {
789 tile2.liquid = (byte)num;
790 AddWater(x + 1, y);
791 }
792 else
793 {
794 num4++;
795 }
796 Main.tile[x - 2, y].liquidType(tile5.liquidType());
797 if (Main.tile[x - 2, y].liquid != (byte)num)
798 {
799 Main.tile[x - 2, y].liquid = (byte)num;
800 AddWater(x - 2, y);
801 }
802 else
803 {
804 num4++;
805 }
806 Main.tile[x + 2, y].liquidType(tile5.liquidType());
807 if (Main.tile[x + 2, y].liquid != (byte)num)
808 {
809 Main.tile[x + 2, y].liquid = (byte)num;
810 AddWater(x + 2, y);
811 }
812 else
813 {
814 num4++;
815 }
816 if (tile.liquid != (byte)num || tile5.liquid != (byte)num)
817 {
818 AddWater(x - 1, y);
819 }
820 if (tile2.liquid != (byte)num || tile5.liquid != (byte)num)
821 {
822 AddWater(x + 1, y);
823 }
824 if (Main.tile[x - 2, y].liquid != (byte)num || tile5.liquid != (byte)num)
825 {
826 AddWater(x - 2, y);
827 }
828 if (Main.tile[x + 2, y].liquid != (byte)num || tile5.liquid != (byte)num)
829 {
830 AddWater(x + 2, y);
831 }
832 if (num4 != 4 || tile3.liquid <= 0)
833 {
834 tile5.liquid = (byte)num;
835 }
836 }
837 }
838 else if (flag4)
839 {
840 num = tile.liquid + tile2.liquid + Main.tile[x - 2, y].liquid + tile5.liquid + num2;
841 num = (float)Math.Round(num / 4f);
842 tile.liquidType(tile5.liquidType());
843 if (tile.liquid != (byte)num || tile5.liquid != (byte)num)
844 {
845 tile.liquid = (byte)num;
846 AddWater(x - 1, y);
847 }
848 tile2.liquidType(tile5.liquidType());
849 if (tile2.liquid != (byte)num || tile5.liquid != (byte)num)
850 {
851 tile2.liquid = (byte)num;
852 AddWater(x + 1, y);
853 }
854 Main.tile[x - 2, y].liquidType(tile5.liquidType());
855 if (Main.tile[x - 2, y].liquid != (byte)num || tile5.liquid != (byte)num)
856 {
857 Main.tile[x - 2, y].liquid = (byte)num;
858 AddWater(x - 2, y);
859 }
860 tile5.liquid = (byte)num;
861 }
862 else if (flag5)
863 {
864 num = tile.liquid + tile2.liquid + Main.tile[x + 2, y].liquid + tile5.liquid + num2;
865 num = (float)Math.Round(num / 4f);
866 tile.liquidType(tile5.liquidType());
867 if (tile.liquid != (byte)num || tile5.liquid != (byte)num)
868 {
869 tile.liquid = (byte)num;
870 AddWater(x - 1, y);
871 }
872 tile2.liquidType(tile5.liquidType());
873 if (tile2.liquid != (byte)num || tile5.liquid != (byte)num)
874 {
875 tile2.liquid = (byte)num;
876 AddWater(x + 1, y);
877 }
878 Main.tile[x + 2, y].liquidType(tile5.liquidType());
879 if (Main.tile[x + 2, y].liquid != (byte)num || tile5.liquid != (byte)num)
880 {
881 Main.tile[x + 2, y].liquid = (byte)num;
882 AddWater(x + 2, y);
883 }
884 tile5.liquid = (byte)num;
885 }
886 else
887 {
888 num = tile.liquid + tile2.liquid + tile5.liquid + num2;
889 num = (float)Math.Round(num / 3f);
890 if (num == 254f && WorldGen.genRand.Next(30) == 0)
891 {
892 num = 255f;
893 }
894 tile.liquidType(tile5.liquidType());
895 if (tile.liquid != (byte)num)
896 {
897 tile.liquid = (byte)num;
898 AddWater(x - 1, y);
899 }
900 tile2.liquidType(tile5.liquidType());
901 if (tile2.liquid != (byte)num)
902 {
903 tile2.liquid = (byte)num;
904 AddWater(x + 1, y);
905 }
906 tile5.liquid = (byte)num;
907 }
908 }
909 else if (flag2)
910 {
911 num = tile.liquid + tile5.liquid + num2;
912 num = (float)Math.Round(num / 2f);
913 if (tile.liquid != (byte)num)
914 {
915 tile.liquid = (byte)num;
916 }
917 tile.liquidType(tile5.liquidType());
918 if (tile5.liquid != (byte)num || tile.liquid != (byte)num)
919 {
920 AddWater(x - 1, y);
921 }
922 tile5.liquid = (byte)num;
923 }
924 else if (flag3)
925 {
926 num = tile2.liquid + tile5.liquid + num2;
927 num = (float)Math.Round(num / 2f);
928 if (tile2.liquid != (byte)num)
929 {
930 tile2.liquid = (byte)num;
931 }
932 tile2.liquidType(tile5.liquidType());
933 if (tile5.liquid != (byte)num || tile2.liquid != (byte)num)
934 {
935 AddWater(x + 1, y);
936 }
937 tile5.liquid = (byte)num;
938 }
939 }
940 if (tile5.liquid != liquid)
941 {
942 if (tile5.liquid == 254 && liquid == byte.MaxValue)
943 {
944 if (quickSettle)
945 {
946 tile5.liquid = byte.MaxValue;
947 kill++;
948 }
949 else
950 {
951 kill++;
952 }
953 }
954 else
955 {
956 AddWater(x, y - 1);
957 kill = 0;
958 }
959 }
960 else
961 {
962 kill++;
963 }
964 }
static decimal Round(decimal d)
Definition Math.cs:1096
static void ShimmerCheck(int x, int y)
Definition Liquid.cs:1467
static void HoneyCheck(int x, int y)
Definition Liquid.cs:1462
static bool quickFall
Definition Liquid.cs:31
static void AddWater(int x, int y)
Definition Liquid.cs:1160
static void LavaCheck(int x, int y)
Definition Liquid.cs:1447
static bool quickSettle
Definition Liquid.cs:33

References Terraria.Liquid.AddWater(), Terraria.Liquid.delay, Terraria.WorldGen.genRand, Terraria.Tile.honey(), Terraria.Liquid.HoneyCheck(), Terraria.Liquid.kill, Terraria.Tile.lava(), Terraria.Liquid.LavaCheck(), Terraria.Tile.liquid, Terraria.Tile.liquidType(), Terraria.Tile.nactive(), Terraria.Liquid.quickFall, Terraria.Liquid.quickSettle, System.Math.Round(), Terraria.Tile.shimmer(), Terraria.Liquid.ShimmerCheck(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.Tile.type, Terraria.Main.UnderworldLayer, Terraria.Liquid.x, and Terraria.Liquid.y.