public override void CursorUpdate(World world, Player player, Vector2 cursorPosition) { WorldCamera camera = world.worldCamera; if (!camera.turning) { RayTrace rayTrace = camera.GetRayAtScreenPosition(cursorPosition - camera.worldContainer.GetPosition()); if (rayTrace.hit) { bool inRange = (rayTrace.hitPosition - player.worldPosition).sqrMagnitude < 25f; if (Input.GetKey(KeyCode.Mouse0) && inRange) { player.UseItem(Vector3Int.FloorToInt(rayTrace.hitTilePosition + rayTrace.hitDirection), Input.GetKeyDown(KeyCode.Mouse0)); } SetConstructionGuide(camera, player, rayTrace.hitTilePosition + Vector3.one * 0.5f, rayTrace.hitDirection, inRange); _previewSprite.isVisible = true; } } }
public override void CursorUpdate(World world, Player player, Vector2 cursorPosition) { WorldCamera camera = world.worldCamera; if (!camera.turning) { RayTrace rayTrace = camera.GetRayAtScreenPosition(cursorPosition - camera.worldContainer.GetPosition()); Tile tile = rayTrace.GetTileIn(world); if (tile != _lastTile) { _progress = 0f; _lastTile = tile; } if (rayTrace.hit) { bool inRange = (rayTrace.hitPosition - player.worldPosition).sqrMagnitude < 25f; if (Input.GetKey(KeyCode.Mouse0) && inRange) { bool clicked = _progress >= 1f; if (clicked) { _progress = 0f; } player.UseItem(rayTrace.hitTilePosition, clicked); // Input.GetKeyDown(KeyCode.Mouse0)); } SetConstructionGuide(camera, player, rayTrace.hitTilePosition, inRange, _progress); _previewSprite.isVisible = true; } } }
public override void CursorUpdate(World world, Player player, Vector2 cursorPosition) { WorldCamera camera = world.worldCamera; List <ITarget> targets = world.targets; ITarget nearestTarget = null; Vector2 screenPositionA, screenPositionB; screenPositionA = new Vector2(1920f, 1080f); for (int index = 0; index < targets.Count; index++) { screenPositionB = camera.GetScreenPosition(targets[index].worldPosition) + camera.worldContainer.GetPosition(); float sqrMagnitude = (screenPositionB - cursorPosition).sqrMagnitude; //if ((screenPositionB.x > Menu.screenWidth * 0.5f || screenPositionB.x < Menu.screenWidth * -0.5f) || // (screenPositionB.y > Menu.screenHeight * 0.5f || screenPositionB.y < Menu.screenHeight * -0.5f)) if (sqrMagnitude > 4096f) { continue; } else if ((screenPositionA - cursorPosition).sqrMagnitude > sqrMagnitude) { nearestTarget = targets[index]; screenPositionA = screenPositionB; } } if (_currentTarget != nearestTarget) { _lastScreenPosition = position; _lastSize = size; _currentTarget = nearestTarget; _lastTime = menu.time; _targetInspector.InspectTarget(_currentTarget); } if (_currentTarget != null) { _targetScreenPosition = screenPositionA + nearestTarget.boundRect.position; _targetSize = nearestTarget.boundRect.size; if (Input.GetKey(KeyCode.Mouse0)) { player.UseItem(_currentTarget.worldPosition, Input.GetKeyDown(KeyCode.Mouse0)); } } else { _targetScreenPosition = cursorPosition; _targetSize = new Vector2(12f, 12f); if (Input.GetKey(KeyCode.Mouse0)) { RayTrace rayTrace = camera.GetRayAtScreenPosition(cursorPosition - camera.worldContainer.GetPosition()); Vector3 targetPosition = new Vector3(rayTrace.hitPosition.x, player.worldPosition.y, rayTrace.hitPosition.z); if (rayTrace.hit) { player.UseItem(targetPosition, Input.GetKeyDown(KeyCode.Mouse0)); } } } }