private bool RequestCanBeExecuted(RotationRequest rotationRequest) { bool canBeExecuted = true; // Check if any of the tiles are locked for (int y = 0; y < 2; y++) { for (int x = 0; x < 2; x++) { if (tileManager.GetTile(new Vector2Int(rotationRequest.tileCoords.x + x, rotationRequest.tileCoords.y + y)).locked) { canBeExecuted = false; } } } return(canBeExecuted); }
public IActionResult Rotate([FromBody] RotationRequest request) { using var image = request.Image.Base64.AsImageSharp(); switch (request.Rotation) { case Rotation.Left90Degrees: image.Mutate(im => im.Rotate(RotateMode.Rotate270)); break; case Rotation.Right90Degrees: image.Mutate(i => i.Rotate(RotateMode.Rotate90)); break; case Rotation.UpsideDown: image.Mutate(i => i.Rotate(RotateMode.Rotate180)); break; default: throw new ArgumentException("Неверное значения типа поворота изображения."); } return(PictureView(image, request.Image.ContentType)); }
private IEnumerator RotateCoroutine(RotationRequest rotationRequest) { Debug.Log("executing request"); List <Tile> tiles = new List <Tile>(); for (int y = 0; y < 2; y++) { for (int x = 0; x < 2; x++) { tiles.Add(tileManager.GetTile(new Vector2Int(rotationRequest.tileCoords.x + x, rotationRequest.tileCoords.y + y))); } } // Create a pivot object GameObject pivotObject = new GameObject("Pivot Object"); pivotObject.transform.position = tileManager.TileCoordsToWorldPosition(rotationRequest.tileCoords + new Vector2(0.5f, 0.5f)); Vector3 initialPivotPosition = pivotObject.transform.position; // Attach the tiles to the pivot foreach (Tile tile in tiles) { tile.locked = true; tile.transform.SetParent(pivotObject.transform, true); } float f = 0; while (f < 1) { f += Time.deltaTime / rotationDuration; f = Mathf.Clamp01(f); // Don't bother avoiding corner intersections float smoothedF = Mathf.SmoothStep(0, 1, f); pivotObject.transform.rotation = Quaternion.Euler(0, smoothedF * 90 * rotationRequest.amount, 0); // Tilt to get corners under //pivotObject.transform.rotation = Quaternion.Euler(15 * Mathf.Sin(f * Mathf.PI), 90 * rotationRequest.amount * (1 - Mathf.Cos(f * Mathf.PI)) * 0.5f, 0); // Use scaling or raising to get corners under //pivotObject.transform.rotation = Quaternion.Euler(0, 90 * rotationRequest.amount * (1 - Mathf.Cos(f * Mathf.PI)) * 0.5f, 0); //pivotObject.transform.position = initialPivotPosition + Vector3.down * 0.3f * Mathf.Sin(f * Mathf.PI); //pivotObject.transform.localScale = Vector3.one * (1 - 0.3f * Mathf.Sin(f * Mathf.PI)); // pivotObject.transform.localScale = new Vector3(1 - 0.3f * Mathf.Sin(f * Mathf.PI), 1, 1 - 0.3f * Mathf.Sin(f * Mathf.PI)); yield return(null); } // Put the tiles back in the grid foreach (Tile tile in tiles) { tile.locked = false; tile.transform.SetParent(tileManager.transform, true); Vector2Int tileCoords = tileManager.WorldPositionToTileCoords(tile.transform.position); tileManager.SetTile(tileCoords, tile); tile.tileCoords = tileCoords; tile.direction = tileManager.LocalRotationToTileDirection(tile.transform.localRotation); } }
private void ExecuteRequest(RotationRequest rotationRequest) { StartCoroutine(RotateCoroutine(rotationRequest)); }