From b27ed3f96b4999a89529b73c975976f073805be7 Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Fri, 16 Aug 2024 21:40:46 +0800 Subject: [PATCH] WIP --- CheatEnabler/FactoryPatch.cs | 3 +- CheatEnabler/PlayerFunctions.cs | 52 ++ CheatEnabler/README.md | 8 +- CheatEnabler/TechPatch.cs | 49 +- CheatEnabler/UIConfigWindow.cs | 15 +- .../BuildAssets/Assets/signal-410.png.meta | 4 +- UXAssist/BuildAssets/.gitignore | 74 ++ UXAssist/BuildAssets/Assets/Editor.meta | 8 + .../Assets/Editor/ExportAssetBundles.cs | 16 + .../Assets/Editor/ExportAssetBundles.cs.meta | 11 + UXAssist/BuildAssets/Assets/Scenes.meta | 8 + .../Assets/Scenes/SampleScene.unity | 259 +++++++ .../Assets/Scenes/SampleScene.unity.meta | 7 + .../BuildAssets/Assets/energy-fragment.png | Bin 0 -> 13212 bytes .../Assets/energy-fragment.png.meta | 99 +++ UXAssist/BuildAssets/Assets/memory.png | Bin 0 -> 15651 bytes UXAssist/BuildAssets/Assets/memory.png.meta | 99 +++ UXAssist/BuildAssets/Assets/negentropy.png | Bin 0 -> 13255 bytes .../BuildAssets/Assets/negentropy.png.meta | 99 +++ UXAssist/BuildAssets/Assets/reassembler.png | Bin 0 -> 12235 bytes .../BuildAssets/Assets/reassembler.png.meta | 99 +++ .../BuildAssets/Assets/silicon-neuron.png | Bin 0 -> 14130 bytes .../Assets/silicon-neuron.png.meta | 99 +++ .../BuildAssets/Assets/virtual-particle.png | Bin 0 -> 14155 bytes .../Assets/virtual-particle.png.meta | 99 +++ UXAssist/BuildAssets/Packages/manifest.json | 4 + .../ProjectSettings/AudioManager.asset | 17 + .../ProjectSettings/ClusterInputManager.asset | 6 + .../ProjectSettings/DynamicsManager.asset | 30 + .../ProjectSettings/EditorBuildSettings.asset | 8 + .../ProjectSettings/EditorSettings.asset | 21 + .../ProjectSettings/GraphicsSettings.asset | 65 ++ .../ProjectSettings/InputManager.asset | 295 ++++++++ .../ProjectSettings/NavMeshAreas.asset | 91 +++ .../ProjectSettings/NetworkManager.asset | 8 + .../ProjectSettings/Physics2DSettings.asset | 38 ++ .../ProjectSettings/PresetManager.asset | 27 + .../ProjectSettings/ProjectSettings.asset | 631 ++++++++++++++++++ .../ProjectSettings/ProjectVersion.txt | 1 + .../ProjectSettings/QualitySettings.asset | 190 ++++++ .../ProjectSettings/TagManager.asset | 43 ++ .../ProjectSettings/TimeManager.asset | 9 + .../UnityConnectSettings.asset | 34 + .../ProjectSettings/VFXManager.asset | 11 + UXAssist/Common/WinApi.cs | 3 + UXAssist/DysonSpherePatch.cs | 33 +- UXAssist/GamePatch.cs | 32 +- UXAssist/README.md | 2 +- UXAssist/TechPatch.cs | 311 ++++++++- UXAssist/UIConfigWindow.cs | 5 +- UXAssist/UXAssist.cs | 2 + UXAssist/UXAssist.csproj | 9 +- UXAssist/package/uxassist.assetbundle | Bin 0 -> 28832 bytes 53 files changed, 2991 insertions(+), 43 deletions(-) create mode 100644 CheatEnabler/PlayerFunctions.cs create mode 100644 UXAssist/BuildAssets/.gitignore create mode 100644 UXAssist/BuildAssets/Assets/Editor.meta create mode 100644 UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs create mode 100644 UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs.meta create mode 100644 UXAssist/BuildAssets/Assets/Scenes.meta create mode 100644 UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity create mode 100644 UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity.meta create mode 100644 UXAssist/BuildAssets/Assets/energy-fragment.png create mode 100644 UXAssist/BuildAssets/Assets/energy-fragment.png.meta create mode 100644 UXAssist/BuildAssets/Assets/memory.png create mode 100644 UXAssist/BuildAssets/Assets/memory.png.meta create mode 100644 UXAssist/BuildAssets/Assets/negentropy.png create mode 100644 UXAssist/BuildAssets/Assets/negentropy.png.meta create mode 100644 UXAssist/BuildAssets/Assets/reassembler.png create mode 100644 UXAssist/BuildAssets/Assets/reassembler.png.meta create mode 100644 UXAssist/BuildAssets/Assets/silicon-neuron.png create mode 100644 UXAssist/BuildAssets/Assets/silicon-neuron.png.meta create mode 100644 UXAssist/BuildAssets/Assets/virtual-particle.png create mode 100644 UXAssist/BuildAssets/Assets/virtual-particle.png.meta create mode 100644 UXAssist/BuildAssets/Packages/manifest.json create mode 100644 UXAssist/BuildAssets/ProjectSettings/AudioManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/ClusterInputManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/DynamicsManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/EditorBuildSettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/EditorSettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/GraphicsSettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/InputManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/NavMeshAreas.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/NetworkManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/Physics2DSettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/PresetManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/ProjectSettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/ProjectVersion.txt create mode 100644 UXAssist/BuildAssets/ProjectSettings/QualitySettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/TagManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/TimeManager.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/UnityConnectSettings.asset create mode 100644 UXAssist/BuildAssets/ProjectSettings/VFXManager.asset create mode 100644 UXAssist/package/uxassist.assetbundle diff --git a/CheatEnabler/FactoryPatch.cs b/CheatEnabler/FactoryPatch.cs index 99e7125..80ee693 100644 --- a/CheatEnabler/FactoryPatch.cs +++ b/CheatEnabler/FactoryPatch.cs @@ -395,6 +395,7 @@ public static class FactoryPatch yield return new CodeInstruction(OpCodes.Ret); } + [HarmonyTranspiler, HarmonyPriority(Priority.First)] [HarmonyPatch(typeof(BuildTool_Path), nameof(BuildTool_Path.CheckBuildConditions))] private static IEnumerable BuildTool_Path_CheckBuildConditions_Transpiler(IEnumerable instructions, ILGenerator generator) { @@ -418,7 +419,7 @@ public static class FactoryPatch new CodeMatch(ci => ci.IsLdloc()), new CodeMatch(ci => ci.Branches(out _)), new CodeMatch(OpCodes.Ldarg_0), - new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(BuildTool), nameof(BuildTool_Path.waitForConfirm))), + new CodeMatch(OpCodes.Ldfld, AccessTools.Field(typeof(BuildTool_Path), nameof(BuildTool_Path.waitForConfirm))), new CodeMatch(ci => ci.Branches(out _)) ); var operand = matcher.Operand; diff --git a/CheatEnabler/PlayerFunctions.cs b/CheatEnabler/PlayerFunctions.cs new file mode 100644 index 0000000..78603be --- /dev/null +++ b/CheatEnabler/PlayerFunctions.cs @@ -0,0 +1,52 @@ +using System; + +namespace CheatEnabler; + +public static class PlayerFunctions +{ + public static void TeleportToOuterSpace() + { + var maxSqrDistance = 0.0; + var starPosition = VectorLF3.zero; + foreach (var star in GameMain.galaxy.stars) + { + var sqrDistance = star.position.sqrMagnitude; + if (sqrDistance > maxSqrDistance) + { + maxSqrDistance = sqrDistance; + starPosition = star.position; + } + } + if (starPosition == VectorLF3.zero) return; + var distance = Math.Sqrt(maxSqrDistance); + GameMain.mainPlayer.controller.actionSail.StartFastTravelToUPosition((starPosition + starPosition.normalized * 50) * GalaxyData.LY); + } + + public static void TeleportToSelectedAstronomical() + { + var starmap = UIRoot.instance?.uiGame?.starmap; + if (starmap == null) return; + if (starmap.focusPlanet != null) + { + GameMain.mainPlayer.controller.actionSail.StartFastTravelToPlanet(starmap.focusPlanet.planet); + return; + } + var targetUPos = VectorLF3.zero; + if (starmap.focusStar != null) + { + var star = starmap.focusStar.star; + targetUPos = star.uPosition + VectorLF3.unit_x * star.physicsRadius; + } + else if (starmap.focusHive != null) + { + var hive = starmap.focusHive.hive; + var id = hive.hiveAstroId - 1000000; + if (id > 0 && id < starmap.spaceSector.astros.Length) + { + ref var astro = ref starmap.spaceSector.astros[id]; + targetUPos = astro.uPos + VectorLF3.unit_x * astro.uRadius; + } + } + GameMain.mainPlayer.controller.actionSail.StartFastTravelToUPosition(targetUPos); + } +} diff --git a/CheatEnabler/README.md b/CheatEnabler/README.md index be7386b..80d26ef 100644 --- a/CheatEnabler/README.md +++ b/CheatEnabler/README.md @@ -85,7 +85,7 @@ + New function: `Remove some build conditions` + Fix compatibility with some mods * 2.2.2 - + New function: `Assign game to currrnet account` + + New function: `Assign gamesave to currrnet account` + New subfunction: `Belt signal alt format` + Fix a crash on using `Initialize this Planet` + Fix belt build in `Finish build immediately` @@ -115,7 +115,7 @@ + Enable Dev Shortcuts (check config panel for usage) + Disable Abnormal Checks + Unlock techs with key-modifiers (Ctrl/Alt/Shift) - + Assign game to currrnet account + + Assign gamesave to currrnet account + Factory: + Finish build immediately + Architect mode (Infinite buildings) @@ -238,7 +238,7 @@ + 新功能:`移除部分不影响游戏逻辑的建造条件` + 修复了与一些mod的兼容性问题 * 2.2.2 - + 新功能:`将游戏绑定给当前账号` + + 新功能:`将游戏存档绑定给当前账号` + 新子功能:`传送带信号替换格式` + 修复了`初始化本行星`可能导致崩溃的问题 + 修复了`建造秒完成`中传送带建造的问题 @@ -268,7 +268,7 @@ + 启用开发模式快捷键(使用说明见设置面板) + 屏蔽异常检测 + 使用组合键解锁科技(Ctrl/Alt/Shift) - + 将游戏绑定给当前账号 + + 将游戏存档绑定给当前账号 + 工厂: + 建造秒完成 + 建筑师模式(无限建筑) diff --git a/CheatEnabler/TechPatch.cs b/CheatEnabler/TechPatch.cs index 06d5220..f29091c 100644 --- a/CheatEnabler/TechPatch.cs +++ b/CheatEnabler/TechPatch.cs @@ -37,9 +37,8 @@ public static class TechPatch } } - private static void UnlockTechRecursive([NotNull] TechProto techProto, int maxLevel = 10000) + private static void UnlockTechRecursive(GameHistoryData history, [NotNull] TechProto techProto, int maxLevel = 10000) { - var history = GameMain.history; var techStates = history.techStates; var techID = techProto.ID; if (techStates == null || !techStates.TryGetValue(techID, out var value)) @@ -58,19 +57,13 @@ public static class TechPatch { var preProto = LDB.techs.Select(preid); if (preProto != null) - UnlockTechRecursive(preProto, maxLevel); + UnlockTechRecursive(history, preProto, techProto.PreTechsMax ? 10000 : -1); } - - var techQueue = history.techQueue; - if (techQueue != null) + foreach (var preid in techProto.PreTechsImplicit) { - for (var i = 0; i < techQueue.Length; i++) - { - if (techQueue[i] == techID) - { - techQueue[i] = 0; - } - } + var preProto = LDB.techs.Select(preid); + if (preProto != null) + UnlockTechRecursive(history, preProto, techProto.PreTechsMax ? 10000 : -1); } if (value.curLevel < techProto.Level) value.curLevel = techProto.Level; @@ -105,23 +98,37 @@ public static class TechPatch private static void OnClickTech(UITechNode node) { + var history = GameMain.history; if (VFInput.shift) { if (VFInput.alt) return; if (VFInput.control) - UnlockTechRecursive(node.techProto, -100); + UnlockTechRecursive(history, node.techProto, -100); else - UnlockTechRecursive(node.techProto, -1); - return; + UnlockTechRecursive(history, node.techProto, -1); } - if (VFInput.control) + else { - if (!VFInput.alt) - UnlockTechRecursive(node.techProto, -10); + if (VFInput.control) + { + if (!VFInput.alt) + UnlockTechRecursive(history, node.techProto, -10); + else + return; + } + else if (VFInput.alt) + { + UnlockTechRecursive(history, node.techProto); + } + else + { + return; + } } - else if (VFInput.alt) + history.VarifyTechQueue(); + if (history.currentTech != history.techQueue[0]) { - UnlockTechRecursive(node.techProto); + history.currentTech = history.techQueue[0]; } } diff --git a/CheatEnabler/UIConfigWindow.cs b/CheatEnabler/UIConfigWindow.cs index 27c6867..25e5895 100644 --- a/CheatEnabler/UIConfigWindow.cs +++ b/CheatEnabler/UIConfigWindow.cs @@ -14,7 +14,7 @@ public static class UIConfigWindow { I18N.Add("Factory", "Factory", "工厂"); I18N.Add("Planet", "Planet", "行星"); - I18N.Add("Combat", "Combat", "战斗"); + I18N.Add("Mecha/Combat", "Mecha/Combat", "机甲/战斗"); I18N.Add("Enable Dev Shortcuts", "Enable Dev Shortcuts", "开发模式快捷键"); I18N.Add("Disable Abnormal Checks", "Disable Abnormal Checks", "关闭数据异常检查"); I18N.Add("Hotkey", "Hotkey", "快捷键"); @@ -26,7 +26,7 @@ public static class UIConfigWindow I18N.Add("Unlock Tech with Key-Modifiers Tips", "Click tech on tree while holding:\n Shift: Tech level + 1\n Ctrl: Tech level + 10\n Ctrl + Shift: Tech level + 100\n Alt: Tech level to MAX\n\nNote: all direct prerequisites will be unlocked as well.", "按住以下组合键点击科技树:\n Shift:科技等级+1\n Ctrl:科技等级+10\n Ctrl+Shift:科技等级+100\n Alt:科技等级升到最大\n\n注意:所有直接前置科技也会被解锁"); - I18N.Add("Assign game to current account", "Assign game to current account", "将游戏绑定给当前账号"); + I18N.Add("Assign gamesave to current account", "Assign gamesave to current account", "将游戏存档绑定给当前账号"); I18N.Add("Finish build immediately", "Finish build immediately", "建造秒完成"); I18N.Add("Architect mode", "Architect mode", "建筑师模式"); I18N.Add("Build without condition", "Build without condition check", "无条件建造"); @@ -60,6 +60,8 @@ public static class UIConfigWindow I18N.Add("Instant teleport (like that in Sandbox mode)", "Instant teleport (like that in Sandbox mode)", "快速传送(和沙盒模式一样)"); I18N.Add("Mecha and Drones/Fleets invicible", "Mecha and Drones/Fleets invicible", "机甲和战斗无人机无敌"); I18N.Add("Buildings invicible", "Buildings invincible", "建筑无敌"); + I18N.Add("Teleport to outer space", "Teleport to outer space", "传送到外太空"); + I18N.Add("Teleport to selected astronomical", "Teleport to selected astronomical", "传送到选中的天体"); I18N.Apply(); MyConfigWindow.OnUICreated += CreateUI; MyConfigWindow.OnUpdateUI += UpdateUI; @@ -87,7 +89,7 @@ public static class UIConfigWindow MyWindow.AddTipsButton(x, y, tab1, "Unlock Tech with Key-Modifiers", "Unlock Tech with Key-Modifiers Tips", "unlock-tech-tips"); x = 300f; y = 10f; - _resignGameBtn = wnd.AddButton(x, y, 200f, tab1, "Assign game to current account", 16, "resign-game-btn", () => { GameMain.data.account = AccountData.me; }); + _resignGameBtn = wnd.AddButton(x, y, 200f, tab1, "Assign gamesave to current account", 16, "resign-game-btn", () => { GameMain.data.account = AccountData.me; }); var tab2 = wnd.AddTab(_windowTrans, "Factory"); x = 0f; @@ -188,12 +190,17 @@ public static class UIConfigWindow y += 36f; MyCheckBox.CreateCheckBox(x, y, tab4, DysonSpherePatch.OverclockSiloEnabled, "Overclock Silos"); - var tab5 = wnd.AddTab(_windowTrans, "Combat"); + var tab5 = wnd.AddTab(_windowTrans, "Mecha/Combat"); x = 0f; y = 10f; MyCheckBox.CreateCheckBox(x, y, tab5, CombatPatch.MechaInvincibleEnabled, "Mecha and Drones/Fleets invicible"); y += 36f; MyCheckBox.CreateCheckBox(x, y, tab5, CombatPatch.BuildingsInvincibleEnabled, "Buildings invicible"); + x = 400f; + y = 10f; + wnd.AddButton(x, y, 200f, tab5, "Teleport to outer space", 16, "button-teleport-to-outer-space", PlayerFunctions.TeleportToOuterSpace); + y += 36f; + wnd.AddButton(x, y, 200f, tab5, "Teleport to selected astronomical", 16, "button-teleport-to-selected-astronomical", PlayerFunctions.TeleportToSelectedAstronomical); return; void OnBeltSignalChanged() diff --git a/Dustbin/BuildAssets/Assets/signal-410.png.meta b/Dustbin/BuildAssets/Assets/signal-410.png.meta index f72f293..3fca54d 100644 --- a/Dustbin/BuildAssets/Assets/signal-410.png.meta +++ b/Dustbin/BuildAssets/Assets/signal-410.png.meta @@ -60,7 +60,7 @@ TextureImporter: platformSettings: - serializedVersion: 2 buildTarget: DefaultTexturePlatform - maxTextureSize: 128 + maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 2 @@ -71,7 +71,7 @@ TextureImporter: androidETC2FallbackOverride: 0 - serializedVersion: 2 buildTarget: Standalone - maxTextureSize: 128 + maxTextureSize: 2048 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 2 diff --git a/UXAssist/BuildAssets/.gitignore b/UXAssist/BuildAssets/.gitignore new file mode 100644 index 0000000..367cba1 --- /dev/null +++ b/UXAssist/BuildAssets/.gitignore @@ -0,0 +1,74 @@ +# This .gitignore file should be placed at the root of your Unity project directory +# +# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore +# +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ + +# MemoryCaptures can get excessive in size. +# They also could contain extremely sensitive data +/[Mm]emoryCaptures/ + +# Recordings can get excessive in size +/[Rr]ecordings/ + +# Uncomment this line if you wish to ignore the asset store tools plugin +# /[Aa]ssets/AssetStoreTools* + +# Autogenerated Jetbrains Rider plugin +/[Aa]ssets/Plugins/Editor/JetBrains* + +# Visual Studio cache directory +.vs/ + +# Gradle cache directory +.gradle/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta +*.mdb.meta + +# Unity3D generated file on crash reports +sysinfo.txt + +# Builds +*.apk +*.aab +*.unitypackage +*.app + +# Crashlytics generated file +crashlytics-build.properties + +# Packed Addressables +/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* + +# Temporary auto-generated Android Assets +/[Aa]ssets/[Ss]treamingAssets/aa.meta +/[Aa]ssets/[Ss]treamingAssets/aa/* +/[Aa]ssets/[Aa]ssetBundles.meta +/[Aa]ssets/[Aa]ssetBundles/* diff --git a/UXAssist/BuildAssets/Assets/Editor.meta b/UXAssist/BuildAssets/Assets/Editor.meta new file mode 100644 index 0000000..8449192 --- /dev/null +++ b/UXAssist/BuildAssets/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3df0c2d0fbfdc0b47a9b2ed59b76d118 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs b/UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs new file mode 100644 index 0000000..62c17d3 --- /dev/null +++ b/UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs @@ -0,0 +1,16 @@ +using UnityEditor; +using System.IO; + +public class CreateAssetBundles +{ + [MenuItem("Assets/Build AssetBundles")] + static void BuildAllAssetBundles() + { + string assetBundleDirectory = "Assets/AssetBundles"; + if(!Directory.Exists(assetBundleDirectory)) + { + Directory.CreateDirectory(assetBundleDirectory); + } + BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); + } +} diff --git a/UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs.meta b/UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs.meta new file mode 100644 index 0000000..2633dba --- /dev/null +++ b/UXAssist/BuildAssets/Assets/Editor/ExportAssetBundles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfa26969c9747e340b44aaf27e7edc2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UXAssist/BuildAssets/Assets/Scenes.meta b/UXAssist/BuildAssets/Assets/Scenes.meta new file mode 100644 index 0000000..a17d603 --- /dev/null +++ b/UXAssist/BuildAssets/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c745b4360bbd0446b3aa3bdc756e650 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity b/UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..114459f --- /dev/null +++ b/UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity @@ -0,0 +1,259 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 170076734} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 10 + m_AtlasSize: 512 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 256 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &170076733 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170076735} + - component: {fileID: 170076734} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &170076734 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 170076733} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &170076735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 170076733} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &534669902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 534669905} + - component: {fileID: 534669904} + - component: {fileID: 534669903} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &534669903 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 534669902} + m_Enabled: 1 +--- !u!20 &534669904 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 534669902} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &534669905 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 534669902} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity.meta b/UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..4ffd4e9 --- /dev/null +++ b/UXAssist/BuildAssets/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b7fbfa1202611b24b816b87417d3a914 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UXAssist/BuildAssets/Assets/energy-fragment.png b/UXAssist/BuildAssets/Assets/energy-fragment.png new file mode 100644 index 0000000000000000000000000000000000000000..c6318c59bc28edc0a4cd47bf197e8e76651d5e90 GIT binary patch literal 13212 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 FV1mGt5}yD7 literal 0 HcmV?d00001 diff --git a/UXAssist/BuildAssets/Assets/negentropy.png.meta b/UXAssist/BuildAssets/Assets/negentropy.png.meta new file mode 100644 index 0000000..75254e0 --- /dev/null +++ b/UXAssist/BuildAssets/Assets/negentropy.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 6da581fa918fba445821681a00682beb +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: ff080cbe30a20bb469fe2bc157609fc1 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: uxassist + assetBundleVariant: assetbundle diff --git a/UXAssist/BuildAssets/Assets/reassembler.png b/UXAssist/BuildAssets/Assets/reassembler.png new file mode 100644 index 0000000000000000000000000000000000000000..b845f7ed9fffe56da6757f63e01f261ecf1a537d GIT binary patch literal 12235 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%0AG-;yU%MUdcU}P-1Jya(LQ6$1$rm!5^ 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 V0_P`*qgVg{002ovPDHLkV1i;Z!}I_E literal 0 HcmV?d00001 diff --git a/UXAssist/BuildAssets/Assets/virtual-particle.png.meta b/UXAssist/BuildAssets/Assets/virtual-particle.png.meta new file mode 100644 index 0000000..ddf1410 --- /dev/null +++ b/UXAssist/BuildAssets/Assets/virtual-particle.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 374f808d2bb385e42810f597de69fb21 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 2 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 428613fb6a5e02f49815b5b85531c02f + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: uxassist + assetBundleVariant: assetbundle diff --git a/UXAssist/BuildAssets/Packages/manifest.json b/UXAssist/BuildAssets/Packages/manifest.json new file mode 100644 index 0000000..526aca6 --- /dev/null +++ b/UXAssist/BuildAssets/Packages/manifest.json @@ -0,0 +1,4 @@ +{ + "dependencies": { + } +} diff --git a/UXAssist/BuildAssets/ProjectSettings/AudioManager.asset b/UXAssist/BuildAssets/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..4f31e74 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/AudioManager.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!11 &1 +AudioManager: + m_ObjectHideFlags: 0 + m_Volume: 1 + Rolloff Scale: 1 + Doppler Factor: 1 + Default Speaker Mode: 2 + m_SampleRate: 0 + m_DSPBufferSize: 1024 + m_VirtualVoiceCount: 512 + m_RealVoiceCount: 32 + m_SpatializerPlugin: + m_AmbisonicDecoderPlugin: + m_DisableAudio: 0 + m_VirtualizeEffects: 1 diff --git a/UXAssist/BuildAssets/ProjectSettings/ClusterInputManager.asset b/UXAssist/BuildAssets/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..e7886b2 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/ClusterInputManager.asset @@ -0,0 +1,6 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!236 &1 +ClusterInputManager: + m_ObjectHideFlags: 0 + m_Inputs: [] diff --git a/UXAssist/BuildAssets/ProjectSettings/DynamicsManager.asset b/UXAssist/BuildAssets/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..b3c263d --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/DynamicsManager.asset @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!55 &1 +PhysicsManager: + m_ObjectHideFlags: 0 + serializedVersion: 8 + m_Gravity: {x: 0, y: -9.81, z: 0} + m_DefaultMaterial: {fileID: 0} + m_BounceThreshold: 2 + m_SleepThreshold: 0.005 + m_DefaultContactOffset: 0.01 + m_DefaultSolverIterations: 6 + m_DefaultSolverVelocityIterations: 1 + m_QueriesHitBackfaces: 0 + m_QueriesHitTriggers: 1 + m_EnableAdaptiveForce: 0 + m_ClothInterCollisionDistance: 0 + m_ClothInterCollisionStiffness: 0 + m_ContactsGeneration: 1 + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_AutoSimulation: 1 + m_AutoSyncTransforms: 0 + m_ReuseCollisionCallbacks: 1 + m_ClothInterCollisionSettingsToggle: 0 + m_ContactPairsMode: 0 + m_BroadphaseType: 0 + m_WorldBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 250, y: 250, z: 250} + m_WorldSubdivisions: 8 diff --git a/UXAssist/BuildAssets/ProjectSettings/EditorBuildSettings.asset b/UXAssist/BuildAssets/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..0147887 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/EditorBuildSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1045 &1 +EditorBuildSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Scenes: [] + m_configObjects: {} diff --git a/UXAssist/BuildAssets/ProjectSettings/EditorSettings.asset b/UXAssist/BuildAssets/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..29dea52 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/EditorSettings.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!159 &1 +EditorSettings: + m_ObjectHideFlags: 0 + serializedVersion: 7 + m_ExternalVersionControlSupport: Visible Meta Files + m_SerializationMode: 2 + m_LineEndingsForNewScripts: 2 + m_DefaultBehaviorMode: 0 + m_SpritePackerMode: 0 + m_SpritePackerPaddingPower: 1 + m_EtcTextureCompressorBehavior: 1 + m_EtcTextureFastCompressor: 1 + m_EtcTextureNormalCompressor: 2 + m_EtcTextureBestCompressor: 4 + m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd + m_ProjectGenerationRootNamespace: + m_UserGeneratedProjectSuffix: + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/UXAssist/BuildAssets/ProjectSettings/GraphicsSettings.asset b/UXAssist/BuildAssets/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..7997460 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/GraphicsSettings.asset @@ -0,0 +1,65 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!30 &1 +GraphicsSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_Deferred: + m_Mode: 1 + m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} + m_DeferredReflections: + m_Mode: 1 + m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} + m_ScreenSpaceShadows: + m_Mode: 1 + m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} + m_LegacyDeferred: + m_Mode: 1 + m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} + m_DepthNormals: + m_Mode: 1 + m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} + m_MotionVectors: + m_Mode: 1 + m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} + m_LightHalo: + m_Mode: 1 + m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} + m_LensFlare: + m_Mode: 1 + m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_AlwaysIncludedShaders: + - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} + m_PreloadedShaders: [] + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, + type: 0} + m_CustomRenderPipeline: {fileID: 0} + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 0, z: 1} + m_DefaultRenderingPath: 1 + m_DefaultMobileRenderingPath: 1 + m_TierSettings: [] + m_LightmapStripping: 0 + m_FogStripping: 0 + m_InstancingStripping: 0 + m_LightmapKeepPlain: 1 + m_LightmapKeepDirCombined: 1 + m_LightmapKeepDynamicPlain: 1 + m_LightmapKeepDynamicDirCombined: 1 + m_LightmapKeepShadowMask: 1 + m_LightmapKeepSubtractive: 1 + m_FogKeepLinear: 1 + m_FogKeepExp: 1 + m_FogKeepExp2: 1 + m_AlbedoSwatchInfos: [] + m_LightsUseLinearIntensity: 0 + m_LightsUseColorTemperature: 0 + m_LogWhenShaderIsCompiled: 0 diff --git a/UXAssist/BuildAssets/ProjectSettings/InputManager.asset b/UXAssist/BuildAssets/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..17c8f53 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/InputManager.asset @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!13 &1 +InputManager: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Axes: + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: left + positiveButton: right + altNegativeButton: a + altPositiveButton: d + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: down + positiveButton: up + altNegativeButton: s + altPositiveButton: w + gravity: 3 + dead: 0.001 + sensitivity: 3 + snap: 1 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left ctrl + altNegativeButton: + altPositiveButton: mouse 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left alt + altNegativeButton: + altPositiveButton: mouse 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: left shift + altNegativeButton: + altPositiveButton: mouse 2 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: space + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse X + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse Y + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Mouse ScrollWheel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0 + sensitivity: 0.1 + snap: 0 + invert: 0 + type: 1 + axis: 2 + joyNum: 0 + - serializedVersion: 3 + m_Name: Horizontal + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 0 + type: 2 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Vertical + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: + altNegativeButton: + altPositiveButton: + gravity: 0 + dead: 0.19 + sensitivity: 1 + snap: 0 + invert: 1 + type: 2 + axis: 1 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire1 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 0 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire2 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 1 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Fire3 + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 2 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Jump + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: joystick button 3 + altNegativeButton: + altPositiveButton: + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: return + altNegativeButton: + altPositiveButton: joystick button 0 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Submit + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: enter + altNegativeButton: + altPositiveButton: space + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 + - serializedVersion: 3 + m_Name: Cancel + descriptiveName: + descriptiveNegativeName: + negativeButton: + positiveButton: escape + altNegativeButton: + altPositiveButton: joystick button 1 + gravity: 1000 + dead: 0.001 + sensitivity: 1000 + snap: 0 + invert: 0 + type: 0 + axis: 0 + joyNum: 0 diff --git a/UXAssist/BuildAssets/ProjectSettings/NavMeshAreas.asset b/UXAssist/BuildAssets/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..3b0b7c3 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/NavMeshAreas.asset @@ -0,0 +1,91 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!126 &1 +NavMeshProjectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + areas: + - name: Walkable + cost: 1 + - name: Not Walkable + cost: 1 + - name: Jump + cost: 2 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + - name: + cost: 1 + m_LastAgentTypeID: -887442657 + m_Settings: + - serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.75 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_SettingNames: + - Humanoid diff --git a/UXAssist/BuildAssets/ProjectSettings/NetworkManager.asset b/UXAssist/BuildAssets/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000..5dc6a83 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/NetworkManager.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!149 &1 +NetworkManager: + m_ObjectHideFlags: 0 + m_DebugLevel: 0 + m_Sendrate: 15 + m_AssetToPrefab: {} diff --git a/UXAssist/BuildAssets/ProjectSettings/Physics2DSettings.asset b/UXAssist/BuildAssets/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..57760e2 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/Physics2DSettings.asset @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!19 &1 +Physics2DSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_Gravity: {x: 0, y: -9.81} + m_DefaultMaterial: {fileID: 0} + m_VelocityIterations: 8 + m_PositionIterations: 3 + m_VelocityThreshold: 1 + m_MaxLinearCorrection: 0.2 + m_MaxAngularCorrection: 8 + m_MaxTranslationSpeed: 100 + m_MaxRotationSpeed: 360 + m_BaumgarteScale: 0.2 + m_BaumgarteTimeOfImpactScale: 0.75 + m_TimeToSleep: 0.5 + m_LinearSleepTolerance: 0.01 + m_AngularSleepTolerance: 2 + m_DefaultContactOffset: 0.01 + m_AutoSimulation: 1 + m_QueriesHitTriggers: 1 + m_QueriesStartInColliders: 1 + m_ChangeStopsCallbacks: 0 + m_CallbacksOnDisable: 1 + m_ReuseCollisionCallbacks: 1 + m_AutoSyncTransforms: 0 + m_AlwaysShowColliders: 0 + m_ShowColliderSleep: 1 + m_ShowColliderContacts: 0 + m_ShowColliderAABB: 0 + m_ContactArrowScale: 0.2 + m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} + m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} + m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} + m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} + m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/UXAssist/BuildAssets/ProjectSettings/PresetManager.asset b/UXAssist/BuildAssets/ProjectSettings/PresetManager.asset new file mode 100644 index 0000000..820e662 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/PresetManager.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1386491679 &1 +PresetManager: + m_ObjectHideFlags: 0 + m_DefaultList: + - type: + m_NativeTypeID: 108 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + defaultPresets: + - m_Preset: {fileID: 2655988077585873504, guid: c1cf8506f04ef2c4a88b64b6c4202eea, + type: 2} + - type: + m_NativeTypeID: 1020 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + defaultPresets: + - m_Preset: {fileID: 2655988077585873504, guid: 0cd792cc87e492d43b4e95b205fc5cc6, + type: 2} + - type: + m_NativeTypeID: 1006 + m_ManagedTypePPtr: {fileID: 0} + m_ManagedTypeFallback: + defaultPresets: + - m_Preset: {fileID: 2655988077585873504, guid: 7a99f8aa944efe94cb9bd74562b7d5f9, + type: 2} diff --git a/UXAssist/BuildAssets/ProjectSettings/ProjectSettings.asset b/UXAssist/BuildAssets/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..83c8ae1 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/ProjectSettings.asset @@ -0,0 +1,631 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!129 &1 +PlayerSettings: + m_ObjectHideFlags: 0 + serializedVersion: 18 + productGUID: 99d88d5ef2e651846b00c83bfe09cfff + AndroidProfiler: 0 + AndroidFilterTouchesWhenObscured: 0 + AndroidEnableSustainedPerformanceMode: 0 + defaultScreenOrientation: 4 + targetDevice: 2 + useOnDemandResources: 0 + accelerometerFrequency: 60 + companyName: DefaultCompany + productName: DSP_Mods_Assets + defaultCursor: {fileID: 0} + cursorHotspot: {x: 0, y: 0} + m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_ShowUnitySplashScreen: 1 + m_ShowUnitySplashLogo: 1 + m_SplashScreenOverlayOpacity: 1 + m_SplashScreenAnimation: 1 + m_SplashScreenLogoStyle: 1 + m_SplashScreenDrawMode: 0 + m_SplashScreenBackgroundAnimationZoom: 1 + m_SplashScreenLogoAnimationZoom: 1 + m_SplashScreenBackgroundLandscapeAspect: 1 + m_SplashScreenBackgroundPortraitAspect: 1 + m_SplashScreenBackgroundLandscapeUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenBackgroundPortraitUvs: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + m_SplashScreenLogos: [] + m_VirtualRealitySplashScreen: {fileID: 0} + m_HolographicTrackingLossScreen: {fileID: 0} + defaultScreenWidth: 1024 + defaultScreenHeight: 768 + defaultScreenWidthWeb: 960 + defaultScreenHeightWeb: 600 + m_StereoRenderingPath: 0 + m_ActiveColorSpace: 0 + m_MTRendering: 1 + m_StackTraceTypes: 010000000100000001000000010000000100000001000000 + iosShowActivityIndicatorOnLoading: -1 + androidShowActivityIndicatorOnLoading: -1 + displayResolutionDialog: 1 + iosUseCustomAppBackgroundBehavior: 0 + iosAllowHTTPDownload: 1 + allowedAutorotateToPortrait: 1 + allowedAutorotateToPortraitUpsideDown: 1 + allowedAutorotateToLandscapeRight: 1 + allowedAutorotateToLandscapeLeft: 1 + useOSAutorotation: 1 + use32BitDisplayBuffer: 1 + preserveFramebufferAlpha: 0 + disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 0 + androidBlitType: 0 + defaultIsNativeResolution: 1 + macRetinaSupport: 1 + runInBackground: 1 + captureSingleScreen: 0 + muteOtherAudioSources: 0 + Prepare IOS For Recording: 0 + Force IOS Speakers When Recording: 0 + deferSystemGesturesMode: 0 + hideHomeButton: 0 + submitAnalytics: 1 + usePlayerLog: 1 + bakeCollisionMeshes: 0 + forceSingleInstance: 0 + resizableWindow: 0 + useMacAppStoreValidation: 0 + macAppStoreCategory: public.app-category.games + gpuSkinning: 1 + graphicsJobs: 0 + xboxPIXTextureCapture: 0 + xboxEnableAvatar: 0 + xboxEnableKinect: 0 + xboxEnableKinectAutoTracking: 0 + xboxEnableFitness: 0 + visibleInBackground: 1 + allowFullscreenSwitch: 1 + graphicsJobMode: 0 + fullscreenMode: 1 + xboxSpeechDB: 0 + xboxEnableHeadOrientation: 0 + xboxEnableGuest: 0 + xboxEnablePIXSampling: 0 + metalFramebufferOnly: 0 + xboxOneResolution: 0 + xboxOneSResolution: 0 + xboxOneXResolution: 3 + xboxOneMonoLoggingLevel: 0 + xboxOneLoggingLevel: 1 + xboxOneDisableEsram: 0 + xboxOnePresentImmediateThreshold: 0 + switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 + vulkanEnableSetSRGBWrite: 0 + m_SupportedAspectRatios: + 4:3: 1 + 5:4: 1 + 16:10: 1 + 16:9: 1 + Others: 1 + bundleVersion: 0.1 + preloadedAssets: [] + metroInputSource: 0 + wsaTransparentSwapchain: 0 + m_HolographicPauseOnTrackingLoss: 1 + xboxOneDisableKinectGpuReservation: 1 + xboxOneEnable7thCore: 1 + isWsaHolographicRemotingEnabled: 0 + vrSettings: + cardboard: + depthFormat: 0 + enableTransitionView: 0 + daydream: + depthFormat: 0 + useSustainedPerformanceMode: 0 + enableVideoLayer: 0 + useProtectedVideoMemory: 0 + minimumSupportedHeadTracking: 0 + maximumSupportedHeadTracking: 1 + hololens: + depthFormat: 1 + depthBufferSharingEnabled: 1 + oculus: + sharedDepthBuffer: 1 + dashSupport: 1 + lowOverheadMode: 0 + protectedContext: 0 + v2Signing: 0 + enable360StereoCapture: 0 + protectGraphicsMemory: 0 + enableFrameTimingStats: 0 + useHDRDisplay: 0 + m_ColorGamuts: 00000000 + targetPixelDensity: 30 + resolutionScalingMode: 0 + androidSupportedAspectRatio: 1 + androidMaxAspectRatio: 2.1 + applicationIdentifier: {} + buildNumber: {} + AndroidBundleVersionCode: 1 + AndroidMinSdkVersion: 16 + AndroidTargetSdkVersion: 0 + AndroidPreferredInstallLocation: 1 + aotOptions: + stripEngineCode: 1 + iPhoneStrippingLevel: 0 + iPhoneScriptCallOptimization: 0 + ForceInternetPermission: 0 + ForceSDCardPermission: 0 + CreateWallpaper: 0 + APKExpansionFiles: 0 + keepLoadedShadersAlive: 0 + StripUnusedMeshComponents: 1 + VertexChannelCompressionMask: 4054 + iPhoneSdkVersion: 988 + iOSTargetOSVersionString: 9.0 + tvOSSdkVersion: 0 + tvOSRequireExtendedGameController: 0 + tvOSTargetOSVersionString: 9.0 + uIPrerenderedIcon: 0 + uIRequiresPersistentWiFi: 0 + uIRequiresFullScreen: 1 + uIStatusBarHidden: 1 + uIExitOnSuspend: 0 + uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPhone58inPortraitSplashScreen: {fileID: 0} + iPhone58inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} + appleTVSplashScreen: {fileID: 0} + appleTVSplashScreen2x: {fileID: 0} + tvOSSmallIconLayers: [] + tvOSSmallIconLayers2x: [] + tvOSLargeIconLayers: [] + tvOSLargeIconLayers2x: [] + tvOSTopShelfImageLayers: [] + tvOSTopShelfImageLayers2x: [] + tvOSTopShelfImageWideLayers: [] + tvOSTopShelfImageWideLayers2x: [] + iOSLaunchScreenType: 0 + iOSLaunchScreenPortrait: {fileID: 0} + iOSLaunchScreenLandscape: {fileID: 0} + iOSLaunchScreenBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreenFillPct: 100 + iOSLaunchScreenSize: 100 + iOSLaunchScreenCustomXibPath: + iOSLaunchScreeniPadType: 0 + iOSLaunchScreeniPadImage: {fileID: 0} + iOSLaunchScreeniPadBackgroundColor: + serializedVersion: 2 + rgba: 0 + iOSLaunchScreeniPadFillPct: 100 + iOSLaunchScreeniPadSize: 100 + iOSLaunchScreeniPadCustomXibPath: + iOSUseLaunchScreenStoryboard: 0 + iOSLaunchScreenCustomStoryboardPath: + iOSDeviceRequirements: [] + iOSURLSchemes: [] + iOSBackgroundModes: 0 + iOSMetalForceHardShadows: 0 + metalEditorSupport: 1 + metalAPIValidation: 1 + iOSRenderExtraFrameOnPause: 0 + appleDeveloperTeamID: + iOSManualSigningProvisioningProfileID: + tvOSManualSigningProvisioningProfileID: + iOSManualSigningProvisioningProfileType: 0 + tvOSManualSigningProvisioningProfileType: 0 + appleEnableAutomaticSigning: 0 + iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 + appleEnableProMotion: 0 + clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea + templatePackageId: com.unity.template.3d@1.3.0 + templateDefaultScene: Assets/Scenes/SampleScene.unity + AndroidTargetArchitectures: 5 + AndroidSplashScreenScale: 0 + androidSplashScreen: {fileID: 0} + AndroidKeystoreName: + AndroidKeyaliasName: + AndroidBuildApkPerCpuArchitecture: 0 + AndroidTVCompatibility: 1 + AndroidIsGame: 1 + AndroidEnableTango: 0 + androidEnableBanner: 1 + androidUseLowAccuracyLocation: 0 + m_AndroidBanners: + - width: 320 + height: 180 + banner: {fileID: 0} + androidGamepadSupportLevel: 0 + resolutionDialogBanner: {fileID: 0} + m_BuildTargetIcons: [] + m_BuildTargetPlatformIcons: [] + m_BuildTargetBatching: + - m_BuildTarget: Standalone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: tvOS + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: iPhone + m_StaticBatching: 1 + m_DynamicBatching: 0 + - m_BuildTarget: WebGL + m_StaticBatching: 0 + m_DynamicBatching: 0 + m_BuildTargetGraphicsAPIs: + - m_BuildTarget: AndroidPlayer + m_APIs: 0b00000008000000 + m_Automatic: 1 + - m_BuildTarget: iOSSupport + m_APIs: 10000000 + m_Automatic: 1 + - m_BuildTarget: AppleTVSupport + m_APIs: 10000000 + m_Automatic: 0 + - m_BuildTarget: WebGLSupport + m_APIs: 0b000000 + m_Automatic: 1 + m_BuildTargetVRSettings: + - m_BuildTarget: Standalone + m_Enabled: 0 + m_Devices: + - Oculus + - OpenVR + m_BuildTargetEnableVuforiaSettings: [] + openGLRequireES31: 0 + openGLRequireES31AEP: 0 + m_TemplateCustomTags: {} + mobileMTRendering: + Android: 1 + iPhone: 1 + tvOS: 1 + m_BuildTargetGroupLightmapEncodingQuality: [] + m_BuildTargetGroupLightmapSettings: [] + playModeTestRunnerEnabled: 0 + runPlayModeTestAsEditModeTest: 0 + actionOnDotNetUnhandledException: 1 + enableInternalProfiler: 0 + logObjCUncaughtExceptions: 1 + enableCrashReportAPI: 0 + cameraUsageDescription: + locationUsageDescription: + microphoneUsageDescription: + switchNetLibKey: + switchSocketMemoryPoolSize: 6144 + switchSocketAllocatorPoolSize: 128 + switchSocketConcurrencyLimit: 14 + switchScreenResolutionBehavior: 2 + switchUseCPUProfiler: 0 + switchApplicationID: 0x01004b9000490000 + switchNSODependencies: + switchTitleNames_0: + switchTitleNames_1: + switchTitleNames_2: + switchTitleNames_3: + switchTitleNames_4: + switchTitleNames_5: + switchTitleNames_6: + switchTitleNames_7: + switchTitleNames_8: + switchTitleNames_9: + switchTitleNames_10: + switchTitleNames_11: + switchTitleNames_12: + switchTitleNames_13: + switchTitleNames_14: + switchPublisherNames_0: + switchPublisherNames_1: + switchPublisherNames_2: + switchPublisherNames_3: + switchPublisherNames_4: + switchPublisherNames_5: + switchPublisherNames_6: + switchPublisherNames_7: + switchPublisherNames_8: + switchPublisherNames_9: + switchPublisherNames_10: + switchPublisherNames_11: + switchPublisherNames_12: + switchPublisherNames_13: + switchPublisherNames_14: + switchIcons_0: {fileID: 0} + switchIcons_1: {fileID: 0} + switchIcons_2: {fileID: 0} + switchIcons_3: {fileID: 0} + switchIcons_4: {fileID: 0} + switchIcons_5: {fileID: 0} + switchIcons_6: {fileID: 0} + switchIcons_7: {fileID: 0} + switchIcons_8: {fileID: 0} + switchIcons_9: {fileID: 0} + switchIcons_10: {fileID: 0} + switchIcons_11: {fileID: 0} + switchIcons_12: {fileID: 0} + switchIcons_13: {fileID: 0} + switchIcons_14: {fileID: 0} + switchSmallIcons_0: {fileID: 0} + switchSmallIcons_1: {fileID: 0} + switchSmallIcons_2: {fileID: 0} + switchSmallIcons_3: {fileID: 0} + switchSmallIcons_4: {fileID: 0} + switchSmallIcons_5: {fileID: 0} + switchSmallIcons_6: {fileID: 0} + switchSmallIcons_7: {fileID: 0} + switchSmallIcons_8: {fileID: 0} + switchSmallIcons_9: {fileID: 0} + switchSmallIcons_10: {fileID: 0} + switchSmallIcons_11: {fileID: 0} + switchSmallIcons_12: {fileID: 0} + switchSmallIcons_13: {fileID: 0} + switchSmallIcons_14: {fileID: 0} + switchManualHTML: + switchAccessibleURLs: + switchLegalInformation: + switchMainThreadStackSize: 1048576 + switchPresenceGroupId: + switchLogoHandling: 0 + switchReleaseVersion: 0 + switchDisplayVersion: 1.0.0 + switchStartupUserAccount: 0 + switchTouchScreenUsage: 0 + switchSupportedLanguagesMask: 0 + switchLogoType: 0 + switchApplicationErrorCodeCategory: + switchUserAccountSaveDataSize: 0 + switchUserAccountSaveDataJournalSize: 0 + switchApplicationAttribute: 0 + switchCardSpecSize: -1 + switchCardSpecClock: -1 + switchRatingsMask: 0 + switchRatingsInt_0: 0 + switchRatingsInt_1: 0 + switchRatingsInt_2: 0 + switchRatingsInt_3: 0 + switchRatingsInt_4: 0 + switchRatingsInt_5: 0 + switchRatingsInt_6: 0 + switchRatingsInt_7: 0 + switchRatingsInt_8: 0 + switchRatingsInt_9: 0 + switchRatingsInt_10: 0 + switchRatingsInt_11: 0 + switchLocalCommunicationIds_0: + switchLocalCommunicationIds_1: + switchLocalCommunicationIds_2: + switchLocalCommunicationIds_3: + switchLocalCommunicationIds_4: + switchLocalCommunicationIds_5: + switchLocalCommunicationIds_6: + switchLocalCommunicationIds_7: + switchParentalControl: 0 + switchAllowsScreenshot: 1 + switchAllowsVideoCapturing: 1 + switchAllowsRuntimeAddOnContentInstall: 0 + switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 + switchSupportedNpadStyles: 3 + switchNativeFsCacheSize: 32 + switchIsHoldTypeHorizontal: 0 + switchSupportedNpadCount: 8 + switchSocketConfigEnabled: 0 + switchTcpInitialSendBufferSize: 32 + switchTcpInitialReceiveBufferSize: 64 + switchTcpAutoSendBufferSizeMax: 256 + switchTcpAutoReceiveBufferSizeMax: 256 + switchUdpSendBufferSize: 9 + switchUdpReceiveBufferSize: 42 + switchSocketBufferEfficiency: 4 + switchSocketInitializeEnabled: 1 + switchNetworkInterfaceManagerInitializeEnabled: 1 + switchPlayerConnectionEnabled: 1 + ps4NPAgeRating: 12 + ps4NPTitleSecret: + ps4NPTrophyPackPath: + ps4ParentalLevel: 11 + ps4ContentID: ED1633-NPXX51362_00-0000000000000000 + ps4Category: 0 + ps4MasterVersion: 01.00 + ps4AppVersion: 01.00 + ps4AppType: 0 + ps4ParamSfxPath: + ps4VideoOutPixelFormat: 0 + ps4VideoOutInitialWidth: 1920 + ps4VideoOutBaseModeInitialWidth: 1920 + ps4VideoOutReprojectionRate: 60 + ps4PronunciationXMLPath: + ps4PronunciationSIGPath: + ps4BackgroundImagePath: + ps4StartupImagePath: + ps4StartupImagesFolder: + ps4IconImagesFolder: + ps4SaveDataImagePath: + ps4SdkOverride: + ps4BGMPath: + ps4ShareFilePath: + ps4ShareOverlayImagePath: + ps4PrivacyGuardImagePath: + ps4NPtitleDatPath: + ps4RemotePlayKeyAssignment: -1 + ps4RemotePlayKeyMappingDir: + ps4PlayTogetherPlayerCount: 0 + ps4EnterButtonAssignment: 1 + ps4ApplicationParam1: 0 + ps4ApplicationParam2: 0 + ps4ApplicationParam3: 0 + ps4ApplicationParam4: 0 + ps4DownloadDataSize: 0 + ps4GarlicHeapSize: 2048 + ps4ProGarlicHeapSize: 2560 + ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ + ps4pnSessions: 1 + ps4pnPresence: 1 + ps4pnFriends: 1 + ps4pnGameCustomData: 1 + playerPrefsSupport: 0 + enableApplicationExit: 0 + resetTempFolder: 1 + restrictedAudioUsageRights: 0 + ps4UseResolutionFallback: 0 + ps4ReprojectionSupport: 0 + ps4UseAudio3dBackend: 0 + ps4SocialScreenEnabled: 0 + ps4ScriptOptimizationLevel: 0 + ps4Audio3dVirtualSpeakerCount: 14 + ps4attribCpuUsage: 0 + ps4PatchPkgPath: + ps4PatchLatestPkgPath: + ps4PatchChangeinfoPath: + ps4PatchDayOne: 0 + ps4attribUserManagement: 0 + ps4attribMoveSupport: 0 + ps4attrib3DSupport: 0 + ps4attribShareSupport: 0 + ps4attribExclusiveVR: 0 + ps4disableAutoHideSplash: 0 + ps4videoRecordingFeaturesUsed: 0 + ps4contentSearchFeaturesUsed: 0 + ps4attribEyeToEyeDistanceSettingVR: 0 + ps4IncludedModules: [] + monoEnv: + splashScreenBackgroundSourceLandscape: {fileID: 0} + splashScreenBackgroundSourcePortrait: {fileID: 0} + spritePackerPolicy: + webGLMemorySize: 256 + webGLExceptionSupport: 1 + webGLNameFilesAsHashes: 0 + webGLDataCaching: 1 + webGLDebugSymbols: 0 + webGLEmscriptenArgs: + webGLModulesDirectory: + webGLTemplate: APPLICATION:Default + webGLAnalyzeBuildSize: 0 + webGLUseEmbeddedResources: 0 + webGLCompressionFormat: 1 + webGLLinkerTarget: 1 + webGLThreadsSupport: 0 + scriptingDefineSymbols: {} + platformArchitecture: {} + scriptingBackend: {} + il2cppCompilerConfiguration: {} + managedStrippingLevel: {} + incrementalIl2cppBuild: {} + allowUnsafeCode: 0 + additionalIl2CppArgs: + scriptingRuntimeVersion: 1 + apiCompatibilityLevelPerPlatform: {} + m_RenderingPath: 1 + m_MobileRenderingPath: 1 + metroPackageName: Template_3D + metroPackageVersion: + metroCertificatePath: + metroCertificatePassword: + metroCertificateSubject: + metroCertificateIssuer: + metroCertificateNotAfter: 0000000000000000 + metroApplicationDescription: Template_3D + wsaImages: {} + metroTileShortName: + metroTileShowName: 0 + metroMediumTileShowName: 0 + metroLargeTileShowName: 0 + metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 + metroDefaultTileSize: 1 + metroTileForegroundText: 2 + metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} + metroSplashScreenUseBackgroundColor: 0 + platformCapabilities: {} + metroTargetDeviceFamilies: {} + metroFTAName: + metroFTAFileTypes: [] + metroProtocolName: + metroCompilationOverrides: 1 + XboxOneProductId: + XboxOneUpdateKey: + XboxOneSandboxId: + XboxOneContentId: + XboxOneTitleId: + XboxOneSCId: + XboxOneGameOsOverridePath: + XboxOnePackagingOverridePath: + XboxOneAppManifestOverridePath: + XboxOneVersion: 1.0.0.0 + XboxOnePackageEncryption: 0 + XboxOnePackageUpdateGranularity: 2 + XboxOneDescription: + XboxOneLanguage: + - enus + XboxOneCapability: [] + XboxOneGameRating: {} + XboxOneIsContentPackage: 0 + XboxOneEnableGPUVariability: 1 + XboxOneSockets: {} + XboxOneSplashScreen: {fileID: 0} + XboxOneAllowedProductIds: [] + XboxOnePersistentLocalStorageSize: 0 + XboxOneXTitleMemory: 8 + xboxOneScriptCompiler: 1 + XboxOneOverrideIdentityName: + vrEditorSettings: + daydream: + daydreamIconForeground: {fileID: 0} + daydreamIconBackground: {fileID: 0} + cloudServicesEnabled: + UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_PrivateKeyPath: + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: + facebookSdkVersion: 7.9.4 + facebookAppId: + facebookCookies: 1 + facebookLogging: 1 + facebookStatus: 1 + facebookXfbml: 0 + facebookFrictionlessRequests: 1 + apiCompatibilityLevel: 6 + cloudProjectId: + framebufferDepthMemorylessMode: 0 + projectName: + organizationId: + cloudEnabled: 0 + enableNativePlatformBackendsForNewInputSystem: 0 + disableOldInputManagerSupport: 0 + legacyClampBlendShapeWeights: 0 diff --git a/UXAssist/BuildAssets/ProjectSettings/ProjectVersion.txt b/UXAssist/BuildAssets/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..12efb65 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/ProjectVersion.txt @@ -0,0 +1 @@ +m_EditorVersion: 2018.4.12f1 diff --git a/UXAssist/BuildAssets/ProjectSettings/QualitySettings.asset b/UXAssist/BuildAssets/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..0621bef --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/QualitySettings.asset @@ -0,0 +1,190 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!47 &1 +QualitySettings: + m_ObjectHideFlags: 0 + serializedVersion: 5 + m_CurrentQuality: 4 + m_QualitySettings: + - serializedVersion: 2 + name: Very Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 15 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 1 + textureQuality: 1 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.3 + maximumLODLevel: 0 + particleRaycastBudget: 4 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Low + pixelLightCount: 0 + shadows: 0 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 0 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 0 + lodBias: 0.4 + maximumLODLevel: 0 + particleRaycastBudget: 16 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Medium + pixelLightCount: 1 + shadows: 1 + shadowResolution: 0 + shadowProjection: 1 + shadowCascades: 1 + shadowDistance: 20 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 0 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 0 + softParticles: 0 + softVegetation: 0 + realtimeReflectionProbes: 0 + billboardsFaceCameraPosition: 0 + vSyncCount: 1 + lodBias: 0.7 + maximumLODLevel: 0 + particleRaycastBudget: 64 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: High + pixelLightCount: 2 + shadows: 2 + shadowResolution: 1 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 2 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 2 + softParticles: 0 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1 + maximumLODLevel: 0 + particleRaycastBudget: 256 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Very High + pixelLightCount: 3 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 2 + shadowDistance: 40 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 4 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 1.5 + maximumLODLevel: 0 + particleRaycastBudget: 1024 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + - serializedVersion: 2 + name: Ultra + pixelLightCount: 4 + shadows: 2 + shadowResolution: 2 + shadowProjection: 1 + shadowCascades: 4 + shadowDistance: 150 + shadowNearPlaneOffset: 3 + shadowCascade2Split: 0.33333334 + shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + shadowmaskMode: 1 + blendWeights: 4 + textureQuality: 0 + anisotropicTextures: 1 + antiAliasing: 4 + softParticles: 1 + softVegetation: 1 + realtimeReflectionProbes: 1 + billboardsFaceCameraPosition: 1 + vSyncCount: 1 + lodBias: 2 + maximumLODLevel: 0 + particleRaycastBudget: 4096 + asyncUploadTimeSlice: 2 + asyncUploadBufferSize: 16 + resolutionScalingFixedDPIFactor: 1 + excludedTargetPlatforms: [] + m_PerPlatformDefaultQuality: + Android: 2 + Nintendo 3DS: 5 + Nintendo Switch: 5 + PS4: 5 + PSP2: 2 + Standalone: 5 + Tizen: 2 + WebGL: 3 + WiiU: 5 + Windows Store Apps: 5 + XboxOne: 5 + iPhone: 2 + tvOS: 2 diff --git a/UXAssist/BuildAssets/ProjectSettings/TagManager.asset b/UXAssist/BuildAssets/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..17cb803 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/TagManager.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!78 &1 +TagManager: + serializedVersion: 2 + tags: [] + layers: + - Default + - TransparentFX + - Ignore Raycast + - + - Water + - UI + - + - + - PostProcessing + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + m_SortingLayers: + - name: Default + uniqueID: 0 + locked: 0 diff --git a/UXAssist/BuildAssets/ProjectSettings/TimeManager.asset b/UXAssist/BuildAssets/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..06bcc6d --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/TimeManager.asset @@ -0,0 +1,9 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: 0.02 + Maximum Allowed Timestep: 0.1 + m_TimeScale: 1 + Maximum Particle Timestep: 0.03 diff --git a/UXAssist/BuildAssets/ProjectSettings/UnityConnectSettings.asset b/UXAssist/BuildAssets/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..fa0b146 --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/UnityConnectSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!310 &1 +UnityConnectSettings: + m_ObjectHideFlags: 0 + serializedVersion: 1 + m_Enabled: 0 + m_TestMode: 0 + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com + m_TestInitMode: 0 + CrashReportingSettings: + m_EventUrl: https://perf-events.cloud.unity3d.com + m_Enabled: 0 + m_LogBufferSize: 10 + m_CaptureEditorExceptions: 1 + UnityPurchasingSettings: + m_Enabled: 0 + m_TestMode: 0 + UnityAnalyticsSettings: + m_Enabled: 0 + m_TestMode: 0 + m_InitializeOnStartup: 1 + UnityAdsSettings: + m_Enabled: 0 + m_InitializeOnStartup: 1 + m_TestMode: 0 + m_IosGameId: + m_AndroidGameId: + m_GameIds: {} + m_GameId: + PerformanceReportingSettings: + m_Enabled: 0 diff --git a/UXAssist/BuildAssets/ProjectSettings/VFXManager.asset b/UXAssist/BuildAssets/ProjectSettings/VFXManager.asset new file mode 100644 index 0000000..6e0eaca --- /dev/null +++ b/UXAssist/BuildAssets/ProjectSettings/VFXManager.asset @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!937362698 &1 +VFXManager: + m_ObjectHideFlags: 0 + m_IndirectShader: {fileID: 0} + m_CopyBufferShader: {fileID: 0} + m_SortShader: {fileID: 0} + m_RenderPipeSettingsPath: + m_FixedTimeStep: 0.016666668 + m_MaxDeltaTime: 0.05 diff --git a/UXAssist/Common/WinApi.cs b/UXAssist/Common/WinApi.cs index d3eb19e..2eccee5 100644 --- a/UXAssist/Common/WinApi.cs +++ b/UXAssist/Common/WinApi.cs @@ -74,6 +74,9 @@ public static class WinApi [DllImport("user32", ExactSpelling = true)] public static extern bool SetWindowPos(IntPtr hwnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, int flags); + [DllImport("user32", CharSet = CharSet.Unicode)] + public static extern bool SetWindowText(IntPtr hwnd, string lpString); + [DllImport("user32", ExactSpelling = true)] public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool bRepaint); } \ No newline at end of file diff --git a/UXAssist/DysonSpherePatch.cs b/UXAssist/DysonSpherePatch.cs index db22e49..bf479e6 100644 --- a/UXAssist/DysonSpherePatch.cs +++ b/UXAssist/DysonSpherePatch.cs @@ -2,6 +2,7 @@ using System.Reflection.Emit; using BepInEx.Configuration; using HarmonyLib; +using UXAssist.Common; namespace UXAssist; @@ -13,6 +14,7 @@ public static class DysonSpherePatch public static void Init() { + I18N.Add("[UXAssist] No node to fill", "[UXAssist] No node to fill", "[UXAssist] 无可建造节点"); _dysonSpherePatch ??= Harmony.CreateAndPatchAll(typeof(DysonSpherePatch)); StopEjectOnNodeCompleteEnabled.SettingChanged += (_, _) => StopEjectOnNodeComplete.Enable(StopEjectOnNodeCompleteEnabled.Value); OnlyConstructNodesEnabled.SettingChanged += (_, _) => OnlyConstructNodes.Enable(OnlyConstructNodesEnabled.Value); @@ -272,6 +274,35 @@ public static class DysonSpherePatch ); return matcher.InstructionEnumeration(); } + + [HarmonyTranspiler] + [HarmonyPatch(typeof(UIEjectorWindow), nameof(UIEjectorWindow._OnUpdate))] + static IEnumerable UIEjectorWindow__OnUpdate_Transpiler(IEnumerable instructions, ILGenerator generator) + { + var matcher = new CodeMatcher(instructions, generator); + var label1 = generator.DefineLabel(); + var label2 = generator.DefineLabel(); + matcher.MatchForward(false, + // this.stateText.text = "轨道未设置".Translate(); + new CodeMatch(OpCodes.Ldstr, "待机"), + new CodeMatch(OpCodes.Call, AccessTools.Method(typeof(Localization), nameof(Localization.Translate))), + new CodeMatch(OpCodes.Callvirt, AccessTools.PropertySetter(typeof(UnityEngine.UI.Text), nameof(UnityEngine.UI.Text.text))) + ).InsertAndAdvance( + // if (StopEjectOnNodeComplete.AnyNodeForAbsorb(this.starData.index)) + new CodeInstruction(OpCodes.Ldarg_0), + new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(UIEjectorWindow), nameof(UIEjectorWindow.factorySystem))), + new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(FactorySystem), nameof(FactorySystem.planet))), + new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(PlanetData), nameof(PlanetData.star))), + new CodeInstruction(OpCodes.Ldfld, AccessTools.Field(typeof(StarData), nameof(StarData.index))), + new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(StopEjectOnNodeComplete), nameof(StopEjectOnNodeComplete.AnyNodeForAbsorb))), + new CodeInstruction(OpCodes.Brfalse, label1) + ).Advance(1).InsertAndAdvance( + new CodeInstruction(OpCodes.Br, label2), + new CodeInstruction(OpCodes.Ldstr, "[UXAssist] No node to fill").WithLabels(label1), + new CodeInstruction(OpCodes.Call, AccessTools.Method(typeof(Localization), nameof(Localization.Translate))) + ).Labels.Add(label2); + return matcher.InstructionEnumeration(); + } } private static class OnlyConstructNodes @@ -303,7 +334,7 @@ public static class DysonSpherePatch sphere.PickAutoNode(); } } - + [HarmonyTranspiler] [HarmonyPatch(typeof(DysonNode), nameof(DysonNode.spReqOrder), MethodType.Getter)] private static IEnumerable DysonNode_spReqOrder_Getter_Transpiler(IEnumerable instructions, ILGenerator generator) diff --git a/UXAssist/GamePatch.cs b/UXAssist/GamePatch.cs index b0d2dcc..aedd281 100644 --- a/UXAssist/GamePatch.cs +++ b/UXAssist/GamePatch.cs @@ -11,7 +11,7 @@ namespace UXAssist; public static class GamePatch { private const string GameWindowClass = "UnityWndClass"; - private const string GameWindowTitle = "Dyson Sphere Program"; + private static string _gameWindowTitle = "Dyson Sphere Program"; public static ConfigEntry EnableWindowResizeEnabled; public static ConfigEntry LoadLastWindowRectEnabled; @@ -22,6 +22,28 @@ public static class GamePatch public static void Init() { + // Get profile name from command line arguments, and set window title accordingly + var args = Environment.GetCommandLineArgs(); + for (var i = 0; i < args.Length; i++) + { + if (args[i] != "--doorstop-target") continue; + var arg = args[i + 1]; + const string doorstopPathSuffix = @"\BepInEx\core\BepInEx.Preloader.dll"; + if (!arg.EndsWith(doorstopPathSuffix, StringComparison.OrdinalIgnoreCase)) + break; + arg = arg.Substring(0, arg.Length - doorstopPathSuffix.Length); + const string profileSuffix = @"\profiles\"; + var index = arg.LastIndexOf(profileSuffix, StringComparison.OrdinalIgnoreCase); + if (index < 0) + break; + arg = arg.Substring(index + profileSuffix.Length); + var wnd = WinApi.FindWindow(GameWindowClass, _gameWindowTitle); + if (wnd == IntPtr.Zero) return; + _gameWindowTitle = $"Dyson Sphere Program - {arg}"; + WinApi.SetWindowText(wnd, _gameWindowTitle); + break; + } + EnableWindowResizeEnabled.SettingChanged += (_, _) => EnableWindowResize.Enable(EnableWindowResizeEnabled.Value); LoadLastWindowRectEnabled.SettingChanged += (_, _) => LoadLastWindowRect.Enable(LoadLastWindowRectEnabled.Value); // AutoSaveOptEnabled.SettingChanged += (_, _) => AutoSaveOpt.Enable(AutoSaveOptEnabled.Value); @@ -46,7 +68,7 @@ public static class GamePatch [HarmonyPrefix, HarmonyPatch(typeof(GameMain), nameof(GameMain.HandleApplicationQuit))] private static void GameMain_HandleApplicationQuit_Prefix() { - var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle); + var wnd = WinApi.FindWindow(GameWindowClass, _gameWindowTitle); if (wnd == IntPtr.Zero) return; WinApi.GetWindowRect(wnd, out var rect); LastWindowRect.Value = new Vector4(rect.Left, rect.Top, Screen.width, Screen.height); @@ -56,7 +78,7 @@ public static class GamePatch { public static void Enable(bool on) { - var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle); + var wnd = WinApi.FindWindow(GameWindowClass, _gameWindowTitle); if (wnd == IntPtr.Zero) return; if (on) WinApi.SetWindowLong(wnd, (int)WindowLongFlags.GWL_STYLE, @@ -131,7 +153,7 @@ public static class GamePatch private static void MoveWindowPosition() { if (Screen.fullScreenMode is FullScreenMode.ExclusiveFullScreen or FullScreenMode.FullScreenWindow or FullScreenMode.MaximizedWindow || GameMain.isRunning) return; - var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle); + var wnd = WinApi.FindWindow(GameWindowClass, _gameWindowTitle); if (wnd == IntPtr.Zero) return; var rect = LastWindowRect.Value; if (rect.z == 0f && rect.w == 0f) return; @@ -166,7 +188,7 @@ public static class GamePatch { if (_loaded || Screen.fullScreenMode is FullScreenMode.ExclusiveFullScreen or FullScreenMode.FullScreenWindow or FullScreenMode.MaximizedWindow) return; _loaded = true; - var wnd = WinApi.FindWindow(GameWindowClass, GameWindowTitle); + var wnd = WinApi.FindWindow(GameWindowClass, _gameWindowTitle); if (wnd == IntPtr.Zero) return; var rect = LastWindowRect.Value; if (rect.z == 0f && rect.w == 0f) return; diff --git a/UXAssist/README.md b/UXAssist/README.md index bd11789..a389901 100644 --- a/UXAssist/README.md +++ b/UXAssist/README.md @@ -173,7 +173,7 @@ - It will speed down when approaching the target planet, to avoid overshooting + Dyson Sphere - Stop ejectors when available nodes are all filled up - - Construct only nodes but frames + - Construct only structure points but frames - Re-initialize Dyson Spheres - Quick dismantle Dyson Shells + Tech diff --git a/UXAssist/TechPatch.cs b/UXAssist/TechPatch.cs index 9d85960..e0d0dae 100644 --- a/UXAssist/TechPatch.cs +++ b/UXAssist/TechPatch.cs @@ -1,7 +1,10 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using System.Reflection.Emit; using BepInEx.Configuration; using HarmonyLib; +using UnityEngine; using UXAssist.Common; namespace UXAssist; @@ -9,16 +12,20 @@ namespace UXAssist; public static class TechPatch { public static ConfigEntry SorterCargoStackingEnabled; + public static ConfigEntry BatchBuyoutTechEnabled; public static void Init() { I18N.Add("分拣器运货量", "Sorter Mk.III cargo stacking : ", "极速分拣器每次可运送 "); SorterCargoStackingEnabled.SettingChanged += (_, _) => SorterCargoStacking.Enable(SorterCargoStackingEnabled.Value); + BatchBuyoutTechEnabled.SettingChanged += (_, _) => BatchBuyoutTech.Enable(BatchBuyoutTechEnabled.Value); SorterCargoStacking.Enable(SorterCargoStackingEnabled.Value); + BatchBuyoutTech.Enable(BatchBuyoutTechEnabled.Value); } public static void Uninit() { + BatchBuyoutTech.Enable(false); SorterCargoStacking.Enable(false); } @@ -106,4 +113,306 @@ public static class TechPatch TryPatchProto(true); } } + + private static class BatchBuyoutTech + { + private static Harmony _patch; + + public static void Enable(bool on) + { + if (on) + { + _patch ??= Harmony.CreateAndPatchAll(typeof(BatchBuyoutTech)); + return; + } + + _patch?.UnpatchSelf(); + _patch = null; + } + + private static void GenerateTechList(GameHistoryData history, int techId, List techIdList) + { + var techProto = LDB.techs.Select(techId); + if (techProto == null || !techProto.Published) return; + var flag = true; + for (var i = 0; i < 2; i++) + { + var array = techProto.PreTechs; + if (i == 1) + { + array = techProto.PreTechsImplicit; + } + for (var j = 0; j < array.Length; j++) + { + if (!history.techStates.ContainsKey(array[j]) || history.techStates[array[j]].unlocked) continue; + if (history.techStates[array[j]].maxLevel > history.techStates[array[j]].curLevel) + { + flag = false; + } + GenerateTechList(history, array[j], techIdList); + } + } + if (history.techStates.ContainsKey(techId) && !history.techStates[techId].unlocked && flag) + { + techIdList.Add(techId); + } + } + + + private static void CheckTechUnlockProperties(GameHistoryData history, TechProto techProto, int[] properties, List> techList, int maxLevel = 10000) + { + var techStates = history.techStates; + var techID = techProto.ID; + if (techStates == null || !techStates.TryGetValue(techID, out var value)) return; + if (value.unlocked) return; + + var maxLvl = Math.Min(maxLevel < 0 ? value.curLevel - maxLevel - 1 : maxLevel, value.maxLevel); + + foreach (var preid in techProto.PreTechs) + { + var preProto = LDB.techs.Select(preid); + if (preProto != null) + CheckTechUnlockProperties(history, preProto, properties, techList, techProto.PreTechsMax ? 10000 : preProto.Level); + } + foreach (var preid in techProto.PreTechsImplicit) + { + var preProto = LDB.techs.Select(preid); + if (preProto != null) + CheckTechUnlockProperties(history, preProto, properties, techList, techProto.PreTechsMax ? 10000 : preProto.Level); + } + + if (value.curLevel < techProto.Level) value.curLevel = techProto.Level; + techList.Add(new Tuple(techProto, value.curLevel, techProto.Level)); + while (value.curLevel <= maxLvl) + { + if (techProto.PropertyOverrideItemArray != null) + { + var propertyOverrideItemArray = techProto.PropertyOverrideItemArray; + for (var i = 0; i < propertyOverrideItemArray.Length; i++) + { + var id = propertyOverrideItemArray[i].id; + var count = (float)propertyOverrideItemArray[i].count; + var ratio = Mathf.Clamp01((float)((double)value.hashUploaded / value.hashNeeded)); + var consume = Mathf.CeilToInt(count * (1f - ratio)); + properties[id - 6001] += consume; + } + } + else + { + for (var j = 0; j < techProto.itemArray.Length; j++) + { + var id = techProto.itemArray[j].ID; + var consume = (int)(techProto.ItemPoints[j] * (value.hashNeeded - value.hashUploaded) / 3600L); + properties[id - 6001] += consume; + } + } + value.curLevel++; + value.hashUploaded = 0; + value.hashNeeded = techProto.GetHashNeeded(value.curLevel); + } + } + + private static int UnlockTechRecursiveImpl(GameHistoryData history, TechProto techProto, int maxLevel = 10000) + { + var techStates = history.techStates; + var techID = techProto.ID; + if (techStates == null || !techStates.TryGetValue(techID, out var value)) + { + return -1; + } + + if (value.unlocked) + { + return -1; + } + + var maxLvl = Math.Min(maxLevel < 0 ? value.curLevel - maxLevel - 1 : maxLevel, value.maxLevel); + + foreach (var preid in techProto.PreTechs) + { + var preProto = LDB.techs.Select(preid); + if (preProto != null) + UnlockTechRecursiveImpl(history, preProto, techProto.PreTechsMax ? 10000 : preProto.Level); + } + foreach (var preid in techProto.PreTechsImplicit) + { + var preProto = LDB.techs.Select(preid); + if (preProto != null) + UnlockTechRecursiveImpl(history, preProto, techProto.PreTechsMax ? 10000 : preProto.Level); + } + + if (value.curLevel < techProto.Level) value.curLevel = techProto.Level; + while (value.curLevel <= maxLvl) + { + if (value.curLevel == 0) + { + foreach (var recipe in techProto.UnlockRecipes) + { + history.UnlockRecipe(recipe); + } + } + + for (var j = 0; j < techProto.UnlockFunctions.Length; j++) + { + history.UnlockTechFunction(techProto.UnlockFunctions[j], techProto.UnlockValues[j], value.curLevel); + } + + for (var k = 0; k < techProto.AddItems.Length; k++) + { + history.GainTechAwards(techProto.AddItems[k], techProto.AddItemCounts[k]); + } + + value.curLevel++; + } + + value.unlocked = maxLvl >= value.maxLevel; + value.curLevel = value.unlocked ? maxLvl : maxLvl + 1; + value.hashNeeded = techProto.GetHashNeeded(value.curLevel); + value.hashUploaded = value.unlocked ? value.hashNeeded : 0; + techStates[techID] = value; + return maxLvl; + } + + private static bool UnlockTechRecursive(TechProto techProto, int maxLevel = 10000) + { + if (techProto == null) return false; + var history = GameMain.history; + var ulvl = UnlockTechRecursiveImpl(history, techProto, maxLevel); + if (ulvl < 0) return false; + history.RegFeatureKey(1000100); + history.NotifyTechUnlock(techProto.ID, ulvl); + return true; + } + + [HarmonyTranspiler] + [HarmonyPatch(typeof(UITechNode), nameof(UITechNode.UpdateInfoDynamic))] + private static IEnumerable UITechNode_UpdateInfoDynamic_Transpiler(IEnumerable instructions) + { + var matcher = new CodeMatcher(instructions); + matcher.MatchForward(false, + new CodeMatch(OpCodes.Ldsfld, AccessTools.Field(typeof(UITechTree), nameof(UITechTree.showProperty))), + new CodeMatch(ci => ci.IsLdloc()), + new CodeMatch(OpCodes.And) + ).Advance(1).SetAndAdvance(OpCodes.Ldloc_3, null).InsertAndAdvance( + new CodeInstruction(OpCodes.Ldc_I4_0), + new CodeInstruction(OpCodes.Ceq) + ); + return matcher.InstructionEnumeration(); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(UITechNode), nameof(UITechNode.OnBuyoutButtonClick))] + private static bool UITechNode_OnBuyoutButtonClick_Prefix(UITechNode __instance) + { + if (GameMain.isFullscreenPaused) + { + return false; + } + var techProto = __instance.techProto; + if (techProto == null) return false; + var properties = new int[6]; + List> techList = new(); + var history = GameMain.history; + var maxLevel = -1; + CheckTechUnlockProperties(history, techProto, properties, techList, maxLevel); + var propertySystem = DSPGame.propertySystem; + var clusterSeedKey = history.gameData.GetClusterSeedKey(); + var enough = true; + for (var i = 0; i < 6; i++) + { + if (propertySystem.GetItemAvaliableProperty(clusterSeedKey, 6001 + i) >= properties[i]) continue; + enough = false; + break; + } + if (!enough) + { + UIRealtimeTip.Popup("元数据不足".Translate(), true, 0); + return false; + } + + if (!history.hasUsedPropertyBanAchievement) + { + UIMessageBox.Show("初次使用元数据标题".Translate(), "初次使用元数据描述".Translate(), "取消".Translate(), "确定".Translate(), 2, null, DoUnlockFunc); + return false; + } + + DoUnlockFunc(); + return false; + + void DoUnlockFunc() + { + if (techList.Count <= 1) + { + DoUnlockFuncInternal(); + return; + } + var msg = "要使用元数据买断以下科技吗?"; + + if (techList.Count <= 10) + { + foreach (var tuple in techList) + { + AddToMsg(ref msg, tuple); + } + } + else + { + for (var i = 0; i < 5; i++) + { + AddToMsg(ref msg, techList[i]); + } + msg += " ...\n"; + for (var i = techList.Count - 5; i < techList.Count; i++) + { + AddToMsg(ref msg, techList[i]); + } + } + + msg += "\n\n"; + msg += "以下是买断所需元数据:"; + for (var i = 0; i < 6; i++) + { + var itemCount = properties[i]; + if (itemCount <= 0) continue; + msg += $"\n {LDB.items.Select(6001 + i).propertyName}x{itemCount}"; + } + UIMessageBox.Show("批量买断科技", msg, "取消".Translate(), "确定".Translate(), 2, null, DoUnlockFuncInternal); + return; + + void AddToMsg(ref string str, Tuple tuple) + { + if (tuple.Item2 == tuple.Item3) + { + if (tuple.Item2 <= 0) + str += $"\n {tuple.Item1.name}"; + else + str += $"\n {tuple.Item1.name}{"杠等级".Translate()}{tuple.Item2}"; + } + else + str += $"\n {tuple.Item1.name}{"杠等级".Translate()}{tuple.Item2}->{tuple.Item3}"; + } + } + + void DoUnlockFuncInternal() + { + UnlockTechRecursive(__instance.techProto, maxLevel); + history.VarifyTechQueue(); + if (history.currentTech != history.techQueue[0]) + { + history.currentTech = history.techQueue[0]; + } + var mainPlayer = GameMain.mainPlayer; + for (var i = 0; i < 6; i++) + { + var itemCount = properties[i]; + if (itemCount <= 0) continue; + var itemId = 6001 + i; + propertySystem.AddItemConsumption(clusterSeedKey, itemId, itemCount); + history.AddPropertyItemConsumption(itemId, itemCount, true); + mainPlayer.mecha.AddProductionStat(itemId, itemCount, mainPlayer.nearestFactory); + mainPlayer.mecha.AddConsumptionStat(itemId, itemCount, mainPlayer.nearestFactory); + } + } + } + } } diff --git a/UXAssist/UIConfigWindow.cs b/UXAssist/UIConfigWindow.cs index 4c98c9d..9b89dfe 100644 --- a/UXAssist/UIConfigWindow.cs +++ b/UXAssist/UIConfigWindow.cs @@ -58,13 +58,14 @@ public static class UIConfigWindow I18N.Add("Maximum count to build", "Maximum count to build", "最大建造数量"); I18N.Add("max", "max", "最大"); I18N.Add("Stop ejectors when available nodes are all filled up", "Stop ejectors when available nodes are all filled up", "可用节点全部造完时停止弹射"); - I18N.Add("Construct only nodes but frames", "Construct only nodes but frames", "只造节点不造框架"); + I18N.Add("Construct only structure points but frames", "Construct only structure points but frames", "只造节点不造框架"); I18N.Add("Initialize Dyson Sphere", "Initialize Dyson Sphere", "初始化戴森球"); I18N.Add("Initialize Dyson Sphere Confirm", "This operation will destroy all layers on this dyson sphere, are you sure?", "此操作将会摧毁戴森球上的所有层级,确定吗?"); I18N.Add("Click to dismantle selected layer", "Click to dismantle selected layer", "点击拆除对应的戴森壳"); I18N.Add("Dismantle selected layer", "Dismantle selected layer", "拆除选中的戴森壳"); I18N.Add("Dismantle selected layer Confirm", "This operation will dismantle selected layer, are you sure?", "此操作将会拆除选中的戴森壳,确定吗?"); I18N.Add("Restore upgrades of \"Sorter Cargo Stacking\" on panel", "Restore upgrades of \"Sorter Cargo Stacking\" on panel", "在升级面板上恢复\"分拣器货物叠加\"的升级"); + I18N.Add("Buy out techs with their prerequisites", "Buy out techs with their prerequisites", "购买科技也同时购买所有前置科技"); I18N.Add("Set \"Sorter Cargo Stacking\" to unresearched state", "Set \"Sorter Cargo Stacking\" to unresearched state", "将\"分拣器货物叠加\"设为未研究状态"); I18N.Add("Open Dark Fog Communicator", "Open Dark Fog Communicator", "打开黑雾通讯器"); I18N.Apply(); @@ -259,6 +260,8 @@ public static class UIConfigWindow } }); y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab5, TechPatch.BatchBuyoutTechEnabled, "Buy out techs with their prerequisites"); + y += 36f; y += 36f; wnd.AddButton(x, y, 300f, tab5, "Open Dark Fog Communicator", 16, "button-open-df-communicator", () => { diff --git a/UXAssist/UXAssist.cs b/UXAssist/UXAssist.cs index dde7d13..a33f164 100644 --- a/UXAssist/UXAssist.cs +++ b/UXAssist/UXAssist.cs @@ -94,6 +94,8 @@ public class UXAssist : BaseUnityPlugin PlayerPatch.DistanceToWarp = Config.Bind("Player", "DistanceToWarp", 5.0, "Distance to warp (in AU)"); TechPatch.SorterCargoStackingEnabled = Config.Bind("Tech", "SorterCargoStacking", false, "Restore upgrades of `Sorter Cargo Stacking` on panel"); + TechPatch.BatchBuyoutTechEnabled = Config.Bind("Tech", "BatchBuyoutTech", false, + "Can buy out techs with their prerequisites"); DysonSpherePatch.StopEjectOnNodeCompleteEnabled = Config.Bind("DysonSphere", "StopEjectOnNodeComplete", false, "Stop ejectors when available nodes are all filled up"); DysonSpherePatch.OnlyConstructNodesEnabled = Config.Bind("DysonSphere", "OnlyConstructNodes", false, diff --git a/UXAssist/UXAssist.csproj b/UXAssist/UXAssist.csproj index d373e15..05b61fe 100644 --- a/UXAssist/UXAssist.csproj +++ b/UXAssist/UXAssist.csproj @@ -19,12 +19,17 @@ - + + + + + + - + diff --git a/UXAssist/package/uxassist.assetbundle b/UXAssist/package/uxassist.assetbundle new file mode 100644 index 0000000000000000000000000000000000000000..897a5fcbff9e17bc5452c7d0ca04963c7ee9ff71 GIT binary patch literal 28832 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