コード例 #1
0
ファイル: PrefabStore.cs プロジェクト: nemerle/Seccu
        public Model modelFind(string geoset_name, string model_name)
        {
            Model ptr_sub = null;

            if (string.IsNullOrEmpty(model_name) || string.IsNullOrEmpty(geoset_name))
            {
                Debug.LogError("Bad model/geometry set requested:");
                if (!string.IsNullOrEmpty(model_name))
                {
                    Debug.LogError("Model: " + model_name);
                }
                if (!string.IsNullOrEmpty(geoset_name))
                {
                    Debug.LogError("GeoFile: " + geoset_name);
                }
                return(null);
            }

            GeoSet geoset = GeoSet.Load(geoset_name, m_base_path);

            if (null == geoset) // failed to load the geometry set
            {
                Debug.LogErrorFormat("Geoset load failed {0},{1}", geoset_name, m_base_path);
                return(null);
            }

            int end_of_name_idx = model_name.IndexOf("__");

            if (end_of_name_idx == -1)
            {
                end_of_name_idx = model_name.Length;
            }

            string basename = model_name.Substring(0, end_of_name_idx);

            foreach (Model m in geoset.subs)
            {
                string modelname = m.name;
                if (modelname.Length == 0)
                {
                    continue;
                }

                bool subs_in_place = (modelname.Length <= end_of_name_idx ||
                                      modelname.Substring(end_of_name_idx).StartsWith("__"));
                if (subs_in_place && modelname.StartsWith(basename, StringComparison.OrdinalIgnoreCase))
                {
                    ptr_sub = m; // TODO: return immediately
                }
            }

            return(ptr_sub);
        }
コード例 #2
0
ファイル: PrefabStore.cs プロジェクト: nemerle/Seccu
        public bool loadNamedPrefab(string name, LoadingContext ctx)
        {
            GeoStoreDef geo_store = groupGetFileEntryPtr(name);

            if (null == geo_store)
            {
                return(false);
            }
            if (geo_store.loaded)
            {
                return(true);
            }

            geo_store.loaded = true;
            // load given prefab's geoset
            GeoSet.Load(geo_store.geopath, m_base_path);
            ctx.loadSubgraph(geo_store.geopath, this);
            return(loadPrefabForNode(ctx.m_target.getNodeByName(name), ctx));
        }
コード例 #3
0
ファイル: PrefabStore.cs プロジェクト: nemerle/Seccu
        internal bool loadPrefabForNode(SceneNode node, LoadingContext ctx) //groupLoadRequiredLibsForNode
        {
            GeoStoreDef gf;

            if (null == node || false == node.in_use)
            {
                return(false);
            }

            if (null != node.m_geoset_info)
            {
                gf = node.m_geoset_info;
            }
            else
            {
                gf = groupGetFileEntryPtr(node.m_name);
                node.m_geoset_info = gf;
                if (null == node.m_geoset_info)
                {
                    node.m_geoset_info = m_geostore_sentinel; // prevent future load attempts
                }
            }

            if (null == gf || gf == m_geostore_sentinel)
            {
                return(false);
            }

            if (!gf.loaded)
            {
                gf.loaded = true;
                GeoSet.Load(gf.geopath, m_base_path); // load given subgraph's root geoset
                ctx.loadSubgraph(gf.geopath, this);
            }

            return(true);
        }