public BuildResult Build(ScriptCompilerOptions compilerOptions, params string[] assetsDirectories)
{
if (compilerOptions is null)
{
throw new ArgumentNullException(nameof(compilerOptions));
}
var map = new Map(compilerOptions.MapInfo!, compilerOptions.MapEnvironment!)
{
Sounds = compilerOptions.MapSounds,
PreviewIcons = compilerOptions.MapIcons,
Regions = compilerOptions.MapRegions,
AbilityObjectData = compilerOptions.MapAbilityData,
BuffObjectData = compilerOptions.MapBuffData,
DestructableObjectData = compilerOptions.MapDestructableData,
DoodadObjectData = compilerOptions.MapDoodadData,
ItemObjectData = compilerOptions.MapItemData,
UnitObjectData = compilerOptions.MapUnitData,
UpgradeObjectData = compilerOptions.MapUpgradeData,
Doodads = compilerOptions.MapDoodads,
Units = compilerOptions.MapUnits,
CustomTextTriggers = compilerOptions.MapCustomTextTriggers,
Triggers = compilerOptions.MapTriggers,
TriggerStrings = compilerOptions.MapTriggerStrings,
Cameras = compilerOptions.MapCameras,
PathingMap = compilerOptions.MapPathingMap,
ShadowMap = compilerOptions.MapShadowMap,
};
var builder = new MapBuilder(map);
foreach (var assetDirectory in assetsDirectories)
{
builder.AddFiles(assetDirectory);
}
if (map.Info.ScriptLanguage == ScriptLanguage.Lua)
{
var csc = compilerOptions.Debug ? "-define:DEBUG" : null;
var csproj = Directory.EnumerateFiles(compilerOptions.SourceDirectory, "*.csproj", SearchOption.TopDirectoryOnly).Single();
var compiler = new Compiler(csproj, compilerOptions.OutputDirectory, string.Empty, null, csc, false, null, string.Empty)
{
IsExportMetadata = false,
IsModule = false,
IsInlineSimpleProperty = false,
IsPreventDebugObject = true,
IsCommentsDisabled = compilerOptions.Optimize,
IsDecompilePackageLibs = compilerOptions.DecompilePackageLibs,
};
var compileResult = string.IsNullOrEmpty(compilerOptions.CommonJPath) || string.IsNullOrEmpty(compilerOptions.BlizzardJPath)
? map.CompileScript(compiler, compilerOptions.Libraries)
: map.CompileScript(compiler, compilerOptions.Libraries, compilerOptions.CommonJPath, compilerOptions.BlizzardJPath);
if (!compileResult.Success)
{
return new BuildResult(false, compileResult, Array.Empty<Diagnostic>());
}
}
else
{
map.CompileScript(); // For testing - compiles the map as JASS.
}
var archiveCreateOptions = new MpqArchiveCreateOptions
{
ListFileCreateMode = _generateListFile ? MpqFileCreateMode.Overwrite : MpqFileCreateMode.Prune,
AttributesCreateMode = MpqFileCreateMode.Prune,
BlockSize = _blockSize,
};
builder.Build(Path.Combine(compilerOptions.OutputDirectory, _outputMapName), archiveCreateOptions);
return new BuildResult(true, null, Array.Empty<Diagnostic>());
}