| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 | 
							- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEditor;
 
- using UnityEngine;
 
- using System.IO;
 
- using System.Threading;
 
- using UnityEditor.SceneManagement;
 
- namespace AIPagedLod
 
- {
 
-     [CustomEditor(typeof(LoadPagedLodFromFileManager))]
 
-     public class LoadPagedLodFromFileManagerEditor : Editor
 
-     {
 
-         LoadPagedLodFromFileManager mTarget;
 
-         int mLoadedCount = 0;
 
-         Thread mLoadThread = null;
 
-         List<PagedLodFileLoader> mNeedPagedLodLoaderList = new List<PagedLodFileLoader>();
 
-         List<string> mExistTile = new List<string>();
 
-         bool mStopLoadFlag = false;
 
-         bool mGenerateGameObjectFlag = false;
 
-         public static bool mUpdateSceneUIFlag = false;
 
-         void OnEnable()
 
-         {
 
-             PagedLodConfig.mInstance = Component.FindObjectOfType<PagedLodConfig>();
 
-             mTarget = (LoadPagedLodFromFileManager)target;
 
-             mTarget.mConfig.mStartLevel = LoadPagedLodFromFileManager.GetDataStartLevel(mTarget.mConfig.mDataPath);
 
-         }
 
-         private void OnDisable()
 
-         {
 
-             DisposeLoader();
 
-             mUpdateSceneUIFlag = false;
 
-             mGenerateGameObjectFlag = false;
 
-             mStopLoadFlag = true;
 
-             mLoadThread = null;
 
-         }
 
-         public override void OnInspectorGUI()
 
-         {
 
-             GUILayoutOption[] option1 = { GUILayout.Width(110) };
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("IsUpdate", option1);
 
-             mTarget.mConfig.mIsUpdate = EditorGUILayout.Toggle(mTarget.mConfig.mIsUpdate);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("DataPath", option1);
 
-             mTarget.mConfig.mDataPath = EditorGUILayout.TextField(mTarget.mConfig.mDataPath);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("DataUrl", option1);
 
-             mTarget.mConfig.mBaseUrl = EditorGUILayout.TextField(mTarget.mConfig.mBaseUrl);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("DataName", option1);
 
-             mTarget.mConfig.mDataName = EditorGUILayout.TextField(mTarget.mConfig.mDataName);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("IsDJData", option1);
 
-             mTarget.mConfig.mIsDaJiangData = EditorGUILayout.Toggle(mTarget.mConfig.mIsDaJiangData);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("StartLevel", option1);
 
-             EditorGUILayout.LabelField(mTarget.mConfig.mStartLevel.ToString());
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             mTarget.mConfig.mLoadStartLevelFlag = EditorGUILayout.ToggleLeft("StartLoadLevel:", mTarget.mConfig.mLoadStartLevelFlag, option1);
 
-             mTarget.mConfig.mStartLoadLevel = EditorGUILayout.IntField(mTarget.mConfig.mStartLoadLevel, option1);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("LoadTileCount", option1);
 
-             mTarget.mConfig.mLoadPagedLodCount = EditorGUILayout.IntField(mTarget.mConfig.mLoadPagedLodCount);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("IsGenerateCollider", option1);
 
-             mTarget.mConfig.mIsGenerateCollider = EditorGUILayout.Toggle(mTarget.mConfig.mIsGenerateCollider);
 
-             EditorGUILayout.EndHorizontal();
 
-             EditorGUILayout.BeginHorizontal();
 
-             EditorGUILayout.LabelField("TileCount ", option1);
 
-             EditorGUILayout.LabelField(mTarget.transform.childCount.ToString());
 
-             EditorGUILayout.EndHorizontal();
 
-             if (mLoadThread != null)
 
-             {
 
-                 if (GUILayout.Button("StopLoad(" + mNeedPagedLodLoaderList.Count + "/" + mLoadedCount + ")"))
 
-                 {
 
-                     mStopLoadFlag = true;
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 if (GUILayout.Button("开始加载"))
 
-                 {
 
-                     LoadFromFile();
 
-                 }
 
-             }
 
-             if (GUILayout.Button("清除所有"))
 
-             {
 
-                 List<GameObject> removeObjList = new List<GameObject>();
 
-                 for (int i = 0; i < mTarget.transform.childCount; ++i)
 
-                 {
 
-                     removeObjList.Add(mTarget.transform.GetChild(i).gameObject);
 
-                 }
 
-                 foreach (var obj in removeObjList)
 
-                 {
 
-                     GameObject.DestroyImmediate(obj);
 
-                 }
 
-             }
 
-             
 
-             if (!Application.isPlaying)
 
-             {
 
-                 EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
 
-             }
 
-         }
 
-    
 
-         private void OnSceneGUI()
 
-         {
 
-             if (mUpdateSceneUIFlag)
 
-             {
 
-                 EditorUtility.SetDirty(mTarget);
 
-             }
 
-             if (mGenerateGameObjectFlag)
 
-             {
 
-                 GenerateGameObject();
 
-             }
 
-         }
 
-         void GenerateGameObject()
 
-         {
 
-             int loadedCount = 0;
 
-             for (int i = 0; i < mNeedPagedLodLoaderList.Count; ++i)
 
-             {
 
-                 PagedLodFileLoader loader = mNeedPagedLodLoaderList[i];
 
-                 if (loader.mIsFinished)
 
-                 {
 
-                     if (!loader.mIsLoaded)
 
-                     {
 
-                         loader.mIsLoaded = true;
 
-                         PagedLod pagedLod = LoadPagedLodFromFileManager.LoadPagedLod(loader, mTarget.transform);
 
-                         if (PagedLodConfig.mInstance.mTileDataType == TileDataType.OSGB)
 
-                         {
 
-                             pagedLod.LoadOsgbBasicInfo(loader);
 
-                         }
 
-                         else
 
-                         {
 
-                             pagedLod.LoadTileSetJsonFile();
 
-                             pagedLod.LoadB3dmBasicInfo(loader);
 
-                         }
 
-                         pagedLod.GetMeshRenders();
 
-                         pagedLod.mIsRootTile = true;
 
-                         if (mTarget.mConfig.mIsGenerateCollider)
 
-                         {
 
-                             LoadPagedLodFromFileManager.GenerateColliderObject(pagedLod);
 
-                         }
 
-                         loader.mLoadedEvent.Set();
 
-                         loadedCount++;
 
-                     }
 
-                     else
 
-                     {
 
-                         loadedCount++;
 
-                     }
 
-                 }
 
-             }
 
-             mLoadedCount = loadedCount;
 
-         }
 
-         
 
-         public void LoadFromFile()
 
-         {
 
-             mExistTile.Clear();
 
-             for (int i = 0; i < mTarget.transform.childCount; ++i)
 
-             {
 
-                 mExistTile.Add(mTarget.transform.GetChild(i).name);
 
-             }
 
-             mLoadedCount = 0;
 
-             mStopLoadFlag = false;
 
-             mGenerateGameObjectFlag = false;
 
-             mUpdateSceneUIFlag = true;
 
-             mLoadThread = new Thread(LoadPagedLodData);
 
-             mLoadThread.IsBackground = true;
 
-             mLoadThread.Start();
 
-         }
 
-         public void LoadPagedLodData()
 
-         {
 
-             GetNeedLoadTiles();
 
-             if (!mStopLoadFlag)
 
-             {
 
-                 //bool的读写是原子操作,无需加锁判断
 
-                 mGenerateGameObjectFlag = true;
 
-             }
 
-             for (int i = 0; i < mNeedPagedLodLoaderList.Count; ++i)
 
-             {
 
-                 if (mStopLoadFlag)
 
-                 {
 
-                     break;
 
-                 }
 
-                 mNeedPagedLodLoaderList[i].LoadObjectBasicInfo();
 
-                 mNeedPagedLodLoaderList[i].LoadObjectMeshInfo();
 
-                 mNeedPagedLodLoaderList[i].StartLoad();
 
-                 mNeedPagedLodLoaderList[i].mLoadedEvent.WaitOne();
 
-             }
 
-             DisposeLoader();
 
-             mLoadThread = null;
 
-             mUpdateSceneUIFlag = false;
 
-             mGenerateGameObjectFlag = false;
 
-         }
 
-         void GetNeedLoadTiles()
 
-         {
 
-             mNeedPagedLodLoaderList.Clear();
 
-             DirectoryInfo dataDir = new DirectoryInfo(mTarget.mConfig.mDataPath);
 
-             int count = 0;
 
-             List<DirectoryInfo> dirInfos = new List<DirectoryInfo>(dataDir.GetDirectories());
 
-             for (int i = 0; i < dirInfos.Count; ++i)
 
-             {
 
-                 DirectoryInfo tileDir = dirInfos[i];
 
-                 if (mStopLoadFlag)
 
-                 {
 
-                     break;
 
-                 }
 
-                 if (count < mTarget.mConfig.mLoadPagedLodCount)
 
-                 {
 
-                     if (!mExistTile.Contains(tileDir.Name))
 
-                     {
 
-                         if (!mTarget.mConfig.mLoadStartLevelFlag)
 
-                         {
 
-                             string fileName = tileDir.FullName + "/" + tileDir.Name + PagedLodConfig.mInstance.GetFileSufix();
 
-                             if (File.Exists(fileName))
 
-                             {                        
 
-                                 FileInfo fileInfo = new FileInfo(fileName);
 
-                                 PagedLodFileLoader pagedLodLoader = PagedLodFileLoader.GetPagedLodFileLoader(fileInfo, mTarget.mConfig.mStartLevel, 
 
-                                     tileDir.Name,mTarget.mConfig.mIsDaJiangData);
 
-                                 mNeedPagedLodLoaderList.Add(pagedLodLoader);
 
-                             }
 
-                             else
 
-                             {
 
-                                 Debug.Log("GetNeedLoadTiles file not exist: " + fileName);
 
-                             }
 
-                         }
 
-                         else
 
-                         {
 
-                             FileInfo[] fileInfos = tileDir.GetFiles("*" + PagedLodConfig.mInstance.GetFileSufix());
 
-                             bool isExist = false;
 
-                             for (int j = 0; j < fileInfos.Length; ++j)
 
-                             {
 
-                                 FileInfo fileInfo = fileInfos[j];
 
-                                 int level = LoadPagedLodFromFileManager.GetTileFileLevel(tileDir.Name, fileInfo.Name);
 
-                                 if (level == mTarget.mConfig.mStartLoadLevel)
 
-                                 {
 
-                                     PagedLodFileLoader pagedLodLoader = PagedLodFileLoader.GetPagedLodFileLoader(fileInfo,level,tileDir.Name,
 
-                                         mTarget.mConfig.mIsDaJiangData);
 
-                                     mNeedPagedLodLoaderList.Add(pagedLodLoader);
 
-                                     isExist = true;
 
-                                 }
 
-                                 if (level > mTarget.mConfig.mStartLoadLevel)
 
-                                 {
 
-                                     if(!isExist)
 
-                                     {
 
-                                         Debug.Log(tileDir.Name + " StartLevel " + mTarget.mConfig.mStartLoadLevel + " Not Exist File ");
 
-                                     }
 
-                                     break;
 
-                                 }
 
-                             }
 
-                         }
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     break;
 
-                 }
 
-                 count++;
 
-             }
 
-         }
 
-         public void DisposeLoader()
 
-         {
 
-             for (int i = 0; i < mNeedPagedLodLoaderList.Count; ++i)
 
-             {
 
-                 mNeedPagedLodLoaderList[i].Dispose();
 
-                 mNeedPagedLodLoaderList[i] = null;
 
-             }
 
-             mNeedPagedLodLoaderList.Clear();
 
-         }
 
-     }
 
- }
 
 
  |