cvr-props/Assets/ABI.CCK/Scripts/Editor/CCK_Init.cs

118 lines
No EOL
4.9 KiB
C#
Executable file

using System.IO;
using UnityEditor;
using UnityEditor.Build.Content;
using UnityEngine;
using UnityEngine.XR;
#pragma warning disable
[InitializeOnLoad]
public class CCK_Init
{
static CCK_Init()
{
const string cckSymbol = "CVR_CCK_EXISTS";
BuildTargetGroup selectedTargetGroup = EditorUserBuildSettings.selectedBuildTargetGroup;
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(selectedTargetGroup);
if (!defines.Contains(cckSymbol))
{
PlayerSettings.SetScriptingDefineSymbolsForGroup(selectedTargetGroup, defines + ";" + cckSymbol);
Debug.Log("[CCK:Init] Added CVR_CCK_EXISTS Scripting Symbol.");
}
bool shouldRecreateTagManager = LayerMask.LayerToName(10) != "PlayerNetwork"
|| LayerMask.LayerToName(15) != "CVRReserved3"
|| LayerMask.LayerToName(6) != "PassPlayer";
if (shouldRecreateTagManager)
{
Debug.Log("[CCK:Init] TagManager asset has to be recreated. Now recreating.");
ResetTagManager();
}
#if UNITY_2021_1_OR_NEWER
if (true)
#else
if (!PlayerSettings.virtualRealitySupported)
#endif
{
Debug.Log("[CCK:Init] XR and render settings have to be changed. Now changing.");
#if PLATFORM_ANDROID
if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android)
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Android, BuildTarget.Android);
#else
if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.StandaloneWindows64)
EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone, BuildTarget.StandaloneWindows64);
#endif
PlayerSettings.colorSpace = ColorSpace.Linear;
PlayerSettings.apiCompatibilityLevel = ApiCompatibilityLevel.NET_4_6;
PlayerSettings.legacyClampBlendShapeWeights = true;
#if UNITY_2021_1_OR_NEWER
PlayerSettings.virtualRealitySupported = true;
PlayerSettings.stereoRenderingPath = StereoRenderingPath.Instancing;
XRSettings.enabled = false;
#else
PlayerSettings.virtualRealitySupported = true;
PlayerSettings.SetVirtualRealitySDKs(BuildTargetGroup.Standalone, new[] { "None", "Oculus", "OpenVR", "MockHMD" });
PlayerSettings.stereoRenderingPath = StereoRenderingPath.SinglePass;
#endif
}
if (!shouldRecreateTagManager && PlayerSettings.virtualRealitySupported)
Debug.Log("[CCK:Init] Verified TagManager and ProjectSettings. No need to readjust.");
}
public static void ResetTagManager(bool forceReset = false)
{
SerializedObject tagManager = new (AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
SerializedProperty layerProperty = tagManager.FindProperty("layers");
var layerList = new (int Index, string Name)[]
{
// game layers, can be force renamed
(6, "PassPlayer"), (7, "BlockPlayer"),
(8, "PlayerLocal"), (9, "PlayerClone"), (10, "PlayerNetwork"),
(11, "MirrorReflection"), (12, "Camera Only"),
(13, "CVRReserved1"), (14, "CVRReserved2"), (15, "CVRReserved3"),
// User Content world layers, do not normally force rename
(16, "CVRContent1 (can be renamed)"), (17, "CVRContent2 (can be renamed)"),
(18, "CVRContent3 (can be renamed)"), (19, "CVRContent4 (can be renamed)"),
(20, "CVRContent5 (can be renamed)"), (21, "CVRContent6 (can be renamed)"),
(22, "CVRContent7 (can be renamed)"), (23, "CVRContent8 (can be renamed)"),
(24, "CVRContent9 (can be renamed)"), (25, "CVRContent10 (can be renamed)"),
(26, "CVRContent11 (can be renamed)"), (27, "CVRContent12 (can be renamed)"),
(28, "CVRContent13 (can be renamed)"), (29, "CVRContent14 (can be renamed)"),
(30, "CVRContent15 (can be renamed)"), (31, "CVRContent16 (can be renamed)")
};
foreach (var (Index, Name) in layerList)
{
SerializedProperty sp = layerProperty.GetArrayElementAtIndex(Index);
if (sp == null) continue;
// always rename
if (Index >= 6 && Index <= 15)
{
sp.stringValue = Name;
}
// only rename if legacy or forced
else if (forceReset ||
sp.stringValue == "" ||
sp.stringValue == "PostProcessing" || // :)
sp.stringValue == "CVRPickup" ||
sp.stringValue == "CVRInteractable" ||
sp.stringValue.StartsWith("RCC_"))
{
sp.stringValue = Name;
}
}
tagManager.ApplyModifiedProperties();
}
}