diff --git a/Assets/GothicVR/Editor/Scripts/Builds/UnityBuilderAction.cs b/Assets/GothicVR/Editor/Scripts/Builds/UnityBuilderAction.cs
index adb70b78c..c46305680 100644
--- a/Assets/GothicVR/Editor/Scripts/Builds/UnityBuilderAction.cs
+++ b/Assets/GothicVR/Editor/Scripts/Builds/UnityBuilderAction.cs
@@ -37,7 +37,7 @@ static void PerformQuestBuild()
{
string target_path = TARGET_DIR + "/Quest/" + APP_NAME + ".apk";
SetQuestSettings();
- FeatureFlagTool.SetFeatureFlags();
+ FeatureFlagTool.SetFeatureFlagsProduction();
EditorSceneManager.SaveScene(SceneManager.GetSceneByName("Bootstrap"));
GenericBuild(SCENES, target_path, BuildTargetGroup.Android, BuildTarget.Android, BuildOptions.None);
}
@@ -48,7 +48,7 @@ static void PerformQuestBuild(bool resetFeatureFlags = true)
SetQuestSettings();
if (resetFeatureFlags)
{
- FeatureFlagTool.SetFeatureFlags();
+ FeatureFlagTool.SetFeatureFlagsProduction();
EditorSceneManager.SaveScene(SceneManager.GetSceneByName("Bootstrap"));
}
GenericBuild(SCENES, target_path, BuildTargetGroup.Android, BuildTarget.Android, BuildOptions.None);
@@ -69,7 +69,7 @@ static void PerformPicoBuild()
{
string target_path = TARGET_DIR + "/Pico/" + APP_NAME + ".apk";
SetPicoSettings();
- FeatureFlagTool.SetFeatureFlags();
+ FeatureFlagTool.SetFeatureFlagsProduction();
EditorSceneManager.SaveScene(SceneManager.GetSceneByName("Bootstrap"));
GenericBuild(SCENES, target_path, BuildTargetGroup.Android, BuildTarget.Android, BuildOptions.None);
}
@@ -79,7 +79,7 @@ static void PerformPicoBuild(bool resetFeatureFlags = true)
SetPicoSettings();
if (resetFeatureFlags)
{
- FeatureFlagTool.SetFeatureFlags();
+ FeatureFlagTool.SetFeatureFlagsProduction();
EditorSceneManager.SaveScene(SceneManager.GetSceneByName("Bootstrap"));
}
GenericBuild(SCENES, target_path, BuildTargetGroup.Android, BuildTarget.Android, BuildOptions.None);
@@ -99,7 +99,7 @@ static void PerformLocalWindows64Build()
static void PerformWindows64Build()
{
string target_path = TARGET_DIR + "/Windows64/" + APP_NAME + ".exe";
- FeatureFlagTool.SetFeatureFlags();
+ FeatureFlagTool.SetFeatureFlagsProduction();
EditorSceneManager.SaveScene(SceneManager.GetSceneByName("Bootstrap"));
GenericBuild(SCENES, target_path, BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows64, BuildOptions.None);
}
@@ -108,7 +108,7 @@ static void PerformWindows64Build(bool resetFeatureFlags = true)
string target_path = TARGET_DIR + "/Windows64/" + APP_NAME + ".exe";
if (resetFeatureFlags)
{
- FeatureFlagTool.SetFeatureFlags();
+ FeatureFlagTool.SetFeatureFlagsProduction();
EditorSceneManager.SaveScene(SceneManager.GetSceneByName("Bootstrap"));
}
GenericBuild(SCENES, target_path, BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows64, BuildOptions.None);
diff --git a/Assets/GothicVR/Editor/Scripts/Tools/FeatureFlagTool.cs b/Assets/GothicVR/Editor/Scripts/Tools/FeatureFlagTool.cs
index e8035779b..0c9c264ce 100644
--- a/Assets/GothicVR/Editor/Scripts/Tools/FeatureFlagTool.cs
+++ b/Assets/GothicVR/Editor/Scripts/Tools/FeatureFlagTool.cs
@@ -16,7 +16,7 @@ public class FeatureFlagTool : EditorWindow
///
/// FieldName, FieldType, Value
///
- private static readonly List> ProductionFlags = new()
+ private static readonly List<(string name, Type type, object value)> ProductionFlags = new()
{
// Booleans
new (nameof(FeatureFlags.createWorldMesh), typeof(bool), true),
@@ -50,66 +50,85 @@ public class FeatureFlagTool : EditorWindow
new Color(1, .87f, .44f, 1))
};
-
- [MenuItem("GothicVR/Tools/FeatureFlags - Set Production ready state", priority = 1)]
- public static void SetFeatureFlags()
+ private static Scene _bootstrapScene
{
- var scene = SceneManager.GetSceneByName("Bootstrap");
-
- if (scene == default)
+ get
{
- Debug.LogError(">Bootstrap< scene needs to be loaded.");
- return;
+ var scene = SceneManager.GetSceneByName("Bootstrap");
+ if (scene == default)
+ Debug.LogError(">Bootstrap< scene needs to be loaded.");
+ return scene;
}
+ }
+ private static FeatureFlags _featureFlags => GameObject.Find("FeatureFlags").GetComponent();
- var featureFlags = GameObject.Find("FeatureFlags").GetComponent();
- var fields = featureFlags.GetType().GetFields();
- ResetFlags(featureFlags, fields);
- SetProductionFlags(featureFlags);
+ [MenuItem("GothicVR/Tools/FeatureFlags - Production", priority = 1)]
+ public static void SetFeatureFlagsProduction()
+ {
+ var fields = _featureFlags.GetType().GetFields();
- EditorSceneManager.MarkSceneDirty(scene);
+ ResetFlags(fields);
+ SetProductionFlags();
- Debug.Log("FeatureFlags successfully set to production values.");
+ EditorSceneManager.MarkSceneDirty(_bootstrapScene);
+
+ Debug.Log("FeatureFlags successfully set to >production<.");
+ }
+
+ [MenuItem("GothicVR/Tools/FeatureFlags - NpcTest", priority = 2)]
+ public static void SetFeatureFlagsNpcTest()
+ {
+ SetFeatureFlagsProduction();
+
+ SetFlags(new List<(string, Type, object)>
+ {
+ new (nameof(FeatureFlags.createOcNpcs), typeof(bool), true),
+ new (nameof(FeatureFlags.enableNpcRoutines), typeof(bool), true),
+ // 1 - Diego, 100 - Gomez, 233 - Blodwyn
+ new (nameof(FeatureFlags.npcToSpawn), typeof(List), new List{1, 100, 233})
+ });
+
+ Debug.Log("FeatureFlags successfully set to >NpcTest<.");
}
///
/// We reset all flags to a default value. It's expected, that e.g. a bool=false is default.
///
- private static void ResetFlags(FeatureFlags featureFlags, FieldInfo[] fields)
+ private static void ResetFlags(FieldInfo[] fields)
{
foreach (var field in fields)
{
switch (field.FieldType.Name)
{
case "Boolean":
- field.SetValue(featureFlags, false);
+ field.SetValue(_featureFlags, false);
break;
case "Int32":
case "Single": // float
case "SunMovementPerformance":
- field.SetValue(featureFlags, 0);
+ field.SetValue(_featureFlags, 0);
break;
case "LogLevel":
- field.SetValue(featureFlags, LogLevel.Error);
+ field.SetValue(_featureFlags, LogLevel.Error);
break;
case "String":
- field.SetValue(featureFlags, "");
+ field.SetValue(_featureFlags, "");
break;
case "Color":
- field.SetValue(featureFlags, Color.white);
+ field.SetValue(_featureFlags, Color.white);
break;
case "VobCullingGroupSetting":
- field.SetValue(featureFlags, new FeatureFlags.VobCullingGroupSetting());
+ field.SetValue(_featureFlags, new FeatureFlags.VobCullingGroupSetting());
break;
case "List`1":
switch (field.FieldType.GenericTypeArguments[0].Name)
{
case "Int32":
- ((List)field.GetValue(featureFlags)).Clear();
+ ((List)field.GetValue(_featureFlags)).Clear();
break;
case nameof(VirtualObjectType):
- ((List)field.GetValue(featureFlags)).Clear();
+ ((List)field.GetValue(_featureFlags)).Clear();
break;
default:
Debug.LogError($"Unsupported field type >{field.FieldType.GenericTypeArguments[0].Name}<");
@@ -126,22 +145,41 @@ private static void ResetFlags(FeatureFlags featureFlags, FieldInfo[] fields)
///
/// Pick the ProductionFlags and set values to demanded values.
///
- private static void SetProductionFlags(FeatureFlags featureFlags)
+ private static void SetProductionFlags()
+ {
+ SetFlags(ProductionFlags);
+ }
+
+ ///
+ /// Set whatever flags we want.
+ ///
+ private static void SetFlags(List<(string name, Type type, object value)> flags)
{
- foreach (var flag in ProductionFlags)
+ foreach (var flag in flags)
{
- switch (flag.Item2.Name)
+ var field = _featureFlags.GetType().GetField(flag.name);
+ switch (flag.type.Name)
{
case "Boolean":
case "Int32":
case "Single": // float
case "Color":
case "VobCullingGroupSetting":
- var field = featureFlags.GetType().GetField(flag.Item1);
- field.SetValue(featureFlags, flag.Item3);
+ field.SetValue(_featureFlags, flag.value);
+ break;
+ case "List`1":
+ switch (field.FieldType.GenericTypeArguments[0].Name)
+ {
+ case "Int32":
+ field.SetValue(_featureFlags, flag.value);
+ break;
+ default:
+ Debug.LogError($"Unsupported field type >{field.FieldType.GenericTypeArguments[0].Name}<");
+ break;
+ }
break;
default:
- Debug.LogError($"Unsupported/Untested field type >{flag.Item2.Name}< for >{flag.Item1}<");
+ Debug.LogError($"Unsupported/Untested field type >{flag.type.Name}< for >{flag.name}<");
break;
}
}