diff --git a/direct/src/plugin/p3dInstance.cxx b/direct/src/plugin/p3dInstance.cxx index 7d2b1201bb..6781c0ee6a 100644 --- a/direct/src/plugin/p3dInstance.cxx +++ b/direct/src/plugin/p3dInstance.cxx @@ -153,6 +153,7 @@ P3DInstance(P3D_request_ready_func *func, _download_package_index = 0; _total_download_size = 0; _total_downloaded = 0; + _packages_specified = false; _download_started = false; _download_complete = false; _instance_started = false; @@ -1114,6 +1115,11 @@ remove_package(P3DPackage *package) { //////////////////////////////////////////////////////////////////// bool P3DInstance:: get_packages_info_ready() const { + if (!_packages_specified) { + // We haven't even specified the full set of required packages yet. + return false; + } + Packages::const_iterator pi; for (pi = _packages.begin(); pi != _packages.end(); ++pi) { if (!(*pi)->get_info_ready()) { @@ -2074,6 +2080,8 @@ scan_app_desc_file(TiXmlDocument *doc) { //////////////////////////////////////////////////////////////////// void P3DInstance:: add_packages() { + assert(!_packages_specified); + P3DInstanceManager *inst_mgr = P3DInstanceManager::get_global_ptr(); TiXmlElement *xrequires = _xpackage->FirstChildElement("requires"); @@ -2091,6 +2099,23 @@ add_packages() { xrequires = xrequires->NextSiblingElement("requires"); } + + _packages_specified = true; + if (get_packages_info_ready()) { + // All packages are ready to go. Let's start some download + // action. + _downloading_packages.clear(); + _total_download_size = 0; + Packages::const_iterator pi; + for (pi = _packages.begin(); pi != _packages.end(); ++pi) { + P3DPackage *package = (*pi); + if (package->get_info_ready() && !package->get_ready()) { + _downloading_packages.push_back(package); + _total_download_size += package->get_download_size(); + } + } + ready_to_install(); + } } diff --git a/direct/src/plugin/p3dInstance.h b/direct/src/plugin/p3dInstance.h index 2fb2953d3b..26bd28c777 100644 --- a/direct/src/plugin/p3dInstance.h +++ b/direct/src/plugin/p3dInstance.h @@ -349,6 +349,7 @@ private: int _download_package_index; size_t _total_download_size; size_t _total_downloaded; + bool _packages_specified; bool _download_started; bool _download_complete; bool _instance_started;