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

◆ DrawBasicTile()

void Terraria.GameContent.Drawing.TileDrawing.DrawBasicTile ( Vector2 screenPosition,
Vector2 screenOffset,
int tileX,
int tileY,
TileDrawInfo drawData,
Rectangle normalTileRect,
Vector2 normalTilePosition )
inlineprivate

Definition at line 1263 of file TileDrawing.cs.

1264 {
1265 if (TileID.Sets.Platforms[drawData.typeCache] && WorldGen.IsRope(tileX, tileY) && Main.tile[tileX, tileY - 1] != null)
1266 {
1267 _ = Main.tile[tileX, tileY - 1].type;
1268 int y = (tileY + tileX) % 3 * 18;
1270 if (tileDrawTexture != null)
1271 {
1272 Main.spriteBatch.Draw(tileDrawTexture, new Vector2(tileX * 16 - (int)screenPosition.X, tileY * 16 - (int)screenPosition.Y) + screenOffset, new Rectangle(90, y, 16, 16), drawData.tileLight, 0f, default(Vector2), 1f, drawData.tileSpriteEffect, 0f);
1273 }
1274 }
1275 if (drawData.tileCache.slope() > 0)
1276 {
1277 if (TileID.Sets.Platforms[drawData.tileCache.type])
1278 {
1279 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, normalTileRect, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1280 if (drawData.tileCache.slope() == 1 && Main.tile[tileX + 1, tileY + 1].active() && Main.tileSolid[Main.tile[tileX + 1, tileY + 1].type] && Main.tile[tileX + 1, tileY + 1].slope() != 2 && !Main.tile[tileX + 1, tileY + 1].halfBrick() && (!Main.tile[tileX, tileY + 1].active() || (Main.tile[tileX, tileY + 1].blockType() != 0 && Main.tile[tileX, tileY + 1].blockType() != 5) || (!TileID.Sets.BlocksStairs[Main.tile[tileX, tileY + 1].type] && !TileID.Sets.BlocksStairsAbove[Main.tile[tileX, tileY + 1].type])))
1281 {
1282 Rectangle value = new Rectangle(198, drawData.tileFrameY, 16, 16);
1283 if (TileID.Sets.Platforms[Main.tile[tileX + 1, tileY + 1].type] && Main.tile[tileX + 1, tileY + 1].slope() == 0)
1284 {
1285 value.X = 324;
1286 }
1287 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, 16f), value, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1288 }
1289 else if (drawData.tileCache.slope() == 2 && Main.tile[tileX - 1, tileY + 1].active() && Main.tileSolid[Main.tile[tileX - 1, tileY + 1].type] && Main.tile[tileX - 1, tileY + 1].slope() != 1 && !Main.tile[tileX - 1, tileY + 1].halfBrick() && (!Main.tile[tileX, tileY + 1].active() || (Main.tile[tileX, tileY + 1].blockType() != 0 && Main.tile[tileX, tileY + 1].blockType() != 4) || (!TileID.Sets.BlocksStairs[Main.tile[tileX, tileY + 1].type] && !TileID.Sets.BlocksStairsAbove[Main.tile[tileX, tileY + 1].type])))
1290 {
1291 Rectangle value2 = new Rectangle(162, drawData.tileFrameY, 16, 16);
1292 if (TileID.Sets.Platforms[Main.tile[tileX - 1, tileY + 1].type] && Main.tile[tileX - 1, tileY + 1].slope() == 0)
1293 {
1294 value2.X = 306;
1295 }
1296 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, 16f), value2, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1297 }
1298 return;
1299 }
1300 if (TileID.Sets.HasSlopeFrames[drawData.tileCache.type])
1301 {
1302 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, new Rectangle(drawData.tileFrameX + drawData.addFrX, drawData.tileFrameY + drawData.addFrY, 16, 16), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1303 return;
1304 }
1305 int num = drawData.tileCache.slope();
1306 int num2 = 2;
1307 for (int i = 0; i < 8; i++)
1308 {
1309 int num3 = i * -2;
1310 int num4 = 16 - i * 2;
1311 int num5 = 16 - num4;
1312 int num6;
1313 switch (num)
1314 {
1315 case 1:
1316 num3 = 0;
1317 num6 = i * 2;
1318 num4 = 14 - i * 2;
1319 num5 = 0;
1320 break;
1321 case 2:
1322 num3 = 0;
1323 num6 = 16 - i * 2 - 2;
1324 num4 = 14 - i * 2;
1325 num5 = 0;
1326 break;
1327 case 3:
1328 num6 = i * 2;
1329 break;
1330 default:
1331 num6 = 16 - i * 2 - 2;
1332 break;
1333 }
1334 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(num6, i * num2 + num3), new Rectangle(drawData.tileFrameX + drawData.addFrX + num6, drawData.tileFrameY + drawData.addFrY + num5, num2, num4), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1335 }
1336 int num7 = ((num <= 2) ? 14 : 0);
1337 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, num7), new Rectangle(drawData.tileFrameX + drawData.addFrX, drawData.tileFrameY + drawData.addFrY + num7, 16, 2), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1338 return;
1339 }
1340 if (!TileID.Sets.Platforms[drawData.typeCache] && !TileID.Sets.IgnoresNearbyHalfbricksWhenDrawn[drawData.typeCache] && _tileSolid[drawData.typeCache] && !TileID.Sets.NotReallySolid[drawData.typeCache] && !drawData.tileCache.halfBrick() && (Main.tile[tileX - 1, tileY].halfBrick() || Main.tile[tileX + 1, tileY].halfBrick()))
1341 {
1342 if (Main.tile[tileX - 1, tileY].halfBrick() && Main.tile[tileX + 1, tileY].halfBrick())
1343 {
1344 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, 8f), new Rectangle(drawData.tileFrameX + drawData.addFrX, drawData.addFrY + drawData.tileFrameY + 8, drawData.tileWidth, 8), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1345 Rectangle value3 = new Rectangle(126 + drawData.addFrX, drawData.addFrY, 16, 8);
1346 if (Main.tile[tileX, tileY - 1].active() && !Main.tile[tileX, tileY - 1].bottomSlope() && Main.tile[tileX, tileY - 1].type == drawData.typeCache)
1347 {
1348 value3 = new Rectangle(90 + drawData.addFrX, drawData.addFrY, 16, 8);
1349 }
1350 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, value3, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1351 }
1352 else if (Main.tile[tileX - 1, tileY].halfBrick())
1353 {
1354 int num8 = 4;
1356 {
1357 num8 = 2;
1358 }
1359 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, 8f), new Rectangle(drawData.tileFrameX + drawData.addFrX, drawData.addFrY + drawData.tileFrameY + 8, drawData.tileWidth, 8), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1360 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(num8, 0f), new Rectangle(drawData.tileFrameX + num8 + drawData.addFrX, drawData.addFrY + drawData.tileFrameY, drawData.tileWidth - num8, drawData.tileHeight), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1361 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, new Rectangle(144 + drawData.addFrX, drawData.addFrY, num8, 8), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1362 if (num8 == 2)
1363 {
1364 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, new Rectangle(148 + drawData.addFrX, drawData.addFrY, 2, 2), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1365 }
1366 }
1367 else if (Main.tile[tileX + 1, tileY].halfBrick())
1368 {
1369 int num9 = 4;
1371 {
1372 num9 = 2;
1373 }
1374 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, 8f), new Rectangle(drawData.tileFrameX + drawData.addFrX, drawData.addFrY + drawData.tileFrameY + 8, drawData.tileWidth, 8), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1375 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, new Rectangle(drawData.tileFrameX + drawData.addFrX, drawData.addFrY + drawData.tileFrameY, drawData.tileWidth - num9, drawData.tileHeight), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1376 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(16 - num9, 0f), new Rectangle(144 + (16 - num9), 0, num9, 8), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1377 if (num9 == 2)
1378 {
1379 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(14f, 0f), new Rectangle(156, 0, 2, 2), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1380 }
1381 }
1382 return;
1383 }
1384 if (Lighting.NotRetro && _tileSolid[drawData.typeCache] && !drawData.tileCache.halfBrick() && !TileID.Sets.DontDrawTileSliced[drawData.tileCache.type])
1385 {
1387 return;
1388 }
1389 if (drawData.halfBrickHeight == 8 && (!Main.tile[tileX, tileY + 1].active() || !_tileSolid[Main.tile[tileX, tileY + 1].type] || Main.tile[tileX, tileY + 1].halfBrick()))
1390 {
1391 if (TileID.Sets.Platforms[drawData.typeCache])
1392 {
1393 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, normalTileRect, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1394 }
1395 else
1396 {
1397 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, normalTileRect.Modified(0, 0, 0, -4), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1398 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition + new Vector2(0f, 4f), new Rectangle(144 + drawData.addFrX, 66 + drawData.addFrY, drawData.tileWidth, 4), drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1399 }
1400 }
1401 else if (TileID.Sets.CritterCageLidStyle[drawData.typeCache] >= 0)
1402 {
1403 int num10 = TileID.Sets.CritterCageLidStyle[drawData.typeCache];
1404 if ((num10 < 3 && normalTileRect.Y % 54 == 0) || (num10 >= 3 && normalTileRect.Y % 36 == 0))
1405 {
1406 Vector2 position = normalTilePosition;
1407 position.Y += 8f;
1409 value4.Y += 8;
1410 value4.Height -= 8;
1411 Main.spriteBatch.Draw(drawData.drawTexture, position, value4, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1412 position = normalTilePosition;
1413 position.Y -= 2f;
1415 value4.Y = 0;
1416 value4.Height = 10;
1417 Main.spriteBatch.Draw(TextureAssets.CageTop[num10].Value, position, value4, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1418 }
1419 else
1420 {
1421 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, normalTileRect, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1422 }
1423 }
1424 else
1425 {
1426 Main.spriteBatch.Draw(drawData.drawTexture, normalTilePosition, normalTileRect, drawData.finalColor, 0f, _zero, 1f, drawData.tileSpriteEffect, 0f);
1427 }
1429 }
void DrawSingleTile_SlicedBlock(Vector2 normalTilePosition, int tileX, int tileY, TileDrawInfo drawData)
void DrawSingleTile_Flames(Vector2 screenPosition, Vector2 screenOffset, int tileX, int tileY, TileDrawInfo drawData)
Texture2D GetTileDrawTexture(Tile tile, int tileX, int tileY)
static bool[] AllBlocksWithSmoothBordersToResolveHalfBlockIssue
Definition TileID.cs:105
static bool[] BlocksStairsAbove
Definition TileID.cs:255
static bool[] HasSlopeFrames
Definition TileID.cs:183
static bool[] BlocksStairs
Definition TileID.cs:253
static bool[] IgnoresNearbyHalfbricksWhenDrawn
Definition TileID.cs:187
static bool[] DontDrawTileSliced
Definition TileID.cs:85
static bool[] NotReallySolid
Definition TileID.cs:257
static bool[] Platforms
Definition TileID.cs:163
static int[] CritterCageLidStyle
Definition TileID.cs:127

References Terraria.GameContent.Drawing.TileDrawing._tileSolid, Terraria.GameContent.Drawing.TileDrawing._zero, Terraria.ID.TileID.Sets.AllBlocksWithSmoothBordersToResolveHalfBlockIssue, Terraria.ID.TileID.Sets.BlocksStairs, Terraria.ID.TileID.Sets.BlocksStairsAbove, Terraria.GameContent.TextureAssets.CageTop, Terraria.ID.TileID.Sets.CritterCageLidStyle, Terraria.ID.TileID.Sets.DontDrawTileSliced, Terraria.GameContent.Drawing.TileDrawing.DrawSingleTile_Flames(), Terraria.GameContent.Drawing.TileDrawing.DrawSingleTile_SlicedBlock(), Terraria.GameContent.Drawing.TileDrawing.GetTileDrawTexture(), Terraria.ID.TileID.Sets.HasSlopeFrames, Terraria.ID.TileID.Sets.IgnoresNearbyHalfbricksWhenDrawn, Terraria.WorldGen.IsRope(), Terraria.ID.TileID.Sets.NotReallySolid, Terraria.Lighting.NotRetro, Terraria.ID.TileID.Sets.Platforms, Terraria.Main.spriteBatch, Terraria.Main.tile, Terraria.Main.tileSolid, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

Referenced by Terraria.GameContent.Drawing.TileDrawing.DrawSingleTile().