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

◆ SelfFrame8Way()

static void Terraria.Framing.SelfFrame8Way ( int i,
int j,
Tile centerTile,
bool resetFrame )
inlinestatic

Definition at line 201 of file Framing.cs.

202 {
203 if (!centerTile.active())
204 {
205 return;
206 }
207 BlockStyle blockStyle = FindBlockStyle(centerTile);
208 int num = 0;
209 BlockStyle blockStyle2 = default(BlockStyle);
210 if (blockStyle.top)
211 {
212 Tile tileSafely = GetTileSafely(i, j - 1);
213 if (tileSafely.active() && WillItBlend(centerTile.type, tileSafely.type))
214 {
215 blockStyle2 = FindBlockStyle(tileSafely);
216 if (blockStyle2.bottom)
217 {
218 num |= 1;
219 }
220 else
221 {
222 blockStyle2.Clear();
223 }
224 }
225 }
226 BlockStyle blockStyle3 = default(BlockStyle);
227 if (blockStyle.left)
228 {
229 Tile tileSafely2 = GetTileSafely(i - 1, j);
230 if (tileSafely2.active() && WillItBlend(centerTile.type, tileSafely2.type))
231 {
232 blockStyle3 = FindBlockStyle(tileSafely2);
233 if (blockStyle3.right)
234 {
235 num |= 2;
236 }
237 else
238 {
239 blockStyle3.Clear();
240 }
241 }
242 }
243 BlockStyle blockStyle4 = default(BlockStyle);
244 if (blockStyle.right)
245 {
246 Tile tileSafely3 = GetTileSafely(i + 1, j);
247 if (tileSafely3.active() && WillItBlend(centerTile.type, tileSafely3.type))
248 {
249 blockStyle4 = FindBlockStyle(tileSafely3);
250 if (blockStyle4.left)
251 {
252 num |= 4;
253 }
254 else
255 {
256 blockStyle4.Clear();
257 }
258 }
259 }
260 BlockStyle blockStyle5 = default(BlockStyle);
261 if (blockStyle.bottom)
262 {
263 Tile tileSafely4 = GetTileSafely(i, j + 1);
264 if (tileSafely4.active() && WillItBlend(centerTile.type, tileSafely4.type))
265 {
266 blockStyle5 = FindBlockStyle(tileSafely4);
267 if (blockStyle5.top)
268 {
269 num |= 8;
270 }
271 else
272 {
273 blockStyle5.Clear();
274 }
275 }
276 }
277 if (blockStyle2.left && blockStyle3.top)
278 {
279 Tile tileSafely5 = GetTileSafely(i - 1, j - 1);
280 if (tileSafely5.active() && WillItBlend(centerTile.type, tileSafely5.type))
281 {
282 BlockStyle blockStyle6 = FindBlockStyle(tileSafely5);
283 if (blockStyle6.right && blockStyle6.bottom)
284 {
285 num |= 0x10;
286 }
287 }
288 }
289 if (blockStyle2.right && blockStyle4.top)
290 {
291 Tile tileSafely6 = GetTileSafely(i + 1, j - 1);
292 if (tileSafely6.active() && WillItBlend(centerTile.type, tileSafely6.type))
293 {
294 BlockStyle blockStyle7 = FindBlockStyle(tileSafely6);
295 if (blockStyle7.left && blockStyle7.bottom)
296 {
297 num |= 0x20;
298 }
299 }
300 }
301 if (blockStyle5.left && blockStyle3.bottom)
302 {
303 Tile tileSafely7 = GetTileSafely(i - 1, j + 1);
304 if (tileSafely7.active() && WillItBlend(centerTile.type, tileSafely7.type))
305 {
306 BlockStyle blockStyle8 = FindBlockStyle(tileSafely7);
307 if (blockStyle8.right && blockStyle8.top)
308 {
309 num |= 0x40;
310 }
311 }
312 }
313 if (blockStyle5.right && blockStyle4.bottom)
314 {
315 Tile tileSafely8 = GetTileSafely(i + 1, j + 1);
316 if (tileSafely8.active() && WillItBlend(centerTile.type, tileSafely8.type))
317 {
318 BlockStyle blockStyle9 = FindBlockStyle(tileSafely8);
319 if (blockStyle9.left && blockStyle9.top)
320 {
321 num |= 0x80;
322 }
323 }
324 }
325 if (resetFrame)
326 {
327 centerTile.frameNumber((byte)WorldGen.genRand.Next(0, 3));
328 }
329 Point16 point = selfFrame8WayLookup[num][centerTile.frameNumber()];
330 centerTile.frameX = point.X;
331 centerTile.frameY = point.Y;
332 }
static Point16[][] selfFrame8WayLookup
Definition Framing.cs:33
static bool WillItBlend(ushort myType, ushort otherType)
Definition Framing.cs:188
static BlockStyle FindBlockStyle(Tile blockTile)
Definition Framing.cs:149
static Tile GetTileSafely(Vector2 position)
Definition Framing.cs:419

References Terraria.Tile.active(), Terraria.Framing.BlockStyle.bottom, Terraria.Framing.BlockStyle.Clear(), Terraria.Framing.FindBlockStyle(), Terraria.Tile.frameNumber(), Terraria.WorldGen.genRand, Terraria.Framing.GetTileSafely(), Terraria.Framing.BlockStyle.left, Terraria.Framing.BlockStyle.right, Terraria.Framing.selfFrame8WayLookup, Terraria.Framing.BlockStyle.top, Terraria.Tile.type, Terraria.Framing.WillItBlend(), Terraria.DataStructures.Point16.X, and Terraria.DataStructures.Point16.Y.

Referenced by Terraria.WorldGen.TileFrame().