public static void LoadModelTest()
        {
            var loader = new RagnarokModelLoader();

            try
            {
                var go = GameObject.Find("ModelTest");
                if (go != null)
                {
                    GameObject.DestroyImmediate(go);
                }
                go = new GameObject("ModelTest");

                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\게페니아\대장간.rsm"; //Retarded hammer building
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\유노\유노_나무3.rsm"; //Juno tree
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\게페니아\도구점.rsm"; //geffen windmill
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\유노\유노_과학자건물.rsm"; //alchemist thing?
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\모로코\개미나무.rsm"; //big ass ant
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\모로코\개미지옥나무뿌리.rsm"; //ant hell tree thing

                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\니플헤임\니플헤임-무기점.rsm"; //weird skull hatchet house
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\니플헤임\니플헤임-풍차.rsm"; //niflheim windmill
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\프론테라\상점01.rsm"; //fruit cart
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\페이욘\싸리담1.rsm"; //payon fence
                //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\알베르타\도구점.rsm"; //alberta pickaxe shop
                var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\프론테라\무기점.rsm";                 //prontera armory



                var savePath = DirectoryHelper.GetRelativeDirectory(RagnarokDirectory.GetRagnarokDataDirectory, Path.GetDirectoryName(modelPath));

                //loader.LoadModel(@"G:\Projects2\Ragnarok\Resources\data\model\글래스트\글래스트_부서진의자1.rsm"); //Glast\Glast_BrokenChair1
                //loader.LoadModel(@"G:\Projects2\Ragnarok\Resources\data\model\내부소품\탁상1.rsm"); //props\desk1
                loader.LoadModel(modelPath, savePath);                 //Glast\Glast_KnightStatue13


                var model = loader.Compile();

                model.transform.SetParent(go.transform, false);
                model.transform.localScale = new Vector3(1f, 1f, 1f);
            }
            finally
            {
                loader.Dispose();;
            }
        }
        static void ImportFiles()
        {
            var files = StandaloneFileBrowser.OpenFilePanel("Open File", RagnarokDirectory.GetRagnarokDataDirectory, "gnd", true);

            if (files.Length <= 0)
            {
                return;
            }

            //var saveDir = EditorUtility.SaveFolderPanel("Save Folder", Application.dataPath, "");
            var saveDir = Path.Combine(Application.dataPath, "maps").Replace("\\", "/");

            //Debug.Log(saveDir);

            foreach (var f in files)
            {
                var lastDirectory = Path.GetDirectoryName(f);
                var baseName      = Path.GetFileNameWithoutExtension(f);
                Debug.Log(f);

                var relativeDir = saveDir.Substring(saveDir.IndexOf("Assets/"));

                var loader   = new RagnarokMapLoader();
                var data     = loader.ImportMap(f, relativeDir);
                var dataPath = Path.Combine(relativeDir, data.name + ".asset").Replace("\\", "/");

                AssetDatabase.CreateAsset(data, dataPath);

                data = AssetDatabase.LoadAssetAtPath <RoMapData>(dataPath);

                data.RefreshTextureLookup();
                data.RebuildAtlas();

                var gatPath = Path.Combine(lastDirectory, baseName + ".gat");
                data.WalkData = LoadWalkData(gatPath);


                var resourcePath = Path.Combine(lastDirectory, baseName + ".rsw");
                if (File.Exists(resourcePath))
                {
                    var world = RagnarokResourceLoader.LoadResourceFile(resourcePath);
                    world.name = baseName + " world data";

                    var worldFolder = Path.Combine(relativeDir, "world");
                    if (!Directory.Exists(worldFolder))
                    {
                        Directory.CreateDirectory(worldFolder);
                    }

                    var worldAssetPath = Path.Combine(worldFolder, baseName + "_world.asset").Replace("\\", "/");

                    AssetDatabase.CreateAsset(world, worldAssetPath);

                    foreach (var model in world.Models)
                    {
                        var baseFolder = Path.Combine(RagnarokDirectory.GetRagnarokDataDirectory, "model");

                        var modelPath = Path.Combine(baseFolder, model.FileName);
                        var relative  = DirectoryHelper.GetRelativeDirectory(baseFolder, Path.GetDirectoryName(modelPath));
                        var mBaseName = Path.GetFileNameWithoutExtension(model.FileName);

                        var prefabFolder = Path.Combine("Assets/models/prefabs/", relative).Replace("\\", "/");
                        var prefabPath   = Path.Combine(prefabFolder, mBaseName + ".prefab").Replace("\\", "/");

                        if (!Directory.Exists(prefabFolder))
                        {
                            Directory.CreateDirectory(prefabFolder);
                        }


                        if (!File.Exists(prefabPath))
                        {
                            var modelLoader = new RagnarokModelLoader();

                            modelLoader.LoadModel(modelPath, relative);
                            var obj = modelLoader.Compile();

                            PrefabUtility.SaveAsPrefabAssetAndConnect(obj, prefabPath, InteractionMode.AutomatedAction);

                            var prefabRef = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath);
                            DestroyImmediate(obj);
                        }
                    }

                    //var builder = new RagnarokWorldSceneBuilder();
                    //builder.Load(data, world);
                }

                AssetDatabase.SaveAssets();

                EditorUtility.UnloadUnusedAssetsImmediate();

                var importer = new RagnarokMapDataImporter(dataPath, baseName);
                importer.Import(true, true, true, true, true);

                AssetDatabase.SaveAssets();
            }
        }
        private void LoadModels()
        {
            var modelContainer = new GameObject("models");

            modelContainer.transform.SetParent(baseObject.transform, false);

            foreach (var model in world.Models)
            {
                var baseFolder = Path.Combine(RagnarokDirectory.GetRagnarokDataDirectory, "model");

                var modelPath = Path.Combine(baseFolder, model.FileName);
                var relative  = DirectoryHelper.GetRelativeDirectory(baseFolder, Path.GetDirectoryName(modelPath));
                var baseName  = Path.GetFileNameWithoutExtension(model.FileName);

                var prefabFolder = Path.Combine("Assets/models/prefabs/", relative).Replace("\\", "/");
                var prefabPath   = Path.Combine(prefabFolder, baseName + ".prefab").Replace("\\", "/");

                if (!Directory.Exists(prefabFolder))
                {
                    Directory.CreateDirectory(prefabFolder);
                }


                GameObject obj;
                if (modelCache.ContainsKey(model.FileName))
                {
                    //obj = GameObject.Instantiate(modelCache[model.FileName]);
                    obj = PrefabUtility.InstantiatePrefab(modelCache[model.FileName], SceneManager.GetActiveScene()) as GameObject;
                }
                else
                {
                    if (File.Exists(prefabPath))
                    {
                        var prefabRef = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath);
                        obj = PrefabUtility.InstantiatePrefab(prefabRef, SceneManager.GetActiveScene()) as GameObject;
                        modelCache.Add(model.FileName, prefabRef);
                    }
                    else
                    {
                        var modelLoader = new RagnarokModelLoader();

                        modelLoader.LoadModel(modelPath, relative);
                        obj = modelLoader.Compile();

                        PrefabUtility.SaveAsPrefabAssetAndConnect(obj, prefabPath, InteractionMode.AutomatedAction);

                        var prefabRef = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath);
                        modelCache.Add(model.FileName, prefabRef);
                    }
                }

                obj.isStatic                = true;
                obj.name                    = model.FileName;
                obj.transform.parent        = modelContainer.transform;
                obj.transform.localPosition = new Vector3(model.Position.x / 5, -model.Position.y / 5, model.Position.z / 5) + new Vector3(0f, 0.01f, 0f);
                obj.transform.localScale    = model.Scale; //model.Scale * 0.2f;

                var rz = Matrix4x4.Rotate(Quaternion.Euler(0, 0, -model.Rotation.z));
                var rx = Matrix4x4.Rotate(Quaternion.Euler(-model.Rotation.x, 0, 0));
                var ry = Matrix4x4.Rotate(Quaternion.Euler(0, model.Rotation.y, 0));

                var final = rz * rx * ry;

                var rotation = model.Rotation;

                obj.transform.rotation = final.rotation; //Quaternion.Euler(rotation);

                //obj.ChangeStaticRecursive(true);
            }
        }
 //[MenuItem("Ragnarok/Test Import Model")]
 static void TestImportModel()
 {
     RagnarokModelLoader.LoadModelTest();
 }