예제 #1
0
        /// <summary>
        /// Save Assets Data File
        /// </summary>
        /// <param name="buildPath"></param>
        /// <param name="pack"></param>
        /// <returns>True if Overwrited existing file, otherwise False</returns>
        public void SaveAssetsDataFile(string buildPath, AssetsPack pack)
        {
            var bytes = BinarySerializer.Serialize(pack);

            var filePath = Path.Combine(buildPath, "Assets.pck");

            File.WriteAllBytes(filePath, bytes);
        }
예제 #2
0
        public async Task <BuildResult> Build(GameProject gameProject, bool releaseMode = false)
        {
            BuildResult result = new BuildResult();

            string targetDirectory = releaseMode ? gameProject.DistDirectory : gameProject.BuildDirectory;

            StringBuilder messageBuilder = new StringBuilder();

            FileInfo mainScriptFile = new FileInfo(Path.Combine(gameProject.ScriptsDirectory, gameProject.MainScript));

            if (mainScriptFile.Exists)
            {
                ScriptsCompileResult scriptsCompileResult = await _scriptsBuilder.Build(gameProject, mainScriptFile, releaseMode);

                bool scriptsOk = scriptsCompileResult.Errors == null;

                if (scriptsOk)
                {
                    if (!Directory.Exists(targetDirectory))
                    {
                        Directory.CreateDirectory(targetDirectory);
                    }

                    result.ScriptData = scriptsCompileResult.ScriptData;

                    bool assetsOk = true;

                    result.AssetsInvalidated = false;

                    // Build Resource Pack
                    List <AssetCompileResult> assetCompileResults = await _assetsBuilder.Build(gameProject);

                    if (assetCompileResults != null && assetCompileResults.Count > 0)
                    {
                        result.AssetsInvalidated = true;

                        foreach (var assetCompileResult in assetCompileResults)
                        {
                            if (!string.IsNullOrEmpty(assetCompileResult.Error))
                            {
                                if (assetsOk)
                                {
                                    messageBuilder.AppendLine("Error building assets:");
                                }

                                assetsOk = false;

                                messageBuilder.AppendLine($"In Resource: {assetCompileResult.AssetData.Name} : {assetCompileResult.Error}");
                            }
                        }

                        AssetsPack assetPack = new AssetsPack();

                        foreach (var assetCompileResult in assetCompileResults)
                        {
                            assetPack.AddAssetData(assetCompileResult.AssetData.Name, assetCompileResult.AssetData);
                        }

                        _assetsBuilder.SaveAssetsDataFile(targetDirectory, assetPack);
                    }

                    if (assetsOk)
                    {
                        result.Ok = true;
                    }
                    else
                    {
                        result.ResultMessage = messageBuilder.ToString();
                    }

                    return(result);
                }

                // Build Error:

                messageBuilder.AppendLine("Error compiling scripts:");

                foreach (var error in scriptsCompileResult.Errors)
                {
                    messageBuilder.AppendLine(error);
                }

                result.ResultMessage = messageBuilder.ToString();
                result.Ok            = false;
                return(result);
            }
            else
            {
                result.ResultMessage = "Missing Main Script!";
                result.Ok            = false;
                return(result);
            }
        }