Deferred loading of save files

This commit is contained in:
Simon Robertshaw
2012-06-01 20:34:17 +01:00
parent 8dcccbc4fc
commit 939265a77d
4 changed files with 65 additions and 26 deletions

View File

@@ -162,6 +162,8 @@ typedef unsigned int pixel;
typedef unsigned char uint8; typedef unsigned char uint8;
extern int saveURIOpen; extern int saveURIOpen;
extern char * saveDataOpen;
extern int saveDataOpenSize;
extern int amd; extern int amd;

View File

@@ -233,6 +233,7 @@ static void CustomApplicationMain (int argc, char **argv)
#endif #endif
void *file_load(char *fn, int *size);
/* /*
* Catch document open requests...this lets us notice files when the app * Catch document open requests...this lets us notice files when the app
@@ -251,15 +252,15 @@ static void CustomApplicationMain (int argc, char **argv)
*/ */
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{ {
const char *temparg; /*const char *temparg;
size_t arglen; size_t arglen;
char *arg; char *arg;
char **newargv; char **newargv;
if (!gFinderLaunch) /* MacOS is passing command line args. */ if (!gFinderLaunch)
return FALSE; return FALSE;
if (gCalledAppMainline) /* app has started, ignore this document. */ if (gCalledAppMainline)
return FALSE; return FALSE;
temparg = [filename UTF8String]; temparg = [filename UTF8String];
@@ -280,7 +281,24 @@ static void CustomApplicationMain (int argc, char **argv)
gArgv[gArgc++] = "open"; gArgv[gArgc++] = "open";
gArgv[gArgc++] = arg; gArgv[gArgc++] = arg;
gArgv[gArgc] = NULL; gArgv[gArgc] = NULL;
return TRUE; return TRUE;*/
const char * tempArg;
char * arg;
size_t argLen;
tempArg = [filename UTF8String];
argLen = SDL_strlen(tempArg)+1;
arg = (char *) SDL_malloc(argLen);
if (arg == NULL)
return FALSE;
SDL_strlcpy(arg, tempArg, argLen);
saveDataOpen = file_load(arg, &saveDataOpenSize);
if(saveDataOpen)
return TRUE;
saveDataOpen = NULL;
saveDataOpenSize = 0;
return FALSE;
} }
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent

View File

@@ -820,7 +820,7 @@ void draw_svf_ui(pixel *vid_buf, int alternate)// all the buttons at the bottom
} }
// the reload button // the reload button
c = (svf_open || svf_fileopen) ? 255 : 128; c = (svf_last) ? 255 : 128;
drawtext(vid_buf, 23, YRES+(MENUSIZE-14), "\x91", c, c, c, 255); drawtext(vid_buf, 23, YRES+(MENUSIZE-14), "\x91", c, c, c, 255);
drawrect(vid_buf, 19, YRES+(MENUSIZE-16), 16, 14, c, c, c, 255); drawrect(vid_buf, 19, YRES+(MENUSIZE-16), 16, 14, c, c, c, 255);

View File

@@ -203,6 +203,8 @@ char new_message_msg[255];
float mheat = 0.0f; float mheat = 0.0f;
int saveURIOpen = 0; int saveURIOpen = 0;
char * saveDataOpen = NULL;
int saveDataOpenSize = 0;
int do_open = 0; int do_open = 0;
int sys_pause = 0; int sys_pause = 0;
@@ -830,6 +832,11 @@ int main(int argc, char *argv[])
argc = i+2; argc = i+2;
break; break;
} }
else if (!strncmp(argv[i], "open", 5) && i+1<argc)
{
saveDataOpen = file_load(argv[i+1], &saveDataOpenSize);
i++;
}
} }
load_presets(); load_presets();
@@ -875,26 +882,6 @@ int main(int argc, char *argv[])
} }
else if (!strncmp(argv[i], "open", 5) && i+1<argc) else if (!strncmp(argv[i], "open", 5) && i+1<argc)
{ {
int size;
void *file_data;
file_data = file_load(argv[i+1], &size);
if (file_data)
{
svf_last = file_data;
svf_lsize = size;
if(!parse_save(file_data, size, 1, 0, 0, bmap, fvx, fvy, vx, vy, pv, signs, parts, pmap))
{
it=0;
svf_filename[0] = 0;
svf_fileopen = 1;
} else {
saveOpenError = 1;
svf_last = NULL;
svf_lsize = 0;
free(file_data);
file_data = NULL;
}
}
i++; i++;
} }
else if (!strncmp(argv[i], "ddir", 5) && i+1<argc) else if (!strncmp(argv[i], "ddir", 5) && i+1<argc)
@@ -979,6 +966,7 @@ int main(int argc, char *argv[])
if(saveOpenError) if(saveOpenError)
{ {
saveOpenError = 0;
error_ui(vid_buf, 0, "Unable to open save file."); error_ui(vid_buf, 0, "Unable to open save file.");
} }
@@ -1129,6 +1117,37 @@ int main(int argc, char *argv[])
} }
do_check = (do_check+1) & 15; do_check = (do_check+1) & 15;
} }
if (saveDataOpen)
{
//Clear all settings and simulation data
clear_sim();
it=0;
legacy_enable = 0;
svf_filename[0] = 0;
svf_fileopen = 0;
svf_myvote = 0;
svf_open = 0;
svf_publish = 0;
svf_own = 0;
svf_id[0] = 0;
svf_name[0] = 0;
svf_tags[0] = 0;
svf_description[0] = 0;
gravityMode = 0;
airMode = 0;
svf_last = saveDataOpen;
svf_lsize = saveDataOpenSize;
if(parse_save(saveDataOpen, saveDataOpenSize, 1, 0, 0, bmap, fvx, fvy, vx, vy, pv, signs, parts, pmap))
{
saveOpenError = 1;
svf_last = NULL;
svf_lsize = 0;
free(saveDataOpen);
}
saveDataOpenSize = 0;
saveDataOpen = NULL;
}
if (http_session_check) if (http_session_check)
{ {
if (!do_s_check && http_async_req_status(http_session_check)) if (!do_s_check && http_async_req_status(http_session_check))
@@ -2280,7 +2299,7 @@ int main(int argc, char *argv[])
memset(fire_b, 0, sizeof(fire_b)); memset(fire_b, 0, sizeof(fire_b));
} }
} }
if (x>=19 && x<=35 && svf_last && (svf_open || svf_fileopen) && !bq) { if (x>=19 && x<=35 && svf_last && !bq) {
//int tpval = sys_pause; //int tpval = sys_pause;
parse_save(svf_last, svf_lsize, 1, 0, 0, bmap, vx, vy, pv, fvx, fvy, signs, parts, pmap); parse_save(svf_last, svf_lsize, 1, 0, 0, bmap, vx, vy, pv, fvx, fvy, signs, parts, pmap);
//sys_pause = tpval; //sys_pause = tpval;