Example #1
0
    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);
    }
Example #2
0
        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));
        }
Example #3
0
    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);
        }
    }
Example #4
0
 private void ExecuteRequest(RotationRequest rotationRequest)
 {
     StartCoroutine(RotateCoroutine(rotationRequest));
 }