瀏覽代碼

Better organize Device initialization process

Daniele Bartolini 12 年之前
父節點
當前提交
3469d9aa45
共有 4 個文件被更改,包括 47 次插入35 次删除
  1. 36 32
      src/Device.cpp
  2. 2 1
      src/Device.h
  3. 6 2
      src/ResourceManager.cpp
  4. 3 0
      src/ResourceManager.h

+ 36 - 32
src/Device.cpp

@@ -107,36 +107,22 @@ bool Device::init(int argc, char** argv)
 		return false;
 		return false;
 	}
 	}
 
 
-	if (parse_command_line(argc, argv) == false)
-	{
-		return false;
-	}
+	parse_command_line(argc, argv);
+	check_preferred_settings();
 
 
 	// Initialize
 	// Initialize
 	Log::i("Initializing Crown Engine %d.%d.%d...", CROWN_VERSION_MAJOR, CROWN_VERSION_MINOR, CROWN_VERSION_MICRO);
 	Log::i("Initializing Crown Engine %d.%d.%d...", CROWN_VERSION_MAJOR, CROWN_VERSION_MINOR, CROWN_VERSION_MICRO);
 
 
 	create_filesystem();
 	create_filesystem();
 
 
-	Log::d("Filesystem created.");
-
-	Log::d("Filesystem root path: %s", m_filesystem->root_path());
-
 	create_resource_manager();
 	create_resource_manager();
 
 
-	Log::d("Resource manager created.");
-
 	create_input_manager();
 	create_input_manager();
 
 
-	Log::d("Input manager created.");
-
 	create_renderer();
 	create_renderer();
 
 
-	Log::d("Renderer created.");
-
 	create_debug_renderer();
 	create_debug_renderer();
 
 
-	Log::d("Debug renderer created.");
-
 	Log::i("Crown Engine initialized.");
 	Log::i("Crown Engine initialized.");
 
 
 	Log::i("Initializing Game...");
 	Log::i("Initializing Game...");
@@ -399,6 +385,9 @@ void Device::create_filesystem()
 	{
 	{
 		m_filesystem = new Filesystem(m_preferred_root_path);
 		m_filesystem = new Filesystem(m_preferred_root_path);
 	}
 	}
+
+	Log::d("Filesystem created.");
+	Log::d("Filesystem root path: %s", m_filesystem->root_path());
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -416,6 +405,9 @@ void Device::create_resource_manager()
 
 
 	// Create resource manager
 	// Create resource manager
 	m_resource_manager = new ResourceManager(*m_resource_archive, m_resource_allocator);
 	m_resource_manager = new ResourceManager(*m_resource_archive, m_resource_allocator);
+
+	Log::d("Resource manager created.");
+	Log::d("Resource seed: %d", m_resource_manager->seed());
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -423,6 +415,8 @@ void Device::create_input_manager()
 {
 {
 	// Create input manager
 	// Create input manager
 	m_input_manager = new InputManager();
 	m_input_manager = new InputManager();
+
+	Log::d("Input manager created.");
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -447,6 +441,8 @@ void Device::create_renderer()
 		exit(EXIT_FAILURE);
 		exit(EXIT_FAILURE);
 		#endif
 		#endif
 	}
 	}
+
+	Log::d("Renderer created.");
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -454,10 +450,12 @@ void Device::create_debug_renderer()
 {
 {
 	// Create debug renderer
 	// Create debug renderer
 	m_debug_renderer = new DebugRenderer(*m_renderer);
 	m_debug_renderer = new DebugRenderer(*m_renderer);
+
+	Log::d("Debug renderer created.");
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-bool Device::parse_command_line(int argc, char** argv)
+void Device::parse_command_line(int argc, char** argv)
 {
 {
 	static ArgsOption options[] = 
 	static ArgsOption options[] = 
 	{
 	{
@@ -488,27 +486,13 @@ bool Device::parse_command_line(int argc, char** argv)
 			// Root path
 			// Root path
 			case 'r':
 			case 'r':
 			{
 			{
-				if (!os::is_absolute_path(args.optarg()))
-				{
-					os::printf("%s: error: the root path must be absolute.\n", argv[0]);
-					return false;
-				}
-
 				string::strcpy(m_preferred_root_path, args.optarg());
 				string::strcpy(m_preferred_root_path, args.optarg());
-
 				break;
 				break;
 			}
 			}
 			// User path
 			// User path
 			case 'u':
 			case 'u':
 			{
 			{
-				if (!os::is_absolute_path(args.optarg()))
-				{
-					os::printf("%s: error: the user path must be absolute.\n", argv[0]);
-					return false;
-				}
-
 				string::strcpy(m_preferred_user_path, args.optarg());
 				string::strcpy(m_preferred_user_path, args.optarg());
-
 				break;
 				break;
 			}
 			}
 			// Window width
 			// Window width
@@ -532,8 +516,28 @@ bool Device::parse_command_line(int argc, char** argv)
 			}
 			}
 		}
 		}
 	}
 	}
+}
 
 
-	return true;
+//-----------------------------------------------------------------------------
+void Device::check_preferred_settings()
+{
+	if (!os::is_absolute_path(m_preferred_root_path))
+	{
+		Log::e("The root path must be absolute.");
+		exit(EXIT_FAILURE);
+	}
+
+	if (!os::is_absolute_path(m_preferred_user_path))
+	{
+		Log::e("The user path must be absolute.");
+		exit(EXIT_FAILURE);
+	}
+
+	if (m_preferred_window_width == 0 || m_preferred_window_height == 0)
+	{
+		Log::e("Window width and height must be greater than zero.");
+		exit(EXIT_FAILURE);
+	}
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------

+ 2 - 1
src/Device.h

@@ -114,7 +114,8 @@ private:
 	void					create_renderer();
 	void					create_renderer();
 	void					create_debug_renderer();
 	void					create_debug_renderer();
 
 
-	bool					parse_command_line(int argc, char** argv);
+	void					parse_command_line(int argc, char** argv);
+	void					check_preferred_settings();
 	void					print_help_message();
 	void					print_help_message();
 
 
 private:
 private:

+ 6 - 2
src/ResourceManager.cpp

@@ -63,8 +63,6 @@ ResourceManager::ResourceManager(ResourceArchive& archive, Allocator& allocator)
 	device()->filesystem()->close(seed_file);
 	device()->filesystem()->close(seed_file);
 
 
 	sscanf(tmp_buf, "%u", &m_seed);
 	sscanf(tmp_buf, "%u", &m_seed);
-
-	Log::d("Seed: %d", m_seed);
 }
 }
 
 
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
@@ -231,6 +229,12 @@ void ResourceManager::flush()
 	}
 	}
 }
 }
 
 
+//-----------------------------------------------------------------------------
+uint32_t ResourceManager::seed() const
+{
+	return m_seed;
+}
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ResourceManager::check_load_queue()
 void ResourceManager::check_load_queue()
 {
 {

+ 3 - 0
src/ResourceManager.h

@@ -119,6 +119,9 @@ public:
 	/// Forces all the loading requests to complete before preceeding.
 	/// Forces all the loading requests to complete before preceeding.
 	void					flush();
 	void					flush();
 
 
+	/// Returns the seed used to generate resource name hashes.
+	uint32_t				seed() const;
+
 private:
 private:
 
 
 	// Checks the load queue and signal the backgroud about pending
 	// Checks the load queue and signal the backgroud about pending