public void Wrap(int perimeterSize, int worldSize) { Node2D root = GetNode <Node2D>(RootPath); bool posUpdated = false; Vector2 newPos = root.GlobalPosition; if (newPos.x < 0) { newPos.x += worldSize; posUpdated = true; } else if (newPos.x > worldSize) { newPos.x -= worldSize; posUpdated = true; } if (newPos.y < 0) { newPos.y += worldSize; posUpdated = true; } else if (newPos.y > worldSize) { newPos.y -= worldSize; posUpdated = true; } if (posUpdated) { root.GlobalPosition = newPos; if (CameraPath != "") { Camera2D camera = GetNode <Camera2D>(CameraPath); camera.ForceUpdateScroll(); camera.ResetSmoothing(); } } }