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

◆ ApplySurfaceLight()

void Terraria.Graphics.Light.TileLightScanner.ApplySurfaceLight ( Tile tile,
int x,
int y,
ref Vector3 lightColor )
inlineprivate

Definition at line 2377 of file TileLightScanner.cs.

2378 {
2379 float num = 0f;
2380 float num2 = 0f;
2381 float num3 = 0f;
2382 float num4 = (float)(int)Main.tileColor.R / 255f;
2383 float num5 = (float)(int)Main.tileColor.G / 255f;
2384 float num6 = (float)(int)Main.tileColor.B / 255f;
2385 float num7 = (num4 + num5 + num6) / 3f;
2386 if (tile.active() && TileID.Sets.AllowLightInWater[tile.type])
2387 {
2388 if (lightColor.X < num7 && (Main.wallLight[tile.wall] || tile.wall == 73 || tile.wall == 227 || (tile.invisibleWall() && !_drawInvisibleWalls)))
2389 {
2390 num = num4;
2391 num2 = num5;
2392 num3 = num6;
2393 }
2394 }
2395 else if ((!tile.active() || !Main.tileNoSunLight[tile.type] || ((tile.slope() != 0 || tile.halfBrick() || (tile.invisibleBlock() && !_drawInvisibleWalls)) && Main.tile[x, y - 1].liquid == 0 && Main.tile[x, y + 1].liquid == 0 && Main.tile[x - 1, y].liquid == 0 && Main.tile[x + 1, y].liquid == 0)) && lightColor.X < num7 && (Main.wallLight[tile.wall] || tile.wall == 73 || tile.wall == 227 || (tile.invisibleWall() && !_drawInvisibleWalls)))
2396 {
2397 if (tile.liquid < 200)
2398 {
2399 if (!tile.halfBrick() || Main.tile[x, y - 1].liquid < 200)
2400 {
2401 num = num4;
2402 num2 = num5;
2403 num3 = num6;
2404 }
2405 }
2406 else if (Main.liquidAlpha[13] > 0f)
2407 {
2408 if (Main.rand == null)
2409 {
2410 Main.rand = new UnifiedRandom();
2411 }
2412 num3 = num6 * 0.175f * (1f + Main.rand.NextFloat() * 0.13f) * Main.liquidAlpha[13];
2413 }
2414 }
2415 if ((!tile.active() || tile.halfBrick() || !Main.tileNoSunLight[tile.type]) && ((tile.wall >= 88 && tile.wall <= 93) || tile.wall == 241) && tile.liquid < byte.MaxValue)
2416 {
2417 num = num4;
2418 num2 = num5;
2419 num3 = num6;
2420 int num8 = tile.wall - 88;
2421 if (tile.wall == 241)
2422 {
2423 num8 = 6;
2424 }
2425 switch (num8)
2426 {
2427 case 0:
2428 num *= 0.9f;
2429 num2 *= 0.15f;
2430 num3 *= 0.9f;
2431 break;
2432 case 1:
2433 num *= 0.9f;
2434 num2 *= 0.9f;
2435 num3 *= 0.15f;
2436 break;
2437 case 2:
2438 num *= 0.15f;
2439 num2 *= 0.15f;
2440 num3 *= 0.9f;
2441 break;
2442 case 3:
2443 num *= 0.15f;
2444 num2 *= 0.9f;
2445 num3 *= 0.15f;
2446 break;
2447 case 4:
2448 num *= 0.9f;
2449 num2 *= 0.15f;
2450 num3 *= 0.15f;
2451 break;
2452 case 5:
2453 {
2454 float num9 = 0.2f;
2455 float num10 = 0.7f - num9;
2456 num *= num10 + (float)Main.DiscoR / 255f * num9;
2457 num2 *= num10 + (float)Main.DiscoG / 255f * num9;
2458 num3 *= num10 + (float)Main.DiscoB / 255f * num9;
2459 break;
2460 }
2461 case 6:
2462 num *= 0.9f;
2463 num2 *= 0.5f;
2464 num3 *= 0f;
2465 break;
2466 }
2467 }
2468 float num11 = 1f - Main.shimmerDarken;
2469 num *= num11;
2470 num2 *= num11;
2471 num3 *= num11;
2472 if (lightColor.X < num)
2473 {
2474 lightColor.X = num;
2475 }
2476 if (lightColor.Y < num2)
2477 {
2478 lightColor.Y = num2;
2479 }
2480 if (lightColor.Z < num3)
2481 {
2482 lightColor.Z = num3;
2483 }
2484 }
static bool[] AllowLightInWater
Definition TileID.cs:261

References Terraria.Graphics.Light.TileLightScanner._drawInvisibleWalls, Terraria.Tile.active(), Terraria.ID.TileID.Sets.AllowLightInWater, Terraria.Main.DiscoB, Terraria.Main.DiscoG, Terraria.Main.DiscoR, Terraria.Tile.halfBrick(), Terraria.Tile.invisibleBlock(), Terraria.Tile.invisibleWall(), Terraria.Tile.liquid, Terraria.Main.liquidAlpha, Terraria.Main.rand, Terraria.Main.shimmerDarken, Terraria.Tile.slope(), Terraria.Main.tile, Terraria.Main.tileNoSunLight, Terraria.Tile.type, Terraria.Tile.wall, and Terraria.Main.wallLight.

Referenced by Terraria.Graphics.Light.TileLightScanner.GetTileLight().