Skip to content

Commit

Permalink
libcommon|Refactor: Completed refactoring SaveInfo into an object
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Jun 25, 2012
1 parent 11cb865 commit 65d9a03
Show file tree
Hide file tree
Showing 12 changed files with 219 additions and 164 deletions.
2 changes: 1 addition & 1 deletion doomsday/plugins/common/include/p_saveg.h
Expand Up @@ -99,7 +99,7 @@ boolean SV_HxHaveMapSaveForSlot(int slot, uint map);
* @return Game-save info for logical save @a slot. Always returns valid
* info even if supplied with an invalid or unused slot identifer.
*/
saveinfo_t* SV_SaveInfoForSlot(int slot);
SaveInfo* SV_SaveInfoForSlot(int slot);

boolean SV_ComposeSavePathForSlot(int slot, ddstring_t* path);

Expand Down
6 changes: 3 additions & 3 deletions doomsday/plugins/common/include/p_saveio.h
Expand Up @@ -59,7 +59,7 @@ const char* SV_SavePath(void);
const char* SV_ClientSavePath(void);
#endif

boolean SV_Recognise(saveinfo_t* info);
boolean SV_Recognise(SaveInfo* info);

/*
* File management
Expand Down Expand Up @@ -113,8 +113,8 @@ short SV_ReadShort(void);
long SV_ReadLong(void);
float SV_ReadFloat(void);

void SV_SaveInfo_Write(saveinfo_t* info);
void SV_SaveInfo_Read(saveinfo_t* info);
void SV_SaveInfo_Write(SaveInfo* info);
void SV_SaveInfo_Read(SaveInfo* info);

void SV_MaterialArchive_Write(MaterialArchive* arc);
void SV_MaterialArchive_Read(MaterialArchive* arc, int version);
Expand Down
43 changes: 30 additions & 13 deletions doomsday/plugins/common/include/saveinfo.h
Expand Up @@ -23,6 +23,7 @@
#ifndef LIBCOMMON_SAVEINFO_H
#define LIBCOMMON_SAVEINFO_H

#include "doomsday.h"
#include "p_savedef.h"

typedef struct saveheader_s {
Expand All @@ -45,44 +46,60 @@ typedef struct saveheader_s {
unsigned int gameId;
} saveheader_t;

typedef struct saveinfo_s {
ddstring_t filePath;
ddstring_t name;
saveheader_t header;
} saveinfo_t;
/**
* SaveInfo instance (opaque).
*/
struct saveinfo_s;
typedef struct saveinfo_s SaveInfo;

SaveInfo* SaveInfo_New(void);
SaveInfo* SaveInfo_NewWithFilePath(const ddstring_t* filePath);

void SaveInfo_Delete(SaveInfo* info);

const ddstring_t* SaveInfo_FilePath(SaveInfo* info);

void SaveInfo_SetFilePath(saveinfo_t* info, ddstring_t* newFilePath);
const saveheader_t* SaveInfo_Header(SaveInfo* info);

void SaveInfo_SetGameId(saveinfo_t* info, uint newGameId);
const ddstring_t* SaveInfo_Name(SaveInfo* info);

void SaveInfo_SetName(saveinfo_t* info, const char* newName);
void SaveInfo_SetFilePath(SaveInfo* info, ddstring_t* newFilePath);

void SaveInfo_Configure(saveinfo_t* info);
void SaveInfo_SetGameId(SaveInfo* info, uint newGameId);

void SaveInfo_Update(saveinfo_t* info);
void SaveInfo_SetName(SaveInfo* info, const char* newName);

void SaveInfo_Configure(SaveInfo* info);

void SaveInfo_Update(SaveInfo* info);

/**
* @return Is this state loadable for the current game session.
*/
boolean SaveInfo_IsLoadable(SaveInfo* info);

/**
* Serializes the save info using @a writer.
*
* @param info SaveInfo instance.
* @param writer Writer instance.
*/
void SaveInfo_Write(saveinfo_t* info, Writer* writer);
void SaveInfo_Write(SaveInfo* info, Writer* writer);

/**
* Deserializes the save info using @a reader.
*
* @param info SaveInfo instance.
* @param reader Reader instance.
*/
void SaveInfo_Read(saveinfo_t* info, Reader* reader);
void SaveInfo_Read(SaveInfo* info, Reader* reader);

#if __JHEXEN__
/**
* @brief libhexen specific version of @see SaveInfo_Read() for deserializing
* legacy version 9 save state info.
*/
void SaveInfo_Read_Hx_v9(saveinfo_t* info, Reader* reader);
void SaveInfo_Read_Hx_v9(SaveInfo* info, Reader* reader);
#endif

#endif /* LIBCOMMON_SAVEINFO_H */
14 changes: 7 additions & 7 deletions doomsday/plugins/common/src/g_game.c
Expand Up @@ -2491,11 +2491,11 @@ void G_DoSaveGame(void)
else
{
// No name specified.
const saveinfo_t* info = SV_SaveInfoForSlot(gaSaveGameSlot);
if(!gaSaveGameGenerateName && !Str_IsEmpty(&info->name))
SaveInfo* info = SV_SaveInfoForSlot(gaSaveGameSlot);
if(!gaSaveGameGenerateName && !Str_IsEmpty(SaveInfo_Name(info)))
{
// Slot already in use; reuse the existing name.
nameStr = &info->name;
nameStr = SaveInfo_Name(info);
}
else
{
Expand Down Expand Up @@ -3394,7 +3394,7 @@ D_CMD(LoadGame)
if(SV_IsSlotUsed(slot))
{
// A known used slot identifier.
const saveinfo_t* info;
SaveInfo* info;
char buf[80];

if(confirm || !cfg.confirmQuickGameSave)
Expand All @@ -3405,7 +3405,7 @@ D_CMD(LoadGame)
}

info = SV_SaveInfoForSlot(slot);
dd_snprintf(buf, 80, QLPROMPT, Str_Text(&info->name));
dd_snprintf(buf, 80, QLPROMPT, Str_Text(SaveInfo_Name(info)));

S_LocalSound(SFX_QUICKLOAD_PROMPT, NULL);
Hu_MsgStart(MSG_YESNO, buf, loadGameConfirmResponse, slot, 0);
Expand Down Expand Up @@ -3500,8 +3500,8 @@ D_CMD(SaveGame)
}

{
const saveinfo_t* info = SV_SaveInfoForSlot(slot);
dd_snprintf(buf, 80, QSPROMPT, Str_Text(&info->name));
SaveInfo* info = SV_SaveInfoForSlot(slot);
dd_snprintf(buf, 80, QSPROMPT, Str_Text(SaveInfo_Name(info)));

S_LocalSound(SFX_QUICKSAVE_PROMPT, NULL);
Hu_MsgStart(MSG_YESNO, buf, saveGameConfirmResponse, slot, (void*)name);
Expand Down
6 changes: 3 additions & 3 deletions doomsday/plugins/common/src/hu_menu.c
Expand Up @@ -3324,13 +3324,13 @@ void Hu_MenuUpdateGameSaveWidgets(void)
{
mn_object_t* obj = MN_MustFindObjectOnPage(page, 0, saveSlotObjectIds[i]);
mndata_edit_t* edit = (mndata_edit_t*) obj->_typedata;
const saveinfo_t* info = SV_SaveInfoForSlot(edit->data2);
SaveInfo* info = SV_SaveInfoForSlot(edit->data2);
const char* text = "";

MNObject_SetFlags(obj, FO_SET, MNF_DISABLED);
if(!Str_IsEmpty(&info->filePath))
if(SaveInfo_IsLoadable(info))
{
text = Str_Text(&info->name);
text = Str_Text(SaveInfo_Name(info));
MNObject_SetFlags(obj, FO_CLEAR, MNF_DISABLED);
}
MNEdit_SetText(obj, MNEDIT_STF_NO_ACTION, text);
Expand Down

0 comments on commit 65d9a03

Please sign in to comment.