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

◆ Step_Pickaxe_MineSolids()

static void Terraria.GameContent.SmartCursorHelper.Step_Pickaxe_MineSolids ( Player player,
SmartCursorUsageInfo providedInfo,
List< Tuple< int, int > > grappleTargets,
ref int focusedX,
ref int focusedY )
inlinestaticprivate

Definition at line 2285 of file SmartCursorHelper.cs.

2286 {
2287 int width = player.width;
2288 int height = player.height;
2289 int direction = player.direction;
2290 Vector2 center = player.Center;
2291 Vector2 position = player.position;
2292 float gravDir = player.gravDir;
2293 int whoAmI = player.whoAmI;
2294 if (providedInfo.item.pick <= 0 || focusedX != -1 || focusedY != -1)
2295 {
2296 return;
2297 }
2299 {
2300 Vector2 navigatorDirections = PlayerInput.Triggers.Current.GetNavigatorDirections();
2303 if (navigatorDirections == Vector2.Zero && gamepadThumbstickLeft.Length() < 0.05f && gamepadThumbstickRight.Length() < 0.05f)
2304 {
2305 providedInfo.mouse = center + new Vector2(direction * 1000, 0f);
2306 }
2307 }
2308 Vector2 vector = providedInfo.mouse - center;
2309 int num = Math.Sign(vector.X);
2310 int num2 = Math.Sign(vector.Y);
2311 if (Math.Abs(vector.X) > Math.Abs(vector.Y) * 3f)
2312 {
2313 num2 = 0;
2314 providedInfo.mouse.Y = center.Y;
2315 }
2316 if (Math.Abs(vector.Y) > Math.Abs(vector.X) * 3f)
2317 {
2318 num = 0;
2319 providedInfo.mouse.X = center.X;
2320 }
2321 _ = (int)center.X / 16;
2322 _ = (int)center.Y / 16;
2323 _points.Clear();
2324 _endpoints.Clear();
2325 int num3 = 1;
2326 if (num2 == -1 && num != 0)
2327 {
2328 num3 = -1;
2329 }
2330 int num4 = (int)((position.X + (float)(width / 2) + (float)((width / 2 - 1) * num)) / 16f);
2331 int num5 = (int)(((double)position.Y + 0.1) / 16.0);
2332 if (num3 == -1)
2333 {
2334 num5 = (int)((position.Y + (float)height - 1f) / 16f);
2335 }
2336 int num6 = width / 16 + ((width % 16 != 0) ? 1 : 0);
2337 int num7 = height / 16 + ((height % 16 != 0) ? 1 : 0);
2338 if (num != 0)
2339 {
2340 for (int i = 0; i < num7; i++)
2341 {
2342 if (Main.tile[num4, num5 + i * num3] != null)
2343 {
2344 _points.Add(new Tuple<int, int>(num4, num5 + i * num3));
2345 }
2346 }
2347 }
2348 if (num2 != 0)
2349 {
2350 for (int j = 0; j < num6; j++)
2351 {
2352 if (Main.tile[(int)(position.X / 16f) + j, num5] != null)
2353 {
2354 _points.Add(new Tuple<int, int>((int)(position.X / 16f) + j, num5));
2355 }
2356 }
2357 }
2358 int num8 = (int)((providedInfo.mouse.X + (float)((width / 2 - 1) * num)) / 16f);
2359 int num9 = (int)(((double)providedInfo.mouse.Y + 0.1 - (double)(height / 2 + 1)) / 16.0);
2360 if (num3 == -1)
2361 {
2362 num9 = (int)((providedInfo.mouse.Y + (float)(height / 2) - 1f) / 16f);
2363 }
2364 if (gravDir == -1f && num2 == 0)
2365 {
2366 num9++;
2367 }
2368 if (num9 < 10)
2369 {
2370 num9 = 10;
2371 }
2372 if (num9 > Main.maxTilesY - 10)
2373 {
2374 num9 = Main.maxTilesY - 10;
2375 }
2376 int num10 = width / 16 + ((width % 16 != 0) ? 1 : 0);
2377 int num11 = height / 16 + ((height % 16 != 0) ? 1 : 0);
2378 if (WorldGen.InWorld(num8, num9, 40))
2379 {
2380 if (num != 0)
2381 {
2382 for (int k = 0; k < num11; k++)
2383 {
2384 if (Main.tile[num8, num9 + k * num3] != null)
2385 {
2386 _endpoints.Add(new Tuple<int, int>(num8, num9 + k * num3));
2387 }
2388 }
2389 }
2390 if (num2 != 0)
2391 {
2392 for (int l = 0; l < num10; l++)
2393 {
2394 if (Main.tile[(int)((providedInfo.mouse.X - (float)(width / 2)) / 16f) + l, num9] != null)
2395 {
2396 _endpoints.Add(new Tuple<int, int>((int)((providedInfo.mouse.X - (float)(width / 2)) / 16f) + l, num9));
2397 }
2398 }
2399 }
2400 }
2401 _targets.Clear();
2402 while (_points.Count > 0 && _endpoints.Count > 0)
2403 {
2406 if (!Collision.TupleHitLine(tuple.Item1, tuple.Item2, tuple2.Item1, tuple2.Item2, num * (int)gravDir, -num2 * (int)gravDir, grappleTargets, out var col))
2407 {
2408 _points.Remove(tuple);
2409 _endpoints.Remove(tuple2);
2410 continue;
2411 }
2412 if (col.Item1 != tuple2.Item1 || col.Item2 != tuple2.Item2)
2413 {
2414 _targets.Add(col);
2415 }
2416 Tile tile = Main.tile[col.Item1, col.Item2];
2417 if (!tile.inActive() && tile.active() && Main.tileSolid[tile.type] && !Main.tileSolidTop[tile.type] && !grappleTargets.Contains(col))
2418 {
2419 _targets.Add(col);
2420 }
2421 _points.Remove(tuple);
2422 _endpoints.Remove(tuple2);
2423 }
2424 _toRemove.Clear();
2425 for (int m = 0; m < _targets.Count; m++)
2426 {
2427 if (!WorldGen.CanKillTile(_targets[m].Item1, _targets[m].Item2))
2428 {
2429 _toRemove.Add(_targets[m]);
2430 }
2431 }
2432 for (int n = 0; n < _toRemove.Count; n++)
2433 {
2434 _targets.Remove(_toRemove[n]);
2435 }
2436 _toRemove.Clear();
2437 if (_targets.Count > 0)
2438 {
2439 float num12 = -1f;
2442 if (Main.netMode == 1)
2443 {
2444 int num13 = 0;
2445 int num14 = 0;
2446 int num15 = 0;
2447 for (int num16 = 0; num16 < whoAmI; num16++)
2448 {
2449 Player player2 = Main.player[num16];
2450 if (player2.active && !player2.dead && player2.HeldItem.pick > 0 && player2.itemAnimation > 0)
2451 {
2452 if (player.Distance(player2.Center) <= 8f)
2453 {
2454 num13++;
2455 }
2456 if (player.Distance(player2.Center) <= 80f && Math.Abs(player2.Center.Y - center.Y) <= 12f)
2457 {
2458 num14++;
2459 }
2460 }
2461 }
2462 for (int num17 = whoAmI + 1; num17 < 255; num17++)
2463 {
2464 Player player3 = Main.player[num17];
2465 if (player3.active && !player3.dead && player3.HeldItem.pick > 0 && player3.itemAnimation > 0 && player.Distance(player3.Center) <= 8f)
2466 {
2467 num15++;
2468 }
2469 }
2470 if (num13 > 0)
2471 {
2472 if (num13 % 2 == 1)
2473 {
2474 value.X += 12f;
2475 }
2476 else
2477 {
2478 value.X -= 12f;
2479 }
2480 if (num14 % 2 == 1)
2481 {
2482 value.Y -= 12f;
2483 }
2484 }
2485 if (num15 > 0 && num13 == 0)
2486 {
2487 if (num15 % 2 == 1)
2488 {
2489 value.X -= 12f;
2490 }
2491 else
2492 {
2493 value.X += 12f;
2494 }
2495 }
2496 }
2497 for (int num18 = 0; num18 < _targets.Count; num18++)
2498 {
2499 float num19 = Vector2.Distance(new Vector2(_targets[num18].Item1, _targets[num18].Item2) * 16f + Vector2.One * 8f, value);
2500 if (num12 == -1f || num19 < num12)
2501 {
2502 num12 = num19;
2504 }
2505 }
2506 if (Collision.InTileBounds(tuple3.Item1, tuple3.Item2, providedInfo.reachableStartX, providedInfo.reachableStartY, providedInfo.reachableEndX, providedInfo.reachableEndY))
2507 {
2508 focusedX = tuple3.Item1;
2509 focusedY = tuple3.Item2;
2510 }
2511 }
2512 _points.Clear();
2513 _endpoints.Clear();
2514 _targets.Clear();
2515 }
bool ICollection< KeyValuePair< TKey, TValue > >. Contains(KeyValuePair< TKey, TValue > keyValuePair)
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 List< Tuple< int, int > > _toRemove
static TriggersPack Triggers
static Vector2 GamepadThumbstickLeft
static Vector2 GamepadThumbstickRight
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References Terraria.GameContent.SmartCursorHelper._endpoints, Terraria.GameContent.SmartCursorHelper._points, Terraria.GameContent.SmartCursorHelper._targets, Terraria.GameContent.SmartCursorHelper._toRemove, System.Math.Abs(), Terraria.Tile.active(), Terraria.WorldGen.CanKillTile(), Terraria.Entity.Center, System.Collections.Generic.Dictionary< TKey, TValue >.Contains(), Terraria.Entity.direction, Terraria.Entity.Distance(), Microsoft.Xna.Framework.Vector2.Distance(), Terraria.GameInput.PlayerInput.GamepadThumbstickLeft, Terraria.GameInput.PlayerInput.GamepadThumbstickRight, Terraria.Player.gravDir, Terraria.Entity.height, Terraria.Tile.inActive(), Terraria.Collision.InTileBounds(), Terraria.WorldGen.InWorld(), Terraria.Main.maxTilesY, Terraria.Main.netMode, Terraria.Main.player, Terraria.Entity.position, System.Math.Sign(), Terraria.Main.tile, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Terraria.GameInput.PlayerInput.Triggers, Terraria.Collision.TupleHitLine(), Terraria.Tile.type, Terraria.GameInput.PlayerInput.UsingGamepad, System.value, Terraria.Entity.whoAmI, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.

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