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

◆ GetNextMapDraw()

bool Terraria.WorldSections.GetNextMapDraw ( Vector2 playerPos,
out int x,
out int y )
inline

Definition at line 222 of file WorldSections.cs.

223 {
224 if (mapSectionsLeft <= 0)
225 {
226 x = -1;
227 y = -1;
228 return false;
229 }
230 Stopwatch stopwatch = new Stopwatch();
231 stopwatch.Start();
232 int num = 0;
233 int num2 = 0;
234 Vector2 vector = prevMap.centerPos;
235 playerPos *= 0.0625f;
236 int sectionX = Netplay.GetSectionX((int)playerPos.X);
237 int sectionY = Netplay.GetSectionY((int)playerPos.Y);
238 int num3 = Netplay.GetSectionX((int)vector.X);
239 int num4 = Netplay.GetSectionY((int)vector.Y);
240 int num5;
241 if (num3 != sectionX || num4 != sectionY)
242 {
243 vector = playerPos;
244 num3 = sectionX;
245 num4 = sectionY;
246 num5 = 4;
247 x = sectionX;
248 y = sectionY;
249 }
250 else
251 {
252 num5 = prevMap.leg;
253 x = prevMap.X;
254 y = prevMap.Y;
255 num = prevMap.xDir;
256 num2 = prevMap.yDir;
257 }
258 int num6 = (int)(playerPos.X - ((float)num3 + 0.5f) * 200f);
259 int num7 = (int)(playerPos.Y - ((float)num4 + 0.5f) * 150f);
260 if (num == 0)
261 {
262 num = ((num6 <= 0) ? 1 : (-1));
263 num2 = ((num7 <= 0) ? 1 : (-1));
264 }
265 int num8 = 0;
266 bool flag = false;
267 bool flag2 = false;
268 while (true)
269 {
270 if (num8 == 4)
271 {
272 if (flag2)
273 {
274 throw new Exception("Infinite loop in WorldSections.GetNextMapDraw");
275 }
276 flag2 = true;
277 x = num3;
278 y = num4;
279 num6 = (int)(vector.X - ((float)num3 + 0.5f) * 200f);
280 num7 = (int)(vector.Y - ((float)num4 + 0.5f) * 150f);
281 num = ((num6 <= 0) ? 1 : (-1));
282 num2 = ((num7 <= 0) ? 1 : (-1));
283 num5 = 4;
284 num8 = 0;
285 }
286 if (y >= 0 && y < height && x >= 0 && x < width)
287 {
288 flag = false;
289 if (!data[y * width + x][2])
290 {
291 break;
292 }
293 }
294 int num9 = x - num3;
295 int num10 = y - num4;
296 if (num9 == 0 || num10 == 0)
297 {
298 if (num5 == 4)
299 {
300 if (num9 == 0 && num10 == 0)
301 {
302 if (Math.Abs(num6) > Math.Abs(num7))
303 {
304 y -= num2;
305 }
306 else
307 {
308 x -= num;
309 }
310 }
311 else
312 {
313 if (num9 != 0)
314 {
315 x += num9 / Math.Abs(num9);
316 }
317 if (num10 != 0)
318 {
319 y += num10 / Math.Abs(num10);
320 }
321 }
322 num5 = 0;
323 num8 = -2;
324 flag = true;
325 }
326 else
327 {
328 if (num9 != 0)
329 {
330 num = ((num9 <= 0) ? 1 : (-1));
331 }
332 else
333 {
334 num2 = ((num10 <= 0) ? 1 : (-1));
335 }
336 x += num;
337 y += num2;
338 num5++;
339 }
340 if (flag)
341 {
342 num8++;
343 }
344 else
345 {
346 flag = true;
347 }
348 }
349 else
350 {
351 x += num;
352 y += num2;
353 }
354 }
355 data[y * width + x][2] = true;
357 prevMap.centerPos = playerPos;
358 prevMap.X = x;
359 prevMap.Y = y;
360 prevMap.leg = num5;
361 prevMap.xDir = num;
362 prevMap.yDir = num2;
363 stopwatch.Stop();
364 return true;
365 }
static double Abs(double value)
IterationState prevMap

References System.Math.Abs(), Terraria.WorldSections.IterationState.centerPos, Terraria.WorldSections.data, Terraria.Netplay.GetSectionX(), Terraria.Netplay.GetSectionY(), Terraria.WorldSections.IterationState.leg, Terraria.WorldSections.mapSectionsLeft, Terraria.WorldSections.prevMap, System.Diagnostics.Stopwatch.Start(), System.Diagnostics.Stopwatch.Stop(), Terraria.WorldSections.width, Microsoft.Xna.Framework.Vector2.X, Terraria.WorldSections.IterationState.X, Terraria.WorldSections.IterationState.xDir, Microsoft.Xna.Framework.Vector2.Y, Terraria.WorldSections.IterationState.Y, and Terraria.WorldSections.IterationState.yDir.