-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectToolsConfig.cs
More file actions
118 lines (99 loc) · 3.32 KB
/
ProjectToolsConfig.cs
File metadata and controls
118 lines (99 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;
namespace CourseMod.Editor {
public class ProjectToolsConfig : ScriptableObject {
private static ProjectToolsConfig _config;
public static ProjectToolsConfig Config {
get {
if (_config)
return _config;
_config = AssetDatabase.LoadAssetAtPath<ProjectToolsConfig>("Assets/Editor/Config.asset");
if (_config) return _config;
_config = CreateInstance<ProjectToolsConfig>();
AssetDatabase.CreateAsset(_config, "Assets/Editor/Config.asset");
return _config;
}
}
public string adofaiPath;
public bool openModInfoFoldout;
public bool skipAssetBundleBuild;
public bool createZip;
public bool developmentBuild = true;
public bool generateDebugSymbols;
public bool buildEveryPlatform;
public BuildTarget[] serializedBuildPlatforms;
public bool copyToDirectory;
public bool runApplication;
public bool runApplicationThroughSteam;
public int deleteBuildsExceptLastN;
public bool automaticallyDeleteBuilds;
private HashSet<BuildTarget> _buildTargets;
public HashSet<BuildTarget> BuildPlatforms {
get {
if (_buildTargets == null)
return _buildTargets ??= serializedBuildPlatforms?.ToHashSet() ?? new();
return _buildTargets;
}
set {
_buildTargets = value;
serializedBuildPlatforms = value.ToArray();
}
}
public readonly GameImporter Importer = new();
public readonly ModBuilder ModBuilder = new();
public void BuildMod(string copyDestination) {
ModBuilder.SkipAssetBundleBuild = skipAssetBundleBuild;
ModBuilder.DevelopmentBuild = developmentBuild;
ModBuilder.GenerateDebugSymbols = generateDebugSymbols;
ModBuilder.Build(copyDestination, buildEveryPlatform, BuildPlatforms)
.ContinueWith(task => {
if (createZip) {
using var stream =
new FileStream(Path.Combine(Path.GetDirectoryName(task.Result)!, ModInfo.Info.Id + ".zip"),
FileMode.Create);
using var archive = new ZipArchive(stream, ZipArchiveMode.Create);
foreach (var file in Directory.GetFiles(task.Result, "*", SearchOption.AllDirectories)) {
archive.CreateEntryFromFile(file,
Path.Combine(ModInfo.Info.Id, Path.GetRelativePath(task.Result, file)));
}
}
if (automaticallyDeleteBuilds)
DeleteBuilds(1);
if (runApplication) {
if (runApplicationThroughSteam) {
Process.Start("steam://rungameid/977950");
} else {
Process.Start(adofaiPath);
}
}
});
}
public void DeleteBuilds(int? saveLeast = null) {
var buildDir = ProjectToolsWindow.BuildDirectory;
if (Directory.Exists(buildDir)) {
var except = deleteBuildsExceptLastN;
if (except == 0) {
Directory.Delete(buildDir, true);
Directory.CreateDirectory(buildDir);
var zipPath = Path.Combine(buildDir, ModInfo.Info.Id + ".zip");
if (File.Exists(zipPath))
File.Delete(zipPath);
} else {
var buildDirectories = new DirectoryInfo(buildDir).GetDirectories()
.OrderByDescending(d => d.CreationTimeUtc)
.ToList();
for (var i = Math.Max(saveLeast ?? 0, Math.Max(0, except)); i < buildDirectories.Count; i++) {
buildDirectories[i].Delete(true);
}
}
}
}
}
}