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

◆ DrawTile_LiquidBehindTile()

void Terraria.GameContent.Drawing.TileDrawing.DrawTile_LiquidBehindTile ( bool solidLayer,
bool inFrontOfPlayers,
int waterStyleOverride,
Vector2 screenPosition,
Vector2 screenOffset,
int tileX,
int tileY,
Tile tileCache )
inlineprivate

Definition at line 2993 of file TileDrawing.cs.

2994 {
2995 Tile tile = Main.tile[tileX + 1, tileY];
2996 Tile tile2 = Main.tile[tileX - 1, tileY];
2997 Tile tile3 = Main.tile[tileX, tileY - 1];
2998 Tile tile4 = Main.tile[tileX, tileY + 1];
2999 if (tile == null)
3000 {
3001 tile = new Tile();
3002 Main.tile[tileX + 1, tileY] = tile;
3003 }
3004 if (tile2 == null)
3005 {
3006 tile2 = new Tile();
3007 Main.tile[tileX - 1, tileY] = tile2;
3008 }
3009 if (tile3 == null)
3010 {
3011 tile3 = new Tile();
3012 Main.tile[tileX, tileY - 1] = tile3;
3013 }
3014 if (tile4 == null)
3015 {
3016 tile4 = new Tile();
3017 Main.tile[tileX, tileY + 1] = tile4;
3018 }
3019 if (!tileCache.active() || tileCache.inActive() || _tileSolidTop[tileCache.type] || (tileCache.halfBrick() && (tile2.liquid > 160 || tile.liquid > 160) && Main.instance.waterfallManager.CheckForWaterfall(tileX, tileY)) || (TileID.Sets.BlocksWaterDrawingBehindSelf[tileCache.type] && tileCache.slope() == 0))
3020 {
3021 return;
3022 }
3023 int num = 0;
3024 bool flag = false;
3025 bool flag2 = false;
3026 bool flag3 = false;
3027 bool flag4 = false;
3028 bool flag5 = false;
3029 int num2 = 0;
3030 bool flag6 = false;
3031 int num3 = tileCache.slope();
3032 int num4 = tileCache.blockType();
3033 if (tileCache.type == 546 && tileCache.liquid > 0)
3034 {
3035 flag5 = true;
3036 flag4 = true;
3037 flag = true;
3038 flag2 = true;
3039 switch (tileCache.liquidType())
3040 {
3041 case 0:
3042 flag6 = true;
3043 break;
3044 case 1:
3045 num2 = 1;
3046 break;
3047 case 2:
3048 num2 = 11;
3049 break;
3050 case 3:
3051 num2 = 14;
3052 break;
3053 }
3054 num = tileCache.liquid;
3055 }
3056 else
3057 {
3058 if (tileCache.liquid > 0 && num4 != 0 && (num4 != 1 || tileCache.liquid > 160))
3059 {
3060 flag5 = true;
3061 switch (tileCache.liquidType())
3062 {
3063 case 0:
3064 flag6 = true;
3065 break;
3066 case 1:
3067 num2 = 1;
3068 break;
3069 case 2:
3070 num2 = 11;
3071 break;
3072 case 3:
3073 num2 = 14;
3074 break;
3075 }
3076 if (tileCache.liquid > num)
3077 {
3078 num = tileCache.liquid;
3079 }
3080 }
3081 if (tile2.liquid > 0 && num3 != 1 && num3 != 3)
3082 {
3083 flag = true;
3084 switch (tile2.liquidType())
3085 {
3086 case 0:
3087 flag6 = true;
3088 break;
3089 case 1:
3090 num2 = 1;
3091 break;
3092 case 2:
3093 num2 = 11;
3094 break;
3095 case 3:
3096 num2 = 14;
3097 break;
3098 }
3099 if (tile2.liquid > num)
3100 {
3101 num = tile2.liquid;
3102 }
3103 }
3104 if (tile.liquid > 0 && num3 != 2 && num3 != 4)
3105 {
3106 flag2 = true;
3107 switch (tile.liquidType())
3108 {
3109 case 0:
3110 flag6 = true;
3111 break;
3112 case 1:
3113 num2 = 1;
3114 break;
3115 case 2:
3116 num2 = 11;
3117 break;
3118 case 3:
3119 num2 = 14;
3120 break;
3121 }
3122 if (tile.liquid > num)
3123 {
3124 num = tile.liquid;
3125 }
3126 }
3127 if (tile3.liquid > 0 && num3 != 3 && num3 != 4)
3128 {
3129 flag3 = true;
3130 switch (tile3.liquidType())
3131 {
3132 case 0:
3133 flag6 = true;
3134 break;
3135 case 1:
3136 num2 = 1;
3137 break;
3138 case 2:
3139 num2 = 11;
3140 break;
3141 case 3:
3142 num2 = 14;
3143 break;
3144 }
3145 }
3146 if (tile4.liquid > 0 && num3 != 1 && num3 != 2)
3147 {
3148 if (tile4.liquid > 240)
3149 {
3150 flag4 = true;
3151 }
3152 switch (tile4.liquidType())
3153 {
3154 case 0:
3155 flag6 = true;
3156 break;
3157 case 1:
3158 num2 = 1;
3159 break;
3160 case 2:
3161 num2 = 11;
3162 break;
3163 case 3:
3164 num2 = 14;
3165 break;
3166 }
3167 }
3168 }
3169 if (!flag3 && !flag4 && !flag && !flag2 && !flag5)
3170 {
3171 return;
3172 }
3173 if (waterStyleOverride != -1)
3174 {
3175 Main.waterStyle = waterStyleOverride;
3176 }
3177 if (num2 == 0)
3178 {
3179 num2 = Main.waterStyle;
3180 }
3181 Lighting.GetCornerColors(tileX, tileY, out var vertices);
3182 Vector2 vector = new Vector2(tileX * 16, tileY * 16);
3183 Rectangle liquidSize = new Rectangle(0, 4, 16, 16);
3184 if (flag4 && (flag || flag2))
3185 {
3186 flag = true;
3187 flag2 = true;
3188 }
3189 if (tileCache.active() && (Main.tileSolidTop[tileCache.type] || !Main.tileSolid[tileCache.type]))
3190 {
3191 return;
3192 }
3193 if ((!flag3 || !(flag || flag2)) && !(flag4 && flag3))
3194 {
3195 if (flag3)
3196 {
3197 liquidSize = new Rectangle(0, 4, 16, 4);
3198 if (tileCache.halfBrick() || tileCache.slope() != 0)
3199 {
3200 liquidSize = new Rectangle(0, 4, 16, 12);
3201 }
3202 }
3203 else if (flag4 && !flag && !flag2)
3204 {
3205 vector = new Vector2(tileX * 16, tileY * 16 + 12);
3206 liquidSize = new Rectangle(0, 4, 16, 4);
3207 }
3208 else
3209 {
3210 float num5 = (float)(256 - num) / 32f;
3211 int y = 4;
3212 if (tile3.liquid == 0 && (num4 != 0 || !WorldGen.SolidTile(tileX, tileY - 1)))
3213 {
3214 y = 0;
3215 }
3216 int num6 = (int)num5 * 2;
3217 if (tileCache.slope() != 0)
3218 {
3219 vector = new Vector2(tileX * 16, tileY * 16 + num6);
3220 liquidSize = new Rectangle(0, num6, 16, 16 - num6);
3221 }
3222 else if ((flag && flag2) || tileCache.halfBrick())
3223 {
3224 vector = new Vector2(tileX * 16, tileY * 16 + num6);
3225 liquidSize = new Rectangle(0, y, 16, 16 - num6);
3226 }
3227 else if (flag)
3228 {
3229 vector = new Vector2(tileX * 16, tileY * 16 + num6);
3230 liquidSize = new Rectangle(0, y, 4, 16 - num6);
3231 }
3232 else
3233 {
3234 vector = new Vector2(tileX * 16 + 12, tileY * 16 + num6);
3235 liquidSize = new Rectangle(0, y, 4, 16 - num6);
3236 }
3237 }
3238 }
3239 Vector2 position = vector - screenPosition + screenOffset;
3240 float num7 = 0.5f;
3241 switch (num2)
3242 {
3243 case 1:
3244 num7 = 1f;
3245 break;
3246 case 11:
3247 num7 = Math.Max(num7 * 1.7f, 1f);
3248 break;
3249 }
3251 {
3252 num7 = 1f;
3253 if (tileCache.wall == 21)
3254 {
3255 num7 = 0.9f;
3256 }
3257 else if (tileCache.wall > 0)
3258 {
3259 num7 = 0.6f;
3260 }
3261 }
3262 if (tileCache.halfBrick() && tile3.liquid > 0 && tileCache.wall > 0)
3263 {
3264 num7 = 0f;
3265 }
3266 if (num3 == 4 && tile2.liquid == 0 && !WorldGen.SolidTile(tileX - 1, tileY))
3267 {
3268 num7 = 0f;
3269 }
3270 if (num3 == 3 && tile.liquid == 0 && !WorldGen.SolidTile(tileX + 1, tileY))
3271 {
3272 num7 = 0f;
3273 }
3274 vertices.BottomLeftColor *= num7;
3275 vertices.BottomRightColor *= num7;
3276 vertices.TopLeftColor *= num7;
3277 vertices.TopRightColor *= num7;
3278 bool flag7 = false;
3279 if (flag6)
3280 {
3281 for (int i = 0; i < 15; i++)
3282 {
3283 if (Main.IsLiquidStyleWater(i) && Main.liquidAlpha[i] > 0f && i != num2)
3284 {
3285 DrawPartialLiquid(!solidLayer, tileCache, ref position, ref liquidSize, i, ref vertices);
3286 flag7 = true;
3287 break;
3288 }
3289 }
3290 }
3291 VertexColors colors = vertices;
3292 float num8 = (flag7 ? Main.liquidAlpha[num2] : 1f);
3293 colors.BottomLeftColor *= num8;
3294 colors.BottomRightColor *= num8;
3295 colors.TopLeftColor *= num8;
3296 colors.TopRightColor *= num8;
3297 if (num2 == 14)
3298 {
3300 }
3301 DrawPartialLiquid(!solidLayer, tileCache, ref position, ref liquidSize, num2, ref colors);
3302 }
static byte Max(byte val1, byte val2)
Definition Math.cs:738
void DrawPartialLiquid(bool behindBlocks, Tile tileCache, ref Vector2 position, ref Rectangle liquidSize, int liquidType, ref VertexColors colors)
static void SetShimmerVertexColors(ref VertexColors colors, float opacity, int x, int y)
static bool[] BlocksWaterDrawingBehindSelf
Definition TileID.cs:259

References Terraria.GameContent.Drawing.TileDrawing._tileSolidTop, Terraria.Tile.active(), Terraria.ID.TileID.Sets.BlocksWaterDrawingBehindSelf, Terraria.Tile.blockType(), Terraria.GameContent.Drawing.TileDrawing.DrawPartialLiquid(), Terraria.Lighting.GetCornerColors(), Terraria.Tile.halfBrick(), Terraria.Tile.inActive(), Terraria.Main.instance, Terraria.Main.IsLiquidStyleWater(), Terraria.Tile.liquid, Terraria.Main.liquidAlpha, Terraria.Tile.liquidType(), System.Math.Max(), Terraria.GameContent.Liquid.LiquidRenderer.SetShimmerVertexColors(), Terraria.Tile.slope(), Terraria.WorldGen.SolidTile(), Terraria.DataStructures.Tile, Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.Tile.type, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Tile.wall, and Terraria.Main.waterStyle.

Referenced by Terraria.GameContent.Drawing.TileDrawing.Draw(), and Terraria.GameContent.Drawing.TileDrawing.DrawLiquidBehindTiles().