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

◆ DoDraw_UpdateCameraPosition()

static void Terraria.Main.DoDraw_UpdateCameraPosition ( )
inlinestaticprivate

Definition at line 59314 of file Main.cs.

59315 {
59316 Vector3 vector = new Vector3(1f, 1f, 1f);
59317 Vector3 vector2 = Vector3.One / vector;
59318 if (gameMenu || netMode == 2)
59319 {
59320 return;
59321 }
59322 int num = 21;
59323 if (cameraX != 0f && !Main.player[myPlayer].pulley)
59324 {
59325 cameraX = 0f;
59326 }
59327 if (cameraX > 0f)
59328 {
59329 cameraX -= 1f;
59330 if (cameraX < 0f)
59331 {
59332 cameraX = 0f;
59333 }
59334 }
59335 if (cameraX < 0f)
59336 {
59337 cameraX += 1f;
59338 if (cameraX > 0f)
59339 {
59340 cameraX = 0f;
59341 }
59342 }
59344 screenPosition.X = Main.player[myPlayer].position.X + (float)Main.player[myPlayer].width * 0.5f - (float)screenWidth * 0.5f * vector2.X + cameraX;
59345 screenPosition.Y = Main.player[myPlayer].position.Y + (float)Main.player[myPlayer].height - (float)num - (float)screenHeight * 0.5f * vector2.Y + Main.player[myPlayer].gfxOffY;
59347 float num2 = 0f;
59348 float num3 = 0f;
59349 float num4 = 36f;
59350 bool flag = false;
59352 if (!Main.player[myPlayer].dead)
59353 {
59355 {
59357 if (LocalPlayer.gravDir == -1f)
59358 {
59359 vector3.Y *= -1f;
59360 }
59361 vector4 = vector3;
59362 vector3 = CurrentPan * 0.87f + vector3 * 0.13f;
59363 flag = true;
59365 }
59366 else if (LocalGolfState != null && (LocalGolfState.ShouldCameraTrackBallLastKnownLocation || LocalGolfState.IsTrackingBall))
59367 {
59368 if (LocalGolfState.IsTrackingBall)
59369 {
59370 Projectile lastHitBall = LocalGolfState.GetLastHitBall();
59371 vector3 = lastHitBall.Center - LocalPlayer.Center;
59372 vector4 = vector3;
59374 if (lastHitBall.velocity.Length() > 20f)
59375 {
59376 num4 *= 2f;
59377 }
59378 vector3 = CurrentPan * 0.87f + vector3 * 0.13f;
59379 flag = true;
59380 }
59381 else if (LocalGolfState.ShouldCameraTrackBallLastKnownLocation)
59382 {
59383 Vector2? lastBallLocation = LocalGolfState.GetLastBallLocation();
59384 if (lastBallLocation.HasValue)
59385 {
59386 vector3 = lastBallLocation.Value - LocalPlayer.Center;
59387 vector4 = vector3;
59389 vector3 = CurrentPan * 0.87f + vector3 * 0.13f;
59390 flag = true;
59391 }
59392 }
59393 }
59394 else if ((Main.player[myPlayer].noThrow <= 0 && !Main.player[myPlayer].lastMouseInterface) || !(CurrentPan == Vector2.Zero))
59395 {
59397 {
59398 Player player = Main.player[myPlayer];
59400 {
59401 float num5 = -1f;
59402 if (player.inventory[player.selectedItem].type == 1254 && player.scope)
59403 {
59404 num5 = 0.8f;
59405 }
59406 else if (player.inventory[player.selectedItem].type == 1254)
59407 {
59408 num5 = 2f / 3f;
59409 }
59410 else if (player.inventory[player.selectedItem].type == 1299)
59411 {
59412 num5 = 2f / 3f;
59413 }
59414 else if (player.scope)
59415 {
59416 num5 = 0.5f;
59417 }
59419 num4 = 48f;
59420 if (vector5 != Vector2.Zero && num5 != -1f)
59421 {
59423 vector3.X = vector6.X;
59424 vector3.Y = vector6.Y;
59425 flag = true;
59426 }
59427 }
59428 }
59429 else if (Main.player[myPlayer].inventory[Main.player[myPlayer].selectedItem].type == 1254 && Main.player[myPlayer].scope && mouseRight)
59430 {
59431 int num6 = mouseX;
59432 int num7 = mouseY;
59433 if (num6 > screenWidth)
59434 {
59435 num6 = screenWidth;
59436 }
59437 if (num6 < 0)
59438 {
59439 num6 = 0;
59440 }
59441 if (num7 > screenHeight)
59442 {
59444 }
59445 if (num7 < 0)
59446 {
59447 num7 = 0;
59448 }
59449 vector3.X = (float)(num6 - screenWidth / 2) / 1.25f;
59450 vector3.Y = (float)(num7 - screenHeight / 2) / 1.25f;
59451 flag = true;
59452 }
59453 else if (Main.player[myPlayer].inventory[Main.player[myPlayer].selectedItem].type == 1254 && mouseRight)
59454 {
59455 int num8 = mouseX;
59456 int num9 = mouseY;
59457 if (num8 > screenWidth)
59458 {
59459 num8 = screenWidth;
59460 }
59461 if (num8 < 0)
59462 {
59463 num8 = 0;
59464 }
59465 if (num9 > screenHeight)
59466 {
59468 }
59469 if (num9 < 0)
59470 {
59471 num9 = 0;
59472 }
59473 vector3.X = (float)(num8 - screenWidth / 2) / 1.5f;
59474 vector3.Y = (float)(num9 - screenHeight / 2) / 1.5f;
59475 flag = true;
59476 }
59477 else if (Main.player[myPlayer].inventory[Main.player[myPlayer].selectedItem].type == 1299 && Main.player[myPlayer].selectedItem != 58)
59478 {
59479 int num10 = mouseX;
59480 int num11 = mouseY;
59481 if (num10 > screenWidth)
59482 {
59484 }
59485 if (num10 < 0)
59486 {
59487 num10 = 0;
59488 }
59489 if (num11 > screenHeight)
59490 {
59492 }
59493 if (num11 < 0)
59494 {
59495 num11 = 0;
59496 }
59497 vector3.X = (float)(num10 - screenWidth / 2) / 1.5f;
59498 vector3.Y = (float)(num11 - screenHeight / 2) / 1.5f;
59499 flag = true;
59500 }
59501 else if (Main.player[myPlayer].scope && mouseRight)
59502 {
59503 int num12 = mouseX;
59504 int num13 = mouseY;
59505 if (num12 > screenWidth)
59506 {
59508 }
59509 if (num12 < 0)
59510 {
59511 num12 = 0;
59512 }
59513 if (num13 > screenHeight)
59514 {
59516 }
59517 if (num13 < 0)
59518 {
59519 num13 = 0;
59520 }
59521 vector3.X = (float)(num12 - screenWidth / 2) / 2f;
59522 vector3.Y = (float)(num13 - screenHeight / 2) / 2f;
59523 flag = true;
59524 }
59525 }
59526 }
59527 if (float.IsNaN(CurrentPan.X))
59528 {
59529 CurrentPan.X = 0f;
59530 }
59531 if (float.IsNaN(CurrentPan.Y))
59532 {
59533 CurrentPan.Y = 0f;
59534 }
59536 float num14 = value2.Length();
59537 float amount = 1f;
59538 if (num3 > num2 + 0.0001f)
59539 {
59540 amount = MathHelper.Clamp((num14 - num2) / (num3 - num2), 0f, 1f);
59541 }
59542 float value3 = MathHelper.SmoothStep(0f, num14, amount);
59545 {
59547 float num15 = Math.Abs(vector7.X);
59548 float num16 = Math.Abs(vector7.Y);
59549 float num17 = vector7.Length();
59550 if ((num15 >= (float)(screenWidth / 2) || num16 >= (float)(screenHeight / 2)) && num17 >= new Vector2(screenWidth, screenHeight).Length() / 2f + 100f)
59551 {
59552 renderNow = true;
59555 NPC.ResetNetOffsets();
59556 BlackFadeIn = 255;
59557 if (mapTime < 5)
59558 {
59559 mapTime = 5;
59560 }
59561 maxQ = true;
59562 Lighting.Clear();
59564 LocalPlayer.ForceUpdateBiomes();
59565 }
59566 }
59567 if (vector3 == Vector2.Zero && !flag)
59568 {
59569 float num18 = Math.Abs(value2.X);
59570 float num19 = Math.Abs(value2.Y);
59571 float num20 = value2.Length();
59572 if (num18 >= (float)(screenWidth / 2) || num19 >= (float)(screenHeight / 2))
59573 {
59574 renderNow = true;
59575 CurrentPan *= 0.9f;
59576 if (_cameraPanHasBlackTransition && num20 >= new Vector2(screenWidth, screenHeight).Length() / 2f + 100f)
59577 {
59579 NPC.ResetNetOffsets();
59580 BlackFadeIn = 255;
59581 if (mapTime < 5)
59582 {
59583 mapTime = 5;
59584 }
59585 maxQ = true;
59586 Lighting.Clear();
59589 LocalPlayer.ForceUpdateBiomes();
59590 }
59591 }
59592 else if (value3 > 0.0001f)
59593 {
59595 }
59596 }
59597 else if (value3 > 0.0001f)
59598 {
59600 }
59601 screenPosition.X += CurrentPan.X;
59602 screenPosition.Y += CurrentPan.Y * Main.player[myPlayer].gravDir;
59603 if (cameraLerp > 0f)
59604 {
59605 if (Vector2.Distance(value, screenPosition) - Main.player[myPlayer].velocity.Length() < 0.25f || (cameraGamePadLerp && !PlayerInput.UsingGamepad))
59606 {
59607 cameraLerp = 0f;
59608 cameraGamePadLerp = false;
59609 }
59610 else
59611 {
59613 }
59614 }
59615 instance.CameraModifiers.ApplyTo(ref screenPosition);
59616 screenPosition.X = (int)screenPosition.X;
59617 screenPosition.Y = (int)screenPosition.Y;
59619 }
static float SmoothStep(float value1, float value2, float amount)
Definition MathHelper.cs:63
static float Clamp(float value, float min, float max)
Definition MathHelper.cs:46
static double Abs(double value)
bool TryTracking(out Vector2 cameraPosition)
static Vector2 GamepadThumbstickRight
static float cameraX
Definition Main.cs:1202
static float cameraLerp
Definition Main.cs:455
static GolfState LocalGolfState
Definition Main.cs:1876
static int myPlayer
Definition Main.cs:1801
static int netMode
Definition Main.cs:2095
static bool mouseRight
Definition Main.cs:616
static Main instance
Definition Main.cs:283
static int screenHeight
Definition Main.cs:1721
static void ClampScreenPositionToWorld()
Definition Main.cs:60788
static Vector2 screenPosition
Definition Main.cs:1715
static Vector2 MouseScreen
Definition Main.cs:2773
static bool _cameraPanHasBlackTransition
Definition Main.cs:2593
static bool maxQ
Definition Main.cs:1054
static int instantBGTransitionCounter
Definition Main.cs:804
static Vector2 CurrentPan
Definition Main.cs:544
static int BlackFadeIn
Definition Main.cs:548
static bool cameraGamePadLerp
Definition Main.cs:461
static bool renderNow
Definition Main.cs:598
static bool SmartCursorIsUsed
Definition Main.cs:2855
static int screenWidth
Definition Main.cs:1719
static int mouseY
Definition Main.cs:606
static int mapTime
Definition Main.cs:884
static bool gameMenu
Definition Main.cs:1926
static Player LocalPlayer
Definition Main.cs:2829
static Player[] player
Definition Main.cs:1803
static int mouseX
Definition Main.cs:604
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References Terraria.Main._cameraPanHasBlackTransition, System.Math.Abs(), Terraria.Main.BlackFadeIn, Terraria.Main.cameraGamePadLerp, Terraria.Main.cameraLerp, Terraria.Main.cameraX, Microsoft.Xna.Framework.MathHelper.Clamp(), Terraria.Main.ClampScreenPositionToWorld(), Terraria.Lighting.Clear(), Terraria.Main.CurrentPan, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Main.gameMenu, Terraria.GameInput.PlayerInput.GamepadThumbstickRight, Terraria.Main.instance, Terraria.Main.instantBGTransitionCounter, Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.Main.LocalGolfState, Terraria.Main.LocalPlayer, Terraria.Main.mapTime, Terraria.Main.maxQ, Terraria.Main.mouseRight, Terraria.Main.MouseScreen, Terraria.Main.mouseX, Terraria.Main.mouseY, Terraria.Main.myPlayer, Terraria.Main.netMode, Microsoft.Xna.Framework.Vector2.Normalize(), Terraria.Main.player, Terraria.Main.renderNow, Terraria.NPC.ResetNetOffsets(), Terraria.Main.screenHeight, Terraria.Main.screenPosition, Terraria.Main.screenWidth, Terraria.Main.SmartCursorIsUsed, Microsoft.Xna.Framework.MathHelper.SmoothStep(), Terraria.DataStructures.DroneCameraTracker.TryTracking(), Terraria.GameInput.PlayerInput.UsingGamepad, System.value, Microsoft.Xna.Framework.Graphics.Vector2, Microsoft.Xna.Framework.Graphics.Vector3, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.Main.DoDraw().