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

◆ DrawMultiTileVinesInWind()

void Terraria.GameContent.Drawing.TileDrawing.DrawMultiTileVinesInWind ( Vector2 screenPosition,
Vector2 offSet,
int topLeftX,
int topLeftY,
int sizeX,
int sizeY )
inlineprivate

Definition at line 8073 of file TileDrawing.cs.

8074 {
8076 float num = windCycle;
8077 int totalPushTime = 60;
8078 float pushForcePerFrame = 1.26f;
8081 new Vector2((float)(sizeX * 16) * 0.5f, 0f);
8082 Vector2 vector = new Vector2((float)(topLeftX * 16 - (int)screenPosition.X) + (float)sizeX * 16f * 0.5f, topLeftY * 16 - (int)screenPosition.Y) + offSet;
8083 float num2 = 0.07f;
8084 Tile tile = Main.tile[topLeftX, topLeftY];
8085 int type = tile.type;
8086 Vector2 vector2 = new Vector2(0f, -2f);
8087 vector += vector2;
8088 bool flag = false;
8089 if ((type != 465 && (uint)(type - 591) > 1u) ? (sizeX == 1 && WorldGen.IsBelowANonHammeredPlatform(topLeftX, topLeftY)) : (WorldGen.IsBelowANonHammeredPlatform(topLeftX, topLeftY) && WorldGen.IsBelowANonHammeredPlatform(topLeftX + 1, topLeftY)))
8090 {
8091 vector.Y -= 8f;
8092 vector2.Y -= 8f;
8093 }
8094 Texture2D texture2D = null;
8095 Color color = Color.Transparent;
8096 float? num3 = null;
8097 float num4 = 1f;
8098 float num5 = -4f;
8099 bool flag2 = false;
8100 num2 = 0.15f;
8101 switch (type)
8102 {
8103 case 34:
8104 case 126:
8105 num3 = 1f;
8106 num5 = 0f;
8107 switch (tile.frameY / 54 + tile.frameX / 108 * 37)
8108 {
8109 case 9:
8110 num3 = null;
8111 num5 = -1f;
8112 flag2 = true;
8113 num2 *= 0.3f;
8114 break;
8115 case 11:
8116 num2 *= 0.5f;
8117 break;
8118 case 12:
8119 num3 = null;
8120 num5 = -1f;
8121 break;
8122 case 18:
8123 num3 = null;
8124 num5 = -1f;
8125 break;
8126 case 21:
8127 num3 = null;
8128 num5 = -1f;
8129 break;
8130 case 23:
8131 num3 = 0f;
8132 break;
8133 case 25:
8134 num3 = null;
8135 num5 = -1f;
8136 flag2 = true;
8137 break;
8138 case 32:
8139 num2 *= 0.5f;
8140 break;
8141 case 33:
8142 num2 *= 0.5f;
8143 break;
8144 case 35:
8145 num3 = 0f;
8146 break;
8147 case 36:
8148 num3 = null;
8149 num5 = -1f;
8150 flag2 = true;
8151 break;
8152 case 37:
8153 num3 = null;
8154 num5 = -1f;
8155 flag2 = true;
8156 num2 *= 0.5f;
8157 break;
8158 case 39:
8159 num3 = null;
8160 num5 = -1f;
8161 flag2 = true;
8162 break;
8163 case 40:
8164 case 41:
8165 case 42:
8166 case 43:
8167 num3 = null;
8168 num5 = -2f;
8169 flag2 = true;
8170 num2 *= 0.5f;
8171 break;
8172 case 44:
8173 num3 = null;
8174 num5 = -3f;
8175 break;
8176 }
8177 break;
8178 case 42:
8179 num3 = 1f;
8180 num5 = 0f;
8181 switch (tile.frameY / 36)
8182 {
8183 case 0:
8184 num3 = null;
8185 num5 = -1f;
8186 break;
8187 case 9:
8188 num3 = 0f;
8189 break;
8190 case 12:
8191 num3 = null;
8192 num5 = -1f;
8193 break;
8194 case 14:
8195 num3 = null;
8196 num5 = -1f;
8197 break;
8198 case 28:
8199 num3 = null;
8200 num5 = -1f;
8201 break;
8202 case 30:
8203 num3 = 0f;
8204 break;
8205 case 32:
8206 num3 = 0f;
8207 break;
8208 case 33:
8209 num3 = 0f;
8210 break;
8211 case 34:
8212 num3 = null;
8213 num5 = -1f;
8214 break;
8215 case 35:
8216 num3 = 0f;
8217 break;
8218 case 38:
8219 num3 = null;
8220 num5 = -1f;
8221 break;
8222 case 39:
8223 num3 = null;
8224 num5 = -1f;
8225 flag2 = true;
8226 break;
8227 case 40:
8228 case 41:
8229 case 42:
8230 case 43:
8231 num3 = 0f;
8232 num3 = null;
8233 num5 = -1f;
8234 flag2 = true;
8235 break;
8236 }
8237 break;
8238 case 95:
8239 case 270:
8240 case 271:
8241 case 444:
8242 case 454:
8243 case 572:
8244 case 581:
8245 case 660:
8246 num3 = 1f;
8247 num5 = 0f;
8248 break;
8249 case 591:
8250 num4 = 0.5f;
8251 num5 = -2f;
8252 break;
8253 case 592:
8254 num4 = 0.5f;
8255 num5 = -2f;
8256 texture2D = TextureAssets.GlowMask[294].Value;
8257 color = new Color(255, 255, 255, 0);
8258 break;
8259 }
8260 if (flag2)
8261 {
8262 vector += new Vector2(0f, 16f);
8263 }
8264 num2 *= -1f;
8266 {
8267 windCycle -= num;
8268 }
8269 ulong num6 = 0uL;
8270 for (int i = topLeftX; i < topLeftX + sizeX; i++)
8271 {
8272 for (int j = topLeftY; j < topLeftY + sizeY; j++)
8273 {
8274 Tile tile2 = Main.tile[i, j];
8275 ushort type2 = tile2.type;
8276 if (type2 != type || !IsVisible(tile2))
8277 {
8278 continue;
8279 }
8280 Math.Abs(((float)(i - topLeftX) + 0.5f) / (float)sizeX - 0.5f);
8281 short tileFrameX = tile2.frameX;
8282 short tileFrameY = tile2.frameY;
8283 float num7 = (float)(j - topLeftY + 1) / (float)sizeY;
8284 if (num7 == 0f)
8285 {
8286 num7 = 0.1f;
8287 }
8288 if (num3.HasValue)
8289 {
8290 num7 = num3.Value;
8291 }
8292 if (flag2 && j == topLeftY)
8293 {
8294 num7 = 0f;
8295 }
8296 GetTileDrawData(i, j, tile2, type2, ref tileFrameX, ref tileFrameY, out var tileWidth, out var tileHeight, out var tileTop, out var halfBrickHeight, out var addFrX, out var addFrY, out var tileSpriteEffect, out var _, out var _, out var _);
8297 bool flag3 = _rand.Next(4) == 0;
8298 Color tileLight = Lighting.GetColor(i, j);
8299 DrawAnimatedTile_AdjustForVisionChangers(i, j, tile2, type2, tileFrameX, tileFrameY, ref tileLight, flag3);
8300 tileLight = DrawTiles_GetLightOverride(j, i, tile2, type2, tileFrameX, tileFrameY, tileLight);
8302 {
8303 DrawTiles_EmitParticles(j, i, tile2, type2, tileFrameX, tileFrameY, tileLight);
8304 }
8305 Vector2 vector3 = new Vector2(i * 16 - (int)screenPosition.X, j * 16 - (int)screenPosition.Y + tileTop) + offSet;
8306 vector3 += vector2;
8310 if (tileDrawTexture != null)
8311 {
8312 Vector2 vector6 = vector + new Vector2(0f, vector4.Y);
8313 Rectangle rectangle = new Rectangle(tileFrameX + addFrX, tileFrameY + addFrY, tileWidth, tileHeight - halfBrickHeight);
8314 float rotation = windCycle * num2 * num7;
8315 if (type2 == 660 && j == topLeftY + sizeY - 1)
8316 {
8317 Texture2D value = TextureAssets.Extra[260].Value;
8318 _ = ((float)((i + j) % 200) * 0.11f + (float)Main.timeForVisualEffects / 360f) % 1f;
8320 Main.spriteBatch.Draw(value, vector6, rectangle, white, rotation, vector5, 1f, tileSpriteEffect, 0f);
8321 }
8322 Main.spriteBatch.Draw(tileDrawTexture, vector6, rectangle, tileLight, rotation, vector5, 1f, tileSpriteEffect, 0f);
8323 if (type2 == 660 && j == topLeftY + sizeY - 1)
8324 {
8325 Texture2D value2 = TextureAssets.Extra[260].Value;
8326 Color color2 = Main.hslToRgb(((float)((i + j) % 200) * 0.11f + (float)Main.timeForVisualEffects / 360f) % 1f, 1f, 0.8f);
8327 color2.A = 127;
8329 Vector2 position = vector6;
8330 Vector2 origin = vector5;
8331 Main.spriteBatch.Draw(value2, position, value3, color2, rotation, origin, 1f, tileSpriteEffect, 0f);
8332 }
8333 if (texture2D != null)
8334 {
8335 Main.spriteBatch.Draw(texture2D, vector6, rectangle, color, rotation, vector5, 1f, tileSpriteEffect, 0f);
8336 }
8337 TileFlameData tileFlameData = GetTileFlameData(i, j, type2, tileFrameY);
8338 if (num6 == 0L)
8339 {
8340 num6 = tileFlameData.flameSeed;
8341 }
8342 tileFlameData.flameSeed = num6;
8343 for (int k = 0; k < tileFlameData.flameCount; k++)
8344 {
8345 float x = (float)Utils.RandomInt(ref tileFlameData.flameSeed, tileFlameData.flameRangeXMin, tileFlameData.flameRangeXMax) * tileFlameData.flameRangeMultX;
8346 float y = (float)Utils.RandomInt(ref tileFlameData.flameSeed, tileFlameData.flameRangeYMin, tileFlameData.flameRangeYMax) * tileFlameData.flameRangeMultY;
8347 Main.spriteBatch.Draw(tileFlameData.flameTexture, vector6 + new Vector2(x, y), rectangle, tileFlameData.flameColor, rotation, vector5, 1f, tileSpriteEffect, 0f);
8348 }
8349 }
8350 }
8351 }
8352 }
static double Abs(double value)
Color DrawTiles_GetLightOverride(int j, int i, Tile tileCache, ushort typeCache, short tileFrameX, short tileFrameY, Color tileLight)
float GetHighestWindGridPushComplex(int topLeftX, int topLeftY, int sizeX, int sizeY, int totalPushTime, float pushForcePerFrame, int loops, bool swapLoopDir)
TileFlameData GetTileFlameData(int tileX, int tileY, int type, int tileFrameY)
Texture2D GetTileDrawTexture(Tile tile, int tileX, int tileY)
void DrawTiles_EmitParticles(int j, int i, Tile tileCache, ushort typeCache, short tileFrameX, short tileFrameY, Color tileLight)
void GetTileDrawData(int x, int y, Tile tileCache, ushort typeCache, ref short tileFrameX, ref short tileFrameY, out int tileWidth, out int tileHeight, out int tileTop, out int halfBrickHeight, out int addFrX, out int addFrY, out SpriteEffects tileSpriteEffect, out Texture2D glowTexture, out Rectangle glowSourceRect, out Color glowColor)
float GetWindCycle(int x, int y, double windCounter)
bool InAPlaceWithWind(int x, int y, int width, int height)
void DrawAnimatedTile_AdjustForVisionChangers(int i, int j, Tile tileCache, ushort typeCache, short tileFrameX, short tileFrameY, ref Color tileLight, bool canDoDust)
static Color Transparent
Definition Color.cs:76

References Terraria.GameContent.Drawing.TileDrawing._isActiveAndNotPaused, Terraria.GameContent.Drawing.TileDrawing._rand, Terraria.GameContent.Drawing.TileDrawing._sunflowerWindCounter, System.Math.Abs(), Microsoft.Xna.Framework.Graphics.Color, Terraria.GameContent.Drawing.TileDrawing.DrawAnimatedTile_AdjustForVisionChangers(), Terraria.GameContent.Drawing.TileDrawing.DrawTiles_EmitParticles(), Terraria.GameContent.Drawing.TileDrawing.DrawTiles_GetLightOverride(), Terraria.GameContent.TextureAssets.Extra, Terraria.Tile.frameX, Terraria.Tile.frameY, Terraria.Lighting.GetColor(), Terraria.GameContent.Drawing.TileDrawing.GetHighestWindGridPushComplex(), Terraria.GameContent.Drawing.TileDrawing.GetTileDrawData(), Terraria.GameContent.Drawing.TileDrawing.GetTileDrawTexture(), Terraria.GameContent.Drawing.TileDrawing.GetTileFlameData(), Terraria.GameContent.Drawing.TileDrawing.GetWindCycle(), Terraria.GameContent.TextureAssets.GlowMask, Terraria.Main.hslToRgb(), Terraria.GameContent.Drawing.TileDrawing.InAPlaceWithWind(), Terraria.WorldGen.IsBelowANonHammeredPlatform(), Terraria.GameContent.Drawing.TileDrawing.IsVisible(), System.L, Terraria.Utilities.UnifiedRandom.Next(), Terraria.Utils.RandomInt(), Terraria.Main.spriteBatch, Terraria.Main.tile, Terraria.Main.timeForVisualEffects, Microsoft.Xna.Framework.Color.Transparent, System.type, Terraria.Tile.type, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Color.White, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.

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