ISteamRemoteStorage, que gravam arquivos na pasta de armazenamento do jogo no disco rígido local e os sincronizam com a nuvem. Como alternativa, você pode fazer todas as leituras e gravações diretamente no sistema de arquivos do computador e, em seguida, usar o Steam Auto-Cloud para sincronizar a pasta local que contém os dados do jogo com a nuvem.
O Microsoft Game Development Kit (GDK) oferece suporte às duas abordagens:
- Para salvamentos em nuvem baseados em código, o GDK oferece um wrapper simplificado da API
XGameSave, mais complexa, que fornece funcionalidade semelhante à dos métodos deISteamRemoteStorage. - Para uma abordagem semelhante ao Steam Auto-Cloud, o GDK oferece suporte à portabilidade de títulos anteriores para PC Game Saves com salvamentos em nuvem sem código, que sincroniza uma pasta local designada com a nuvem sem exigir alterações no seu código de E/S de arquivos.
A API
XGameSave completa, sem wrapper, oferece mais funcionalidade e flexibilidade do que o wrapper simples. Se você precisar de alguma dessas funcionalidades, não use o wrapper. Os jogos não devem alternar entre os dois nem misturar chamadas de API de ambos. Para obter mais informações sobre a API XGameSave, consulte Salvamentos de jogos.Comparações de operações de arquivo
Os exemplos de código a seguir mostram como realizar operações básicas de arquivo na API Steamworks Remote Storage e no equivalente do GDK. Eles presumem que a variávelprovider contém um ponteiro para um objeto Microsoft::Xbox::Wrappers::GameSave::Provider inicializado.
Se você não estiver usando a API Steam Remote Storage, mas tiver optado por usar o Steam Auto-Cloud, substitua as chamadas da API Remote Storage pelas equivalentes da API do sistema de arquivos.
Ler um arquivo
Steamworks
GDK
Documentação de referência
Microsoft.Xbox.Wrappers.XGameSave.Provider.LoadGravar um arquivo
Steamworks
GDK
Documentação de referência
Microsoft.Xbox.Wrappers.XGameSave.Provider.SaveExcluir um arquivo
No Steam, você pode excluir um arquivo na nuvem, mas manter a cópia local (FileForget), ou excluir um arquivo dos dois locais (FileDelete). A API do wrapper XGameSave não tem um equivalente a FileForget. A função Delete dela funciona como FileDelete no Steamworks.
Steamworks
GDK
Documentação de referência
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string)
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string, std::string)
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string, BlobNames)
Obter todos os arquivos
Steamworks
GDK
Documentação de referência
- Microsoft.Xbox.Wrappers.XGameSave.Provider.QueryContainers
- Microsoft.Xbox.Wrappers.XGameSave.Provider.QueryContainerBlobs
Verificar o espaço disponível
Nos exemplos a seguir,totalBytes é a quantidade de espaço que seu jogo recebe no provedor de armazenamento em nuvem. availableBytes é a quantidade de espaço livre restante (ou seja, availableBytes = totalBytes – bytesUsed).
Steamworks
GDK
Documentação de referência
Microsoft.Xbox.Wrappers.XGameSave.Provider.GetQuotaDiferenças de terminologia
No Steam, os dados do armazenamento remoto são gerenciados como arquivos, que funcionam como arquivos em um disco rígido local. Para ler ou gravar, você especifica o arquivo e, em seguida, obtém ou define os bytes que ele contém. No Microsoft Game Development Kit (GDK), o equivalente aos arquivos do Steam são os blobs. Os blobs são agrupados em uma estrutura chamada contêiner. Um contêiner é um grupo nomeado de blobs. Por exemplo, você pode usar contêineres para oferecer suporte a vários slots de salvamento por usuário, com os mesmos nomes de arquivo em cada slot. Se você não precisar da camada organizacional extra que os contêineres fornecem, coloque todos os seus blobs (arquivos) no mesmo contêiner.Os nomes de contêiner não podem incluir espaços. Tentar acessar ou criar um nome de contêiner que inclua um espaço faz com que o método do provedor retorne um HRESULT
0x80830001: o volume especificado não oferece suporte a camadas de armazenamento.Limites de armazenamento
O Microsoft Game Development Kit (GDK) tem um tamanho máximo de gravação de blob ou arquivo e um limite geral de armazenamento menores que os do Steam. No Steam, cada operação de gravação de arquivo é limitada a 100 mebibytes (MiB), e cada arquivo não pode ter mais de 200 MiB. Por outro lado, a APIXGameSave e seu wrapper limitam cada blob a 16 MB e permitem no máximo 256 MB por usuário por jogo.
Se você precisar armazenar mais de 16 MB de dados em um blob, divida os dados em vários blobs. Em seguida, implemente uma função de leitura e gravação sequencial para processar os dados um blob por vez.
As funções do wrapper são bloqueantes
A interfaceISteamRemoteStorage oferece duas versões das funções de leitura e gravação: FileRead e FileWrite, além de FileReadAsync e FileWriteAsync. As versões Async fazem um retorno de chamada quando o arquivo é lido ou gravado. As funções do wrapper simplificado XGameSave não oferecem versões assíncronas de seus equivalentes a FileRead e FileWrite. Provider::Load e Provider::Save são bloqueantes, portanto, tenha esse comportamento em mente ao usá-las no seu jogo.
Por esse motivo, Provider::Initialize gera uma exceção se você a chamar a partir do thread da interface do usuário.
Inicialização
Inclua o arquivo de cabeçalho do wrapper na solução do seu jogo antes de usar qualquer método do wrapper. Você pode encontrá-lo em %GRDKLatest%\GameKit\Include\xgamesavewrappers.hpp. Antes de usar os métodos do wrapperXGameSave, crie uma instância da classe Provider e chame o método Provider::Initialize. Mantenha um ponteiro para a instância de Provider durante todo o tempo de vida do seu jogo. Chame Provider::Initialize a partir de um thread diferente do thread da interface do usuário. O método gera uma exceção se você o chamar a partir do thread da interface do usuário. Para inicializar o provedor do wrapper, você precisa de um XUserHandle para o usuário atual e do identificador de configuração de serviço (SCID) do seu jogo.
