Exemple #1
0
        static void testLoadPaletteAtr2(DetectInstall detectInstall)
        {
            var tableNamesProduct = new string[] {
                @"PLAYAnimation_ENU",
                @"TOTEKAN2",
                @"DOGA-E1",
                @"DOGA-L3",
                @"DOGA-L3PRO",
                @"DOGA-L2",
                // @"DOGA-L1"
            };



            foreach (var nameProduct in tableNamesProduct)
            {
                if (!detectInstall.tableInfosInstall.ContainsKey(nameProduct))
                {
                    continue;
                }
                var infoInstall = detectInstall.tableInfosInstall[nameProduct];
                var infoAtr     = new DoGAAtrInfo(nameProduct, infoInstall.pathInstalled + infoInstall.pathRelativeExe, infoInstall.profiles);
            }

/*			var atr0 = infoAtr.getAtrFromPalette("bodym", "c20", "no", "m4");
 *                      var atr1 = infoAtr.getAtrFromPalette("bodym", "c10b", "no", "m1"); // no texture
 *                      var atr2 = infoAtr.getAtrFromPalette("bodym", "c10b", "t10", "m1"); // meisai
 *                      var atr3 = infoAtr.getAtrFromPalette("bodym", "c10b", "t28", "m4"); // hana
 *
 *                      var name = atr0.name;
 */
        }
Exemple #2
0
 private DoGAAtrInfo getInfoAtrWithLoad(string idProduct)
 {
     if (!this.tableInfosAtr.ContainsKey(idProduct))
     {
         var infoInstall = this.detectedInstall.tableInfosInstall[idProduct];
         var infoAtr     = new DoGAAtrInfo(idProduct, infoInstall.pathInstalled + infoInstall.pathRelativeExe, infoInstall.profiles);
         this.tableInfosAtr.Add(idProduct, infoAtr);
         return(infoAtr);
     }
     return(this.tableInfosAtr[idProduct]);
 }
Exemple #3
0
    static Dictionary <string, Dictionary <string, DoGAAtr> > importAtrsSufDir(Dictionary <string, string> mapNamesSuf)
    {
        var mapNamesFileAtrFullPath = new Dictionary <string, string>();

        foreach (var pairNameFileSuf in mapNamesSuf)
        {
            var nameFileSuf         = pairNameFileSuf.Key;
            var nameFileSufFullPath = pairNameFileSuf.Value;
            var nameFileAtr         = Path.GetFileNameWithoutExtension(nameFileSuf) + ".atr";
            var nameFileAtrFullPath = Path.GetDirectoryName(nameFileSufFullPath) + @"\" + nameFileAtr;
            mapNamesFileAtrFullPath.Add(nameFileAtr, nameFileAtrFullPath);
        }
        var mapAtrsPerFile = DoGAAtrInfo.loadFilesAtr(mapNamesFileAtrFullPath);

        return(mapAtrsPerFile);
    }
Exemple #4
0
        static void testLoadPaletteAtr(DetectInstall detectInstall)
        {
            var nameProduct = @"TOTEKAN2";
            // var nameProduct = "PLAYAnimation";
            var infoInstall = detectInstall.tableInfosInstall[nameProduct];
            var infoAtr     = new DoGAAtrInfo(nameProduct, infoInstall.pathInstalled + infoInstall.pathRelativeExe, infoInstall.profiles);

//          var atr = infoAtr.getAtrFromPalette("BodyM".ToLower(), "RGB_FFF716".ToLower(), "NO".ToLower(), "Mechanic".ToLower());
//			var atr = infoAtr.getAtrFromPalette("bodym", "material02silver", "material02silver", "material02silver");
//			var atr = infoAtr.getAtrFromPalette("bodym", "pattern02redcheck", "pattern02redcheck", "pattern02redcheck");
            //, nameAtrInSuf=
//			var atr = infoAtr.getAtrFromPalette("bodyd", "rgb_4f2b23", "rough", "m4");
//			var atr = infoAtr.getAtrFromPalette("bodym", null, null, null);
            var atr = infoAtr.getAtrFromPalette("grayg", "rgb_e1e1e1", "no", "m1");



            var path = atr.path;
        }
Exemple #5
0
    public Dictionary <string, DoGAAtr> loadAtrsColorL1(string pathDirAtr, ImportTask.ColorL1 color)
    {
        var tablesNameFileAtrColorL1 = new Dictionary <ImportTask.ColorL1, string>();

        tablesNameFileAtrColorL1.Add(ImportTask.ColorL1.White, "GENIE_WH.ATR");
        tablesNameFileAtrColorL1.Add(ImportTask.ColorL1.Blue, "GENIE_BL.ATR");
        tablesNameFileAtrColorL1.Add(ImportTask.ColorL1.Red, "GENIE_RD.ATR");
        tablesNameFileAtrColorL1.Add(ImportTask.ColorL1.Green, "GENIE_GR.ATR");
        tablesNameFileAtrColorL1.Add(ImportTask.ColorL1.Magenta, "GENIE_MG.ATR");

        if (!tablesNameFileAtrColorL1.ContainsKey(color))
        {
            return(null);
        }
        var nameFileAtr     = tablesNameFileAtrColorL1[color];
        var setNamesFileAtr = new HashSet <string>();

        setNamesFileAtr.Add(nameFileAtr);
        var mapAtrs = DoGAAtrInfo.loadFilesAtr(pathDirAtr, setNamesFileAtr);

        return(mapAtrs[nameFileAtr]);
    }
Exemple #6
0
        static void testLoadL3P(DetectInstall detectInstall)
        {
//			var nameFileL3P = @"D:\home\tomotaco-doga\Unity\work\data\dogal3\l3_samp\parts\ball_particle_samp.L3P";
//			var nameFileL3P = @"C:\home\tomotaco-doga\Unity\work\data\unity3d\testdir\dogal3-sample\animation\demo1data\base.l3p";
//			var nameFileL3P = @"C:\home\tomotaco-doga\Unity\work\data\texture\doga-tank.l3p";
//			var nameFileL3P = @"D:\Home\tomotaco-doga\Unity\work\data\bugreport\20141018-texture-test\texture\doga-tank.l3p";
//			var nameFileL3P = @"C:\H\VRW\背景作成\objs\back\river.l3p";
//			var nameFileL3P = @"C:\H\VRW\背景作成\objs\back\riverbridge.l3p";
            var            nameFileL3P = @"C:\H\VRW\背景作成\objs\back\tree.l3p";
            var            context     = TotekanParse.parseE1P(nameFileL3P);
            DoGAE1PVisitor visitor     = new DoGAE1PVisitor(Path.GetDirectoryName(nameFileL3P));

            visitor.Visit(context as IParseTree);
            var listSufObjs = visitor.listSufObjs;
            var mapAtrs     = visitor.mapAtrsPalette;

            var nameProduct = "DOGA-L3";
            var infoInstall = detectInstall.tableInfosInstall[nameProduct];
            var infoAtr     = new DoGAAtrInfo(nameProduct, infoInstall.pathInstalled + infoInstall.pathRelativeExe, infoInstall.profiles);

//			var atr0 = infoAtr.getAtrFromPalette("bodym", "c20", "no", "m4");
            var atr0    = infoAtr.getAtrFromPalette("grayg", "#01", "no", "m4", mapAtrs);
            var pathAtr = atr0.path;
        }
Exemple #7
0
    public IEnumerator <bool> importPartsAsm(List <ImportTask> tasks, Vector3 scaleImport)
    {
        foreach (var task in tasks)
        {
            if (task.status != ImportTask.Status.READY)
            {
                continue;
            }

            task.status       = ImportTask.Status.IMPORTING;
            task.statusImport = ImportTask.ImportStatus.PARSE_PARTS_ASSEMBLER;
            yield return(false);

            var idProduct          = task.idsProductToSelect[task.indexIdProductSelected];
            var infoInstall        = this.detectedInstall.tableInfosInstall[idProduct];
            var pathDirParts       = infoInstall.pathInstalled + infoInstall.pathRelativeExe + infoInstall.profiles["PartsDir"] + @"\";
            var pathFileAtr        = infoInstall.pathInstalled + infoInstall.pathRelativeExe + infoInstall.profiles["AtrFile"];
            var pathDirAtr         = Path.GetDirectoryName(pathFileAtr) + @"\";
            var pathDirData        = infoInstall.pathInstalled + @"\data\";
            var pathPartsAssembler = Path.GetDirectoryName(task.nameAssetFullPath) + Path.DirectorySeparatorChar;

            var            context = TotekanParse.parseE1P(task.nameAssetFullPath);
            DoGAE1PVisitor visitor = new DoGAE1PVisitor(pathPartsAssembler);
            visitor.Visit(context as IParseTree);


            var    nameE1P       = Path.GetFileNameWithoutExtension(task.nameAssetFullPath);
            string nameE1PUnique = "";
            if (!AssetNameUtil.getNameAssetUtil("Assets", nameE1P, @".prefab", out nameE1PUnique, 1000))
            {
                Debug.Log("Failed to find alternative name for existing file/dir for \"" + nameE1P + "\".");
                task.status = ImportTask.Status.FAILED;
                yield return(true);
            }
            else
            {
                nameE1P = nameE1PUnique;
            }

            var guidFolder = AssetDatabase.CreateFolder("Assets", nameE1P);
            var pathAsset  = AssetDatabase.GUIDToAssetPath(guidFolder) + @"/";

            task.statusImport = ImportTask.ImportStatus.PARSE_SUFS;
            yield return(false);

            var pathsParts = new Dictionary <string, bool>(); // path, need to split relative dir
            pathsParts.Add("", false);                        // use absolute dir
            pathsParts.Add(pathPartsAssembler, true);
            pathsParts.Add(pathDirParts, false);
            pathsParts.Add(pathDirData, false);

            var listSufObjs     = visitor.listSufObjs;
            var mapNamesFileSuf = getMapNamesFileSuf(pathsParts, listSufObjs);
            var mapSufs         = importSufs(mapNamesFileSuf);
            var mapAtrsSufDir   = importAtrsSufDir(mapNamesFileSuf);

            task.statusImport = ImportTask.ImportStatus.CONVERT_MESH;
            yield return(false);

            var mapMeshSuf = new Dictionary <string, Dictionary <Pair <string, bool>, List <Mesh> > >();

            foreach (var pair in mapSufs)
            {
                var nameFileSuf = pair.Key;
                var listSufs    = pair.Value;
                Debug.Log("Creating mesh: nameFileSuf=" + nameFileSuf);

                var mapInfoMeshes = new Dictionary <Pair <string, bool>, List <TotekanMeshInfo> >();
                buildSufMesh(listSufs, ref mapInfoMeshes);
                var mapMeshes = new Dictionary <Pair <string, bool>, List <Mesh> >();
                foreach (var keyInfoMesh in mapInfoMeshes.Keys)
                {
                    var infosMesh = mapInfoMeshes[keyInfoMesh];
                    var meshes    = new List <Mesh>();
                    foreach (var infoMesh in infosMesh)
                    {
                        var mesh = createMesh(infoMesh);
                        meshes.Add(mesh);
                    }
                    mapMeshes.Add(keyInfoMesh, meshes);
                }
                mapMeshSuf.Add(nameFileSuf, mapMeshes);
            }

            task.statusImport = ImportTask.ImportStatus.PARSE_ATRS;
            yield return(false);

            DoGAAtrInfo infoAtr = null;
            if (idProduct != "DOGA-L1")
            {
                infoAtr = this.getInfoAtrWithLoad(idProduct);
            }

            Dictionary <string, DoGAAtr> atrsColorL1 = null;
            if (idProduct == "DOGA-L1")
            {
                atrsColorL1 = this.loadAtrsColorL1(pathDirAtr, ImportTask.enumsColorL1[task.indexColorL1]);
            }

            // Create game object
            var objectGameRoot = new GameObject(nameE1P);
            objectGameRoot.transform.rotation   = Quaternion.AngleAxis(-120.0f, new Vector3(1.0f, 1.0f, 1.0f));
            objectGameRoot.transform.localScale = new Vector3(-scaleImport.x, scaleImport.y, scaleImport.z);

            task.statusImport = ImportTask.ImportStatus.CONVERT_MATERIAL;
            yield return(false);

            var mapAtrsPalette = visitor.mapAtrsPalette;             // atrs in PartsAssembler (L3)

            // Create materials from atr
            var mapAtrs = new Dictionary <string, Material>();
            var setNamesFileImageTextureNotFound = new HashSet <string>();
            foreach (var sufobj in listSufObjs)
            {
                var nameFileSuf = sufobj.nameFileSuf;
//				Debug.Log(" sufobj.nameFileSuf: " +  sufobj.nameFileSuf + ", nameFileSuf: " + nameFileSuf);

                if (!mapMeshSuf.ContainsKey(nameFileSuf))
                {
                    Debug.LogError("Suf file: " + nameFileSuf + " not found.");
                    continue;
                }

                var namesAtrInSuf = mapMeshSuf[nameFileSuf].Keys;
                foreach (var nameAtrInSuf in namesAtrInSuf)
                {
                    var nameAtrAsset = getNameAtrAsset(sufobj.nameAtrColor, sufobj.nameTexture, sufobj.nameMaterial, nameAtrInSuf);
//					Debug.Log("nameAtrAsset=" + nameAtrAsset);
                    if (mapAtrs.ContainsKey(nameAtrAsset))
                    {
                        continue;
                    }

                    DoGAAtr atr = null;
                    // retrieve atr from atr placed atr the suf dir..
                    var nameFileAtr = Path.GetFileNameWithoutExtension(mapNamesFileSuf[nameFileSuf]) + @".atr";
                    if (atr == null)
                    {
                        if (mapAtrsSufDir.ContainsKey(nameFileAtr))
                        {
                            var mapAtrSuf = mapAtrsSufDir[nameFileAtr];
                            if (mapAtrSuf.ContainsKey(nameAtrInSuf.First))
                            {
                                atr = mapAtrSuf[nameAtrInSuf.First];
                            }
                        }
                    }
                    // retrieve atr from global palette
                    if (atr == null)
                    {
                        if (infoAtr != null)
                        {
                            try {
                                atr = infoAtr.getAtrFromPalette(nameAtrInSuf.First, sufobj.nameAtrColor, sufobj.nameTexture, sufobj.nameMaterial, mapAtrsPalette);
                            } catch (KeyNotFoundException ex) {
                                Debug.Log("Cannot found atr palette: " +
                                          "Caught exception: " + ex.Message + ", " +
                                          "nameAtrInSuf=" + nameAtrInSuf.First + ", " +
                                          "nameAtrColor=" + sufobj.nameAtrColor + ", " +
                                          "nameAtrTexture=" + sufobj.nameTexture + ", " +
                                          "nameAtrMaterial=" + sufobj.nameMaterial);
                            }
                        }
                        if (atrsColorL1 != null)
                        {
                            if (atrsColorL1.ContainsKey(nameAtrInSuf.First))
                            {
                                atr = atrsColorL1[nameAtrInSuf.First];
                            }
                        }
                    }

                    if (atr != null)
                    {
                        Material material = null;
                        var      textures = new Dictionary <string, Texture2D>();
                        try {
                            if (nameAtrInSuf.Second)
                            {
                                foreach (var nameKey in atr.textures.Keys)
                                {
                                    if (nameKey != "colormap")
                                    {
                                        continue;
                                    }
                                    var namesFileTexture     = getNamesFileTexture(atr.textures[nameKey]);
                                    var namesFileTextureFull = getPathTexture(namesFileTexture, atr.pathsTexture);
                                    var nameKeyTexture       = String.Join(@"_", namesFileTextureFull.ToArray());

                                    Texture2D texture = null;
                                    if (!this.tableTextures.ContainsKey(nameKeyTexture))
                                    {
                                        texture = TextureUtil.loadAndBlendTextures(namesFileTextureFull);
                                        if (texture != null)
                                        {
                                            this.tableTextures.Add(nameKeyTexture, texture);

                                            var nameFileTextureAsset = getNameFilesTextureAsset(namesFileTexture);
                                            AssetDatabase.CreateAsset(texture, pathAsset + nameFileTextureAsset + "_texture.asset");
                                        }
                                        else
                                        {
                                            foreach (var nameFileTextureFull in namesFileTextureFull)
                                            {
                                                if (setNamesFileImageTextureNotFound.Contains(nameFileTextureFull))
                                                {
                                                    continue;
                                                }
                                                Debug.Log("Could not find texture image: " + nameFileTextureFull);
                                                setNamesFileImageTextureNotFound.Add(nameFileTextureFull);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        texture = this.tableTextures[nameKeyTexture];
                                    }
                                    if (texture != null)
                                    {
                                        textures.Add(nameKey, texture);
                                    }
                                }
                            }
                        } catch (Exception ex) {
                            Debug.Log("Caught exception for creating textures: " +
                                      ex.Message + ", " +
                                      "nameAtrInSuf=" + nameAtrInSuf.First + ", " +
                                      "nameAtrColor=" + sufobj.nameAtrColor + ", " +
                                      "nameAtrTexture=" + sufobj.nameTexture + ", " +
                                      "nameAtrMaterial=" + sufobj.nameMaterial);
                        }
                        try {
                            // if atr contains transparent texture, material is also transparent.
                            bool isMaterialTransparent = false;
                            foreach (var texture in textures.Values)
                            {
                                if (texture.alphaIsTransparency)
                                {
                                    isMaterialTransparent = true;
                                }
                            }
                            var color = atr.getColor("col");
                            if (color != null)
                            {
                                material       = new Material(Shader.Find(isMaterialTransparent ? "Transparent/Diffuse" : "Diffuse"));
                                material.color = new Color(color.r, color.g, color.b);

                                // Set texture to materal.
                                foreach (var pairTexture in textures)
                                {
                                    if (pairTexture.Key == "colormap")
                                    {
                                        material.mainTexture       = pairTexture.Value;
                                        material.mainTextureOffset = Vector2.zero;
                                        material.mainTextureScale  = new Vector2(1.0f, -1.0f);
                                    }
                                    if (pairTexture.Key == "bumpmap")
                                    {
                                        //set bump texture to material
                                    }
                                }
                            }
                        } catch (Exception ex) {
                            Debug.Log("Caught exception in attaching texture to material: " +
                                      ex.Message + ", " +
                                      "nameAtrInSuf=" + nameAtrInSuf.First + ", " +
                                      "nameAtrColor=" + sufobj.nameAtrColor + ", " +
                                      "nameAtrTexture=" + sufobj.nameTexture + ", " +
                                      "nameAtrMaterial=" + sufobj.nameMaterial);
                        }
                        if (material != null)
                        {
                            AssetDatabase.CreateAsset(material, pathAsset + nameAtrAsset + "_material.asset");
                            mapAtrs.Add(nameAtrAsset, material);
                        }
                    }
                }
            }

            task.statusImport = ImportTask.ImportStatus.BUILD_GAME_OBJECT;
            yield return(false);

            var mapCombines = new Dictionary <string, List <CombineInstance> >();          // atr name to combine instances
            foreach (var nameAtr in mapAtrs.Keys)
            {
                mapCombines.Add(nameAtr, new List <CombineInstance>());
            }

            int indexSufObj = 0;
            foreach (var sufobj in listSufObjs)
            {
                Vector3    pos;
                Quaternion quat;
                Vector3    scal;
                getMatrixTransform(sufobj.listTransforms, out pos, out quat, out scal);
                var nameFileSuf = sufobj.nameFileSuf;
                Debug.Log("Creating CombineInstance for suf file: " + nameFileSuf);
                if (!mapMeshSuf.ContainsKey(nameFileSuf))
                {
                    Debug.LogError("Combining: Not found suf=" + nameFileSuf + ", skipped.");
                    continue;
                }

                var transformLocal = new Matrix4x4();
                transformLocal.SetTRS(pos, quat, scal);
                var transformWorld = objectGameRoot.transform.localToWorldMatrix * transformLocal;

                var mapInfosMesh = mapMeshSuf[nameFileSuf];
                foreach (var pairAtr in mapInfosMesh.Keys)
                {
                    var nameAtrAsset = getNameAtrAsset(sufobj.nameAtrColor, sufobj.nameTexture, sufobj.nameMaterial, pairAtr);
//					Debug.Log("Creating CombineInstance: nameAtr=" + pairAtr.First + "uv=" + (pairAtr.Second ? "true" : "false") + ", nameAtrAsset=" + nameAtrAsset);
                    if (!mapAtrs.ContainsKey(nameAtrAsset))
                    {
                        Debug.LogError("nameAtrAsset=" + nameAtrAsset + " does not exist in mapAtrs. Skipping...");
                        continue;
                    }

                    var meshes = mapInfosMesh[pairAtr];
                    foreach (var mesh in meshes)
                    {
                        for (int index = 0; index < mesh.subMeshCount; index++)
                        {
                            var combine = new CombineInstance();
                            combine.mesh         = mesh;
                            combine.subMeshIndex = index;
                            combine.transform    = transformWorld;
                            mapCombines[nameAtrAsset].Add(combine);
                        }
                    }
                }
                indexSufObj++;
            }

            int indexMaterial = 0;
            foreach (var pairCombine in mapCombines)
            {
                if (pairCombine.Value.Count == 0)
                {
                    continue;
                }
                var nameAtrAsset = pairCombine.Key;
//				Debug.Log("atrName=" + nameAtrAsset + ", combines =" + pairCombine.Value.Count.ToString());
                int indexCombine = 0;
                int numVertices  = 0;
                var combines     = new List <CombineInstance>();
                foreach (var combine in pairCombine.Value)
                {
                    if (maxVerticesMesh < numVertices + combine.mesh.vertexCount)
                    {
                        createAssetCombinedMesh(combines, pathAsset, nameAtrAsset, indexMaterial, indexCombine, mapAtrs[nameAtrAsset], objectGameRoot);
                        combines    = new List <CombineInstance>();
                        numVertices = 0;
                        indexCombine++;
                    }
                    combines.Add(combine);
                    numVertices += combine.mesh.vertexCount;
                }
                if (0 < combines.Count)
                {
                    createAssetCombinedMesh(combines, pathAsset, nameAtrAsset, indexMaterial, indexCombine, mapAtrs[nameAtrAsset], objectGameRoot);
                }
                indexMaterial++;
            }

            AssetDatabase.DeleteAsset(task.nameAssetFullPath);
            AssetDatabase.SaveAssets();
            Debug.Log("Saved all assets");

            var pathPrefab       = "Assets/" + nameE1P + ".prefab";
            var pathPrefabUnique = AssetDatabase.GenerateUniqueAssetPath(pathPrefab);
            PrefabUtility.CreatePrefab(pathPrefabUnique, objectGameRoot, ReplacePrefabOptions.ConnectToPrefab);

            task.statusImport = ImportTask.ImportStatus.COMPLETED;
            task.status       = ImportTask.Status.COMPLETED;
            yield return(false);
        }

        this.tableInfosAtr.Clear();
        this.tableTextures.Clear();

        yield return(true);
    }