Skip to content

Commit

Permalink
Merge pull request #5 from RobProductions/rp-dev
Browse files Browse the repository at this point in the history
Build Constants Namespace + Readonly Field Option
  • Loading branch information
RobProductions committed Sep 6, 2023
2 parents caa16b5 + 62c8621 commit cbff4eb
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 19 deletions.
24 changes: 15 additions & 9 deletions Editor/Build/BuildProject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,10 @@ public static void ConfigureEditor(string configKey, BuildOptions options = Buil
BuildSettings.projectConfigurations.ParseKeychain(configKey, out BuildReleaseType releaseType, out BuildPlatform platform, out BuildArchitecture architecture,
out BuildScriptingBackend scriptingBackend, out BuildDistribution distribution);
string constantsFileLocation = BuildSettings.basicSettings.constantsFileLocation;
bool useConstKeyword = BuildSettings.basicSettings.useConstKeyword;

// Configure environment
ConfigureEnvironment(releaseType, platform, architecture, scriptingBackend, distribution, configureTime, constantsFileLocation);
ConfigureEnvironment(releaseType, platform, architecture, scriptingBackend, distribution, configureTime, constantsFileLocation, useConstKeyword);

// Run pre-build actions that have opted in to configuring the Editor
BuildAction[] buildActions = BuildSettings.preBuildActions.buildActions.Where(item => item.configureEditor).ToArray();
Expand Down Expand Up @@ -103,8 +104,9 @@ public static void GenerateBuildConstantsOnlyButton(string configKey, BuildOptio
BuildSettings.projectConfigurations.ParseKeychain(configKey, out BuildReleaseType releaseType, out BuildPlatform platform, out BuildArchitecture architecture,
out BuildScriptingBackend scriptingBackend, out BuildDistribution distribution);
string constantsFileLocation = BuildSettings.basicSettings.constantsFileLocation;
bool useConstKeyword = BuildSettings.basicSettings.useConstKeyword;

GenerateBuildConstants(releaseType, platform, architecture, scriptingBackend, distribution, configureTime, constantsFileLocation);
GenerateBuildConstants(releaseType, platform, architecture, scriptingBackend, distribution, configureTime, constantsFileLocation, useConstKeyword);

}

Expand Down Expand Up @@ -261,7 +263,8 @@ public static void SetEditorBuildSettingsScenes(BuildReleaseType releaseType)
#region Private Methods

private static void ConfigureEnvironment(BuildReleaseType releaseType, BuildPlatform platform, BuildArchitecture architecture,
BuildScriptingBackend scriptingBackend, BuildDistribution distribution, DateTime buildTime, string constantsFileLocation)
BuildScriptingBackend scriptingBackend, BuildDistribution distribution, DateTime buildTime, string constantsFileLocation,
bool useConstKeyword)
{
// Switch to target build platform
EditorUserBuildSettings.SwitchActiveBuildTarget(platform.targetGroup, architecture.target);
Expand Down Expand Up @@ -297,18 +300,20 @@ public static void SetEditorBuildSettingsScenes(BuildReleaseType releaseType)
platform.ApplyVariant();

// Generate BuildConstants
GenerateBuildConstants(releaseType, platform, architecture, scriptingBackend, distribution, buildTime, constantsFileLocation);
GenerateBuildConstants(releaseType, platform, architecture, scriptingBackend, distribution, buildTime, constantsFileLocation,
useConstKeyword);

// Refresh scene list to make sure nothing has been deleted or moved
releaseType.sceneList.Refresh();
}

///Create the buildConstants.cs file
private static void GenerateBuildConstants(BuildReleaseType releaseType, BuildPlatform platform, BuildArchitecture architecture,
BuildScriptingBackend scriptingBackend, BuildDistribution distribution, DateTime buildTime, string constantsFileLocation)
BuildScriptingBackend scriptingBackend, BuildDistribution distribution, DateTime buildTime, string constantsFileLocation,
bool useConstKeyword)
{
BuildConstantsGenerator.Generate(buildTime, constantsFileLocation, BuildSettings.productParameters.buildVersion,
releaseType, platform, scriptingBackend, architecture, distribution);
releaseType, platform, scriptingBackend, architecture, distribution, useConstKeyword);
}

private static void ReplaceFromFile(StringBuilder sb, string keyString, string filename)
Expand Down Expand Up @@ -365,10 +370,11 @@ private static void PerformBuild(string[] buildConfigs, BuildOptions options = B
// Parse build config and perform build.
string notification = string.Format("Building ({0}/{1}): ", i + 1, buildConfigs.Length);
string constantsFileLocation = BuildSettings.basicSettings.constantsFileLocation;
bool useConstKeyword = BuildSettings.basicSettings.useConstKeyword;
BuildSettings.projectConfigurations.ParseKeychain(configKey, out BuildReleaseType releaseType, out BuildPlatform platform, out BuildArchitecture arch,
out BuildScriptingBackend scriptingBackend, out BuildDistribution dist);
bool success = BuildPlayer(notification, releaseType, platform, arch, scriptingBackend, dist, buildTime, options,
constantsFileLocation, configKey);
constantsFileLocation, useConstKeyword, configKey);

if (success)
++successCount;
Expand Down Expand Up @@ -428,7 +434,7 @@ private static void PerformBuild(string[] buildConfigs, BuildOptions options = B

private static bool BuildPlayer(string notification, BuildReleaseType releaseType, BuildPlatform platform, BuildArchitecture architecture,
BuildScriptingBackend scriptingBackend, BuildDistribution distribution, DateTime buildTime, BuildOptions options,
string constantsFileLocation, string configKey)
string constantsFileLocation, bool useConstKeyword, string configKey)
{
bool success = true;

Expand All @@ -445,7 +451,7 @@ private static void PerformBuild(string[] buildConfigs, BuildOptions options = B
ScriptingImplementation preBuildImplementation = PlayerSettings.GetScriptingBackend(platform.targetGroup);

// Configure environment settings to match the build configuration
ConfigureEnvironment(releaseType, platform, architecture, scriptingBackend, distribution, buildTime, constantsFileLocation);
ConfigureEnvironment(releaseType, platform, architecture, scriptingBackend, distribution, buildTime, constantsFileLocation, useConstKeyword);

// Generate build path
string buildPath = GenerateBuildPath(BuildSettings.basicSettings.buildPath, releaseType, platform, architecture, scriptingBackend, distribution, buildTime);
Expand Down
2 changes: 1 addition & 1 deletion Editor/Build/Settings/BaseSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class BaseSettings : ScriptableObject
if (instance == null)
{
//Create the default settings file
Debug.Log($"SuperUnityBuild: Creating settings file: {defaultAssetPath}");
Debug.Log($"StellarUnityBuild: Creating settings file: {defaultAssetPath}");
instance = CreateInstance<T>();
instance.name = assetName;

Expand Down
4 changes: 3 additions & 1 deletion Editor/Build/Settings/BasicSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ public class BasicSettings
[Tooltip("Recognized tokens for the build path: $YEAR, $MONTH, $DAY, $TIME, $RELEASE_TYPE, $PLATFORM, $ARCHITECTURE, $VARIANTS, $DISTRIBUTION, $VERSION, $BUILD, $PRODUCT_NAME, $SCRIPTING_BACKEND")]
public string buildPath = "$VERSION/$RELEASE_TYPE/$PLATFORM/$ARCHITECTURE/$SCRIPTING_BACKEND";
public bool openFolderPostBuild = true;
[Tooltip("The folder path for the " + BuildConstantsGenerator.FileName + " file which will be generated on build. Use the Configure Editor Environment button on a selected configuration to generate it now.")]
[Tooltip("The folder path for the " + BuildConstantsGenerator.FileName + " file which will be generated on build. Use the Configure Editor Environment or Generate Build Constants buttons on a selected configuration to generate it now.")]
[FilePath(true, true, "Choose folder location for the " + BuildConstantsGenerator.FileName + " file")]
public string constantsFileLocation = Constants.DefaultConstantsFilePath;
[Tooltip("Whether to use const or readonly when generating fields in the " + BuildConstantsGenerator.FileName + " file")]
public bool useConstKeyword = true;
}
}
2 changes: 1 addition & 1 deletion Editor/Build/Settings/BuildSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

namespace SuperUnityBuild.BuildTool
{
[CreateAssetMenu(fileName = Constants.DefaultSettingsFileName, menuName = "SuperUnityBuild Settings", order = 1)]
[CreateAssetMenu(fileName = Constants.DefaultSettingsFileName, menuName = "Stellar Unity Build Settings", order = 1)]
[Serializable]
public class BuildSettings : BaseSettings
{
Expand Down
2 changes: 2 additions & 0 deletions Editor/Build/Settings/UI/BasicSettingsDrawer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten

EditorGUILayout.PropertyField(property.FindPropertyRelative("constantsFileLocation"));

EditorGUILayout.PropertyField(property.FindPropertyRelative("useConstKeyword"));

property.serializedObject.ApplyModifiedProperties();

EditorGUILayout.EndVertical();
Expand Down
20 changes: 13 additions & 7 deletions Editor/BuildConstantsGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ public static string FindFile()
BuildPlatform currentBuildPlatform = null,
BuildScriptingBackend currentScriptingBackend = null,
BuildArchitecture currentBuildArchitecture = null,
BuildDistribution currentBuildDistribution = null)
BuildDistribution currentBuildDistribution = null,
bool useConstKeyword = true)
{
// Find the BuildConstants file.
string currentFilePath = FindFile();
Expand All @@ -65,6 +66,8 @@ public static string FindFile()
string archString = currentBuildArchitecture == null ? NONE : SanitizeString(currentBuildArchitecture.name);
string distributionString = currentBuildDistribution == null ? NONE : SanitizeString(currentBuildDistribution.distributionName);

string constOrReadonlyKeyword = useConstKeyword ? "const" : "static readonly";

if (File.Exists(finalFileLocation))
{
// Delete existing version.
Expand All @@ -90,6 +93,8 @@ public static string FindFile()
writer.WriteLine("");
writer.WriteLine("// This file is auto-generated. Do not modify or move this file.");
writer.WriteLine();
writer.WriteLine("namespace SuperUnityBuild.Generated");
writer.WriteLine(" {");
writer.WriteLine("public static class BuildConstants");
writer.WriteLine("{");

Expand Down Expand Up @@ -227,15 +232,16 @@ public static string FindFile()

// Write current values.
writer.WriteLine(" public static readonly DateTime buildDate = new DateTime({0});", buildTime.Ticks);
writer.WriteLine(" public const string version = \"{0}\";", versionString);
writer.WriteLine(" public const ReleaseType releaseType = ReleaseType.{0};", releaseTypeString);
writer.WriteLine(" public const Platform platform = Platform.{0};", platformString);
writer.WriteLine(" public const ScriptingBackend backend = ScriptingBackend.{0};", backendString);
writer.WriteLine(" public const Architecture architecture = Architecture.{0};", archString);
writer.WriteLine(" public const Distribution distribution = Distribution.{0};", distributionString);
writer.WriteLine(" public " + constOrReadonlyKeyword + " string version = \"{0}\";", versionString);
writer.WriteLine(" public " + constOrReadonlyKeyword + " ReleaseType releaseType = ReleaseType.{0};", releaseTypeString);
writer.WriteLine(" public " + constOrReadonlyKeyword + " Platform platform = Platform.{0};", platformString);
writer.WriteLine(" public " + constOrReadonlyKeyword + " ScriptingBackend backend = ScriptingBackend.{0};", backendString);
writer.WriteLine(" public " + constOrReadonlyKeyword + " Architecture architecture = Architecture.{0};", archString);
writer.WriteLine(" public " + constOrReadonlyKeyword + " Distribution distribution = Distribution.{0};", distributionString);

// End of class.
writer.WriteLine("}");
writer.WriteLine(" }");
writer.WriteLine();
}

Expand Down

0 comments on commit cbff4eb

Please sign in to comment.