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

◆ Step_Hammers()

static void Terraria.GameContent.SmartCursorHelper.Step_Hammers ( SmartCursorUsageInfo providedInfo,
ref int focusedX,
ref int focusedY )
inlinestaticprivate

Definition at line 1481 of file SmartCursorHelper.cs.

1482 {
1483 int width = providedInfo.player.width;
1484 int height = providedInfo.player.height;
1485 if (providedInfo.item.hammer > 0 && focusedX == -1 && focusedY == -1)
1486 {
1487 Vector2 vector = providedInfo.mouse - providedInfo.Center;
1488 int num = Math.Sign(vector.X);
1489 int num2 = Math.Sign(vector.Y);
1490 if (Math.Abs(vector.X) > Math.Abs(vector.Y) * 3f)
1491 {
1492 num2 = 0;
1493 providedInfo.mouse.Y = providedInfo.Center.Y;
1494 }
1495 if (Math.Abs(vector.Y) > Math.Abs(vector.X) * 3f)
1496 {
1497 num = 0;
1498 providedInfo.mouse.X = providedInfo.Center.X;
1499 }
1500 _ = (int)providedInfo.Center.X / 16;
1501 _ = (int)providedInfo.Center.Y / 16;
1502 _points.Clear();
1503 _endpoints.Clear();
1504 int num3 = 1;
1505 if (num2 == -1 && num != 0)
1506 {
1507 num3 = -1;
1508 }
1509 int num4 = (int)((providedInfo.position.X + (float)(width / 2) + (float)((width / 2 - 1) * num)) / 16f);
1510 int num5 = (int)(((double)providedInfo.position.Y + 0.1) / 16.0);
1511 if (num3 == -1)
1512 {
1513 num5 = (int)((providedInfo.position.Y + (float)height - 1f) / 16f);
1514 }
1515 int num6 = width / 16 + ((width % 16 != 0) ? 1 : 0);
1516 int num7 = height / 16 + ((height % 16 != 0) ? 1 : 0);
1517 if (num != 0)
1518 {
1519 for (int i = 0; i < num7; i++)
1520 {
1521 if (Main.tile[num4, num5 + i * num3] != null)
1522 {
1523 _points.Add(new Tuple<int, int>(num4, num5 + i * num3));
1524 }
1525 }
1526 }
1527 if (num2 != 0)
1528 {
1529 for (int j = 0; j < num6; j++)
1530 {
1531 if (Main.tile[(int)(providedInfo.position.X / 16f) + j, num5] != null)
1532 {
1533 _points.Add(new Tuple<int, int>((int)(providedInfo.position.X / 16f) + j, num5));
1534 }
1535 }
1536 }
1537 int num8 = (int)((providedInfo.mouse.X + (float)((width / 2 - 1) * num)) / 16f);
1538 int num9 = (int)(((double)providedInfo.mouse.Y + 0.1 - (double)(height / 2 + 1)) / 16.0);
1539 if (num3 == -1)
1540 {
1541 num9 = (int)((providedInfo.mouse.Y + (float)(height / 2) - 1f) / 16f);
1542 }
1543 if (providedInfo.player.gravDir == -1f && num2 == 0)
1544 {
1545 num9++;
1546 }
1547 if (num9 < 10)
1548 {
1549 num9 = 10;
1550 }
1551 if (num9 > Main.maxTilesY - 10)
1552 {
1553 num9 = Main.maxTilesY - 10;
1554 }
1555 int num10 = width / 16 + ((width % 16 != 0) ? 1 : 0);
1556 int num11 = height / 16 + ((height % 16 != 0) ? 1 : 0);
1557 if (num != 0)
1558 {
1559 for (int k = 0; k < num11; k++)
1560 {
1561 if (Main.tile[num8, num9 + k * num3] != null)
1562 {
1563 _endpoints.Add(new Tuple<int, int>(num8, num9 + k * num3));
1564 }
1565 }
1566 }
1567 if (num2 != 0)
1568 {
1569 for (int l = 0; l < num10; l++)
1570 {
1571 if (Main.tile[(int)((providedInfo.mouse.X - (float)(width / 2)) / 16f) + l, num9] != null)
1572 {
1573 _endpoints.Add(new Tuple<int, int>((int)((providedInfo.mouse.X - (float)(width / 2)) / 16f) + l, num9));
1574 }
1575 }
1576 }
1577 _targets.Clear();
1578 while (_points.Count > 0)
1579 {
1582 Tuple<int, int> tuple3 = Collision.TupleHitLineWall(tuple.Item1, tuple.Item2, tuple2.Item1, tuple2.Item2);
1583 if (tuple3.Item1 == -1 || tuple3.Item2 == -1)
1584 {
1585 _points.Remove(tuple);
1586 _endpoints.Remove(tuple2);
1587 continue;
1588 }
1589 if (tuple3.Item1 != tuple2.Item1 || tuple3.Item2 != tuple2.Item2)
1590 {
1591 _targets.Add(tuple3);
1592 }
1593 _ = Main.tile[tuple3.Item1, tuple3.Item2];
1594 if (Collision.HitWallSubstep(tuple3.Item1, tuple3.Item2))
1595 {
1596 _targets.Add(tuple3);
1597 }
1598 _points.Remove(tuple);
1599 _endpoints.Remove(tuple2);
1600 }
1601 if (_targets.Count > 0)
1602 {
1603 float num12 = -1f;
1604 Tuple<int, int> tuple4 = null;
1605 for (int m = 0; m < _targets.Count; m++)
1606 {
1607 if (!Main.tile[_targets[m].Item1, _targets[m].Item2].active() || Main.tile[_targets[m].Item1, _targets[m].Item2].type != 26)
1608 {
1609 float num13 = Vector2.Distance(new Vector2(_targets[m].Item1, _targets[m].Item2) * 16f + Vector2.One * 8f, providedInfo.Center);
1610 if (num12 == -1f || num13 < num12)
1611 {
1612 num12 = num13;
1613 tuple4 = _targets[m];
1614 }
1615 }
1616 }
1617 if (tuple4 != null && Collision.InTileBounds(tuple4.Item1, tuple4.Item2, providedInfo.reachableStartX, providedInfo.reachableStartY, providedInfo.reachableEndX, providedInfo.reachableEndY))
1618 {
1619 providedInfo.player.poundRelease = false;
1620 focusedX = tuple4.Item1;
1621 focusedY = tuple4.Item2;
1622 }
1623 }
1624 _targets.Clear();
1625 _points.Clear();
1626 _endpoints.Clear();
1627 }
1628 if (providedInfo.item.hammer <= 0 || focusedX != -1 || focusedY != -1)
1629 {
1630 return;
1631 }
1632 _targets.Clear();
1633 for (int n = providedInfo.reachableStartX; n <= providedInfo.reachableEndX; n++)
1634 {
1635 for (int num14 = providedInfo.reachableStartY; num14 <= providedInfo.reachableEndY; num14++)
1636 {
1637 if (Main.tile[n, num14].wall > 0 && Collision.HitWallSubstep(n, num14))
1638 {
1639 _targets.Add(new Tuple<int, int>(n, num14));
1640 }
1641 }
1642 }
1643 if (_targets.Count > 0)
1644 {
1645 float num15 = -1f;
1646 Tuple<int, int> tuple5 = null;
1647 for (int num16 = 0; num16 < _targets.Count; num16++)
1648 {
1649 if (!Main.tile[_targets[num16].Item1, _targets[num16].Item2].active() || Main.tile[_targets[num16].Item1, _targets[num16].Item2].type != 26)
1650 {
1651 float num17 = Vector2.Distance(new Vector2(_targets[num16].Item1, _targets[num16].Item2) * 16f + Vector2.One * 8f, providedInfo.mouse);
1652 if (num15 == -1f || num17 < num15)
1653 {
1654 num15 = num17;
1656 }
1657 }
1658 }
1659 if (tuple5 != null && Collision.InTileBounds(tuple5.Item1, tuple5.Item2, providedInfo.reachableStartX, providedInfo.reachableStartY, providedInfo.reachableEndX, providedInfo.reachableEndY))
1660 {
1661 providedInfo.player.poundRelease = false;
1662 focusedX = tuple5.Item1;
1663 focusedY = tuple5.Item2;
1664 }
1665 }
1666 _targets.Clear();
1667 }
static double Abs(double value)
static int Sign(decimal value)
Definition Math.cs:1202
static List< Tuple< int, int > > _endpoints
static List< Tuple< int, int > > _targets
static List< Tuple< int, int > > _points
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References Terraria.GameContent.SmartCursorHelper._endpoints, Terraria.GameContent.SmartCursorHelper._points, Terraria.GameContent.SmartCursorHelper._targets, System.Math.Abs(), Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Collision.HitWallSubstep(), Terraria.Collision.InTileBounds(), Terraria.Main.maxTilesY, System.Math.Sign(), Terraria.Main.tile, and Terraria.Collision.TupleHitLineWall().

Referenced by Terraria.GameContent.SmartCursorHelper.SmartCursorLookup().