Exemple #1
0
    public void Zoom(Vector2 globalFocalPoint, float zoomLevel)
    {
        zoomLevel_ = zoomLevel;

        float min    = -3000;
        float max    = 3000;
        float width  = max - min;
        float height = max - min;

        float oldScale = gameLayer.scale;
        float newScale = zoomLevel_;

        Vector2 globalLayerZero = gameLayer.LocalToGlobal(Vector2.zero);

        Vector2 globalLayerOriginBeforeScale = new Vector2(globalLayerZero.x + min * oldScale, globalLayerZero.y + min * oldScale);
        Vector2 globalLayerOriginAfterScale  = new Vector2(globalLayerZero.x + min * newScale, globalLayerZero.y + min * newScale);

        Vector2 ratioOfFocusToOrigin = new Vector2((globalFocalPoint.x - globalLayerOriginBeforeScale.x) / (width * oldScale), (globalFocalPoint.y - globalLayerOriginBeforeScale.y) / (height * oldScale));

        Vector2 globalFocusAfterScale = new Vector2(globalLayerOriginAfterScale.x + ratioOfFocusToOrigin.x * width * newScale, globalLayerOriginAfterScale.y + ratioOfFocusToOrigin.y * height * newScale);

        Vector2 deltaPoint = new Vector2(globalFocalPoint.x - globalFocusAfterScale.x, globalFocalPoint.y - globalFocusAfterScale.y);

        gameLayer.scale = newScale;
        float newX = gameLayer.x + deltaPoint.x;
        float newY = gameLayer.y + deltaPoint.y;

        gameLayer.x = newX;
        gameLayer.y = newY;
    }