Terraria 1.4.0.5 Source Code

This commit is contained in:
MikeyIsBaeYT 2021-10-26 12:45:26 -04:00
commit 05205f009e
1059 changed files with 563450 additions and 0 deletions

View file

@ -0,0 +1,178 @@
// Decompiled with JetBrains decompiler
// Type: Terraria.GameContent.Drawing.WallDrawing
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Diagnostics;
using Terraria.Graphics;
using Terraria.ID;
namespace Terraria.GameContent.Drawing
{
public class WallDrawing
{
private static VertexColors _glowPaintColors = new VertexColors(Color.White);
private Tile[,] _tileArray;
private TilePaintSystemV2 _paintSystem;
public WallDrawing(TilePaintSystemV2 paintSystem) => this._paintSystem = paintSystem;
public void DrawWalls()
{
float gfxQuality = Main.gfxQuality;
int offScreenRange = Main.offScreenRange;
int num1 = Main.drawToScreen ? 1 : 0;
Vector2 screenPosition = Main.screenPosition;
int screenWidth = Main.screenWidth;
int screenHeight = Main.screenHeight;
int maxTilesX = Main.maxTilesX;
int maxTilesY = Main.maxTilesY;
int[] wallBlend = Main.wallBlend;
SpriteBatch spriteBatch = Main.spriteBatch;
TileBatch tileBatch = Main.tileBatch;
this._tileArray = Main.tile;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
int num2;
int num3 = (int) ((double) (num2 = (int) (120.0 * (1.0 - (double) gfxQuality) + 40.0 * (double) gfxQuality)) * 0.400000005960464);
int num4 = (int) ((double) num2 * 0.349999994039536);
int num5 = (int) ((double) num2 * 0.300000011920929);
Vector2 vector2 = new Vector2((float) offScreenRange, (float) offScreenRange);
if (num1 != 0)
vector2 = Vector2.Zero;
int num6 = (int) (((double) screenPosition.X - (double) vector2.X) / 16.0 - 1.0);
int num7 = (int) (((double) screenPosition.X + (double) screenWidth + (double) vector2.X) / 16.0) + 2;
int num8 = (int) (((double) screenPosition.Y - (double) vector2.Y) / 16.0 - 1.0);
int num9 = (int) (((double) screenPosition.Y + (double) screenHeight + (double) vector2.Y) / 16.0) + 5;
int num10 = offScreenRange / 16;
int num11 = offScreenRange / 16;
if (num6 - num10 < 4)
num6 = num10 + 4;
if (num7 + num10 > maxTilesX - 4)
num7 = maxTilesX - num10 - 4;
if (num8 - num11 < 4)
num8 = num11 + 4;
if (num9 + num11 > maxTilesY - 4)
num9 = maxTilesY - num11 - 4;
VertexColors vertices = new VertexColors();
Rectangle rectangle = new Rectangle(0, 0, 32, 32);
int underworldLayer = Main.UnderworldLayer;
Point screenOverdrawOffset = Main.GetScreenOverdrawOffset();
for (int index1 = num8 - num11 + screenOverdrawOffset.Y; index1 < num9 + num11 - screenOverdrawOffset.Y; ++index1)
{
for (int index2 = num6 - num10 + screenOverdrawOffset.X; index2 < num7 + num10 - screenOverdrawOffset.X; ++index2)
{
Tile tile = this._tileArray[index2, index1];
if (tile == null)
{
tile = new Tile();
this._tileArray[index2, index1] = tile;
}
ushort wall = tile.wall;
if (wall > (ushort) 0 && !this.FullTile(index2, index1))
{
Color color1 = Lighting.GetColor(index2, index1);
if (tile.wallColor() == (byte) 31)
color1 = Color.White;
if (color1.R != (byte) 0 || color1.G != (byte) 0 || color1.B != (byte) 0 || index1 >= underworldLayer)
{
Main.instance.LoadWall((int) wall);
rectangle.X = tile.wallFrameX();
rectangle.Y = tile.wallFrameY() + (int) Main.wallFrame[(int) wall] * 180;
switch (tile.wall)
{
case 242:
case 243:
int num12 = 20;
int num13 = ((int) Main.wallFrameCounter[(int) wall] + index2 * 11 + index1 * 27) % (num12 * 8);
rectangle.Y = tile.wallFrameY() + 180 * (num13 / num12);
break;
}
if (Lighting.NotRetro && !Main.wallLight[(int) wall] && tile.wall != (ushort) 241 && (tile.wall < (ushort) 88 || tile.wall > (ushort) 93) && !WorldGen.SolidTile(tile))
{
Texture2D tileDrawTexture = this.GetTileDrawTexture(tile, index2, index1);
if (tile.wall == (ushort) 44)
{
Color color2 = new Color((int) (byte) Main.DiscoR, (int) (byte) Main.DiscoG, (int) (byte) Main.DiscoB);
vertices.BottomLeftColor = color2;
vertices.BottomRightColor = color2;
vertices.TopLeftColor = color2;
vertices.TopRightColor = color2;
}
else
{
Lighting.GetCornerColors(index2, index1, out vertices);
if (tile.wallColor() == (byte) 31)
vertices = WallDrawing._glowPaintColors;
}
tileBatch.Draw(tileDrawTexture, new Vector2((float) (index2 * 16 - (int) screenPosition.X - 8), (float) (index1 * 16 - (int) screenPosition.Y - 8)) + vector2, new Rectangle?(rectangle), vertices, Vector2.Zero, 1f, SpriteEffects.None);
}
else
{
Color color3 = color1;
if (wall == (ushort) 44)
color3 = new Color(Main.DiscoR, Main.DiscoG, Main.DiscoB);
Texture2D tileDrawTexture = this.GetTileDrawTexture(tile, index2, index1);
spriteBatch.Draw(tileDrawTexture, new Vector2((float) (index2 * 16 - (int) screenPosition.X - 8), (float) (index1 * 16 - (int) screenPosition.Y - 8)) + vector2, new Rectangle?(rectangle), color3, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
}
if ((int) color1.R > num3 || (int) color1.G > num4 || (int) color1.B > num5)
{
int num14 = this._tileArray[index2 - 1, index1].wall <= (ushort) 0 ? 0 : (wallBlend[(int) this._tileArray[index2 - 1, index1].wall] != wallBlend[(int) tile.wall] ? 1 : 0);
bool flag1 = this._tileArray[index2 + 1, index1].wall > (ushort) 0 && wallBlend[(int) this._tileArray[index2 + 1, index1].wall] != wallBlend[(int) tile.wall];
bool flag2 = this._tileArray[index2, index1 - 1].wall > (ushort) 0 && wallBlend[(int) this._tileArray[index2, index1 - 1].wall] != wallBlend[(int) tile.wall];
bool flag3 = this._tileArray[index2, index1 + 1].wall > (ushort) 0 && wallBlend[(int) this._tileArray[index2, index1 + 1].wall] != wallBlend[(int) tile.wall];
if (num14 != 0)
spriteBatch.Draw(TextureAssets.WallOutline.Value, new Vector2((float) (index2 * 16 - (int) screenPosition.X), (float) (index1 * 16 - (int) screenPosition.Y)) + vector2, new Rectangle?(new Rectangle(0, 0, 2, 16)), color1, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
if (flag1)
spriteBatch.Draw(TextureAssets.WallOutline.Value, new Vector2((float) (index2 * 16 - (int) screenPosition.X + 14), (float) (index1 * 16 - (int) screenPosition.Y)) + vector2, new Rectangle?(new Rectangle(14, 0, 2, 16)), color1, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
if (flag2)
spriteBatch.Draw(TextureAssets.WallOutline.Value, new Vector2((float) (index2 * 16 - (int) screenPosition.X), (float) (index1 * 16 - (int) screenPosition.Y)) + vector2, new Rectangle?(new Rectangle(0, 0, 16, 2)), color1, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
if (flag3)
spriteBatch.Draw(TextureAssets.WallOutline.Value, new Vector2((float) (index2 * 16 - (int) screenPosition.X), (float) (index1 * 16 - (int) screenPosition.Y + 14)) + vector2, new Rectangle?(new Rectangle(0, 14, 16, 2)), color1, 0.0f, Vector2.Zero, 1f, SpriteEffects.None, 0.0f);
}
}
}
}
}
Main.instance.DrawTileCracks(2, Main.LocalPlayer.hitReplace);
Main.instance.DrawTileCracks(2, Main.LocalPlayer.hitTile);
TimeLogger.DrawTime(2, stopwatch.Elapsed.TotalMilliseconds);
}
private Texture2D GetTileDrawTexture(Tile tile, int tileX, int tileY)
{
Texture2D texture2D = TextureAssets.Wall[(int) tile.wall].Value;
Texture2D requestIfNotReady = this._paintSystem.TryGetWallAndRequestIfNotReady((int) tile.wall, (int) tile.wallColor());
if (requestIfNotReady != null)
texture2D = requestIfNotReady;
return texture2D;
}
protected bool FullTile(int x, int y)
{
if (this._tileArray[x - 1, y] == null || this._tileArray[x - 1, y].blockType() != 0 || this._tileArray[x + 1, y] == null || this._tileArray[x + 1, y].blockType() != 0)
return false;
Tile tile = this._tileArray[x, y];
if (tile == null || !tile.active() || (int) tile.type < TileID.Sets.DrawsWalls.Length && TileID.Sets.DrawsWalls[(int) tile.type] || !Main.tileSolid[(int) tile.type] || Main.tileSolidTop[(int) tile.type])
return false;
int frameX = (int) tile.frameX;
int frameY = (int) tile.frameY;
if (Main.tileLargeFrames[(int) tile.type] > (byte) 0)
{
if ((frameY == 18 || frameY == 108) && (frameX >= 18 && frameX <= 54 || frameX >= 108 && frameX <= 144))
return true;
}
else if (frameY == 18)
{
if (frameX >= 18 && frameX <= 54 || frameX >= 108 && frameX <= 144)
return true;
}
else if (frameY >= 90 && frameY <= 196 && (frameX <= 70 || frameX >= 144 && frameX <= 232))
return true;
return false;
}
}
}