示例#1
0
int main(int argc, char *argv[])
{
	int main_return = EXIT_SUCCESS;
	main_states state = MAIN_START;
	update_status update_state;

	if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS) == -1)
	{
		LOG("Application exit with error: %s", SDL_GetError());
		return EXIT_FAILURE;
	}

	Application app;

	while (state != MAIN_EXIT)
	{
		switch (state)
		{
		case MAIN_UPDATE:            //------------------UPDATE-----------------
			//LOG("UPDATING:");
			switch (update_state)
			{
			case UPDATE_CONTINUE:
				update_state = app.Update();
				break;
			case UPDATE_ERROR:
				state = MAIN_ERROR;
				break;
			case UPDATE_STOP:
				state = MAIN_FINISH;
				break;
			default:
				if (!app.ChangeTo(update_state)){ state = MAIN_ERROR; }
				else { update_state = UPDATE_CONTINUE; }
				break;
			}

			break;
		
		case MAIN_ERROR:            //------------------ERROR-----------------
			LOG("Application exit with error: %s", SDL_GetError());
			main_return = EXIT_FAILURE;
			state = MAIN_EXIT;
			break;
		
		case MAIN_START:            //------------------START-----------------
			LOG("Starting Application:");
			if (!app.Init()){ state = MAIN_ERROR; }
			else { state = MAIN_UPDATE; update_state = CHANGE_TO_TITLE; }
			break;
		
		case MAIN_FINISH:            //------------------FINISH-----------------
			LOG("Finishing Application:");
			if (!app.CleanUp()){ state = MAIN_ERROR; }
			else{ state = MAIN_EXIT; }
			SDL_Quit();
			break;
		}
	}
	return main_return;
}