// 移动速度
var _xOffset = 0;
// 最小偏移半径
var _xMin = halfH;
// 最大偏移半径
var _xMax = room_width - halfH;
// 最小偏移半径
var _yOffset = 0;
// 最大偏移半径
var _yMin = halfW;
// 最大偏移半径
var _yMax = room_height - halfW;
// 当前调整值
var _ca = global.curAdjust;

// 如果存在调整值,则更新 _xOffset 和 _yOffset
if (_ca != noone) {
    _xOffset = _ca.x_offset;
    _yOffset = _ca.y_offset;

    // 如果有左边界,则更新 _xMin
    if (_ca.left_clamp) {
        _xMin = _ca.x + halfW;
    }

    // 如果有右边界,则更新 _xMax
    if (_ca.right_clamp) {
        _xMax = _ca.x + _ca.sprite_width - halfW;
    }

    // 如果有上边界,则更新 _yMin
    if (_ca.up_clamp) {
        _yMin = _ca.y + halfH;
    }

    // 如果有下边界,则更新 _yMax
    if (_ca.down_clamp) {
        _yMax = _ca.y + _ca.sprite_height - halfH;
    }
}

// 关闭摄像头
if (global.CamLock == true) {
    // 缩放摄像头
    x += (follow.x - x) / panSpd;
    y += (follow.y - x) / panSpd;
}

// 逐帧计数
transition_frame_count += 1;

// 计算当前播放者位置
xx = oPlayer.x + _xOffset;
yy = oPlayer.y + _yOffset;
// 修剪播放者位置到边界内
xx = clamp(xx, _xMin, _xMax);
yy = clamp(yy, _yMin, _yMax);

// 计算摄像头要移动的距离
var _dx = (xx - x);
var _dy = (yy - y);

// 关闭摄像头
if (global.CamLock == false) {
    // 移动摄像头
    x += _dx;
    y += _dy;
}

// 修剪摄像头位置到边界内
x = clamp(x, 0 + halfW, room_width - halfW);
y = clamp(y, 0 + halfH, room_height - halfH);

// 设置摄像头视点的位置
camera_set_view_pos(cam, x - halfW, y - halfH);