diff --git a/Patches/AITrafficLight_EnableGreenLight_Patch.cs b/Patches/AITrafficLight_EnableGreenLight_Patch.cs new file mode 100644 index 0000000..abb3c29 --- /dev/null +++ b/Patches/AITrafficLight_EnableGreenLight_Patch.cs @@ -0,0 +1,7 @@ +using HarmonyLib; +using TurnTheGameOn.SimpleTrafficSystem; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(AITrafficLight), "EnableGreenLight")] public static class AITrafficLight_EnableGreenLight_Patch { public static void Postfix(AITrafficLight __instance) => __instance.DisableAllLights(); } +} diff --git a/Patches/AITrafficLight_EnableRedLight_Patch.cs b/Patches/AITrafficLight_EnableRedLight_Patch.cs new file mode 100644 index 0000000..05fb602 --- /dev/null +++ b/Patches/AITrafficLight_EnableRedLight_Patch.cs @@ -0,0 +1,7 @@ +using HarmonyLib; +using TurnTheGameOn.SimpleTrafficSystem; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(AITrafficLight), "EnableRedLight")] public static class AITrafficLight_EnableRedLight_Patch { public static void Postfix(AITrafficLight __instance) => __instance.DisableAllLights(); } +} diff --git a/Patches/AITrafficLight_EnableYellowLight_Patch.cs b/Patches/AITrafficLight_EnableYellowLight_Patch.cs new file mode 100644 index 0000000..5ae047b --- /dev/null +++ b/Patches/AITrafficLight_EnableYellowLight_Patch.cs @@ -0,0 +1,7 @@ +using HarmonyLib; +using TurnTheGameOn.SimpleTrafficSystem; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(AITrafficLight), "EnableYellowLight")] public static class AITrafficLight_EnableYellowLight_Patch { public static void Postfix(AITrafficLight __instance) => __instance.DisableAllLights(); } +} diff --git a/Patches/CinemachineVirtualCamera_CalculateNewState_Patch.cs b/Patches/CinemachineVirtualCamera_CalculateNewState_Patch.cs new file mode 100644 index 0000000..da0d218 --- /dev/null +++ b/Patches/CinemachineVirtualCamera_CalculateNewState_Patch.cs @@ -0,0 +1,14 @@ +using Cinemachine; +using HarmonyLib; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(CinemachineVirtualCamera), "CalculateNewState")] + public static class CinemachineVirtualCamera_CalculateNewState_Patch + { + public static void Postfix(ref CameraState __result) + { + __result.Lens.FarClipPlane = 1500; + } + } +} diff --git a/Patches/MainMenuManager_Awake_Patch.cs b/Patches/MainMenuManager_Awake_Patch.cs new file mode 100644 index 0000000..d542bb7 --- /dev/null +++ b/Patches/MainMenuManager_Awake_Patch.cs @@ -0,0 +1,21 @@ +using HarmonyLib; +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(MainMenuManager), "Awake")] + public static class MainMenuManager_Awake_Patch + { + public static void Postfix(MainMenuManager __instance) + { + var bg = new Texture2D(1920, 1080); + bg.LoadImage(Properties.Resources.bg); + var image = __instance.gameObject.transform.GetChild(0).gameObject.GetComponent(); + Console.WriteLine(image == null); + image.sprite = Sprite.Create(bg, new Rect(0, 0, bg.width, bg.height), new Vector2(0.5f, 0.5f)); ; + __instance.gameObject.transform.GetChild(1).gameObject.SetActive(false); + } + } +} diff --git a/Patches/NPCTrafficManager_SpawnNPC_Patch.cs b/Patches/NPCTrafficManager_SpawnNPC_Patch.cs new file mode 100644 index 0000000..8d90477 --- /dev/null +++ b/Patches/NPCTrafficManager_SpawnNPC_Patch.cs @@ -0,0 +1,16 @@ +using HarmonyLib; +using System.Linq; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(NPCTrafficManager), "SpawnNPC")] + public static class NPCTrafficManager_SpawnNPC_Patch + { + public static void Postfix(NPCTrafficManager __instance) + { + WaypointNavigator npc = __instance.m_ActiveNPCs.Last(); + + npc.gameObject.SetActive(false); + } + } +} diff --git a/Patches/SectionManager_UpgradeStore_Patch.cs b/Patches/SectionManager_UpgradeStore_Patch.cs new file mode 100644 index 0000000..ab29dea --- /dev/null +++ b/Patches/SectionManager_UpgradeStore_Patch.cs @@ -0,0 +1,13 @@ +using HarmonyLib; + +namespace SpacemarketSimulator.Patches +{ + [HarmonyPatch(typeof(SectionManager), "UpgradeStore")] + public static class SectionManager_UpgradeStore_Patch + { + public static void Postfix() + { + //Plugin.DisableStandardEnvironment(); + } + } +} diff --git a/Plugin.cs b/Plugin.cs index 8f0cefd..069fb73 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -1,7 +1,13 @@ using BepInEx; +using BepInEx.Configuration; +using BepInEx.Logging; using HarmonyLib; +using MyBox; +using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; +using UnityEngine.Assertions.Must; using UnityEngine.SceneManagement; namespace SpacemarketSimulator @@ -9,18 +15,25 @@ namespace SpacemarketSimulator [BepInPlugin(PluginInfo.PLUGIN_GUID, PluginInfo.PLUGIN_NAME, PluginInfo.PLUGIN_VERSION)] public class Plugin : BaseUnityPlugin { - public const string SpaceShader = "Universal Render Pipeline/Lit"; + public static Vector3 NPCArrivalPoint = new Vector3(6, -0.06f, 3); + public static ConfigEntry SpaceShader; + public static ConfigEntry MoveSkyboxWithPlayer; + public static ManualLogSource SLogger; private void Awake() { + SLogger = Logger; Logger.LogInfo($"Plugin {PluginInfo.PLUGIN_GUID} is loaded! Applying patch..."); Harmony harmony = new Harmony(PluginInfo.PLUGIN_GUID); harmony.PatchAll(); - foreach(var shader in Resources.FindObjectsOfTypeAll()) + foreach (var shader in Resources.FindObjectsOfTypeAll()) { Logger.LogInfo("Available shader: " + shader.name); } + SpaceShader = Config.Bind("", "Space Shader", "Universal Render Pipeline/Particles/Unlit"); + MoveSkyboxWithPlayer = Config.Bind("", "Move Skybox with Player", true); + SceneManager.sceneLoaded += SceneManager_sceneLoaded; } private Dictionary TextureCache { get; set; } = new(); @@ -36,8 +49,8 @@ namespace SpacemarketSimulator } private void ApplySkybox(Transform container) { - float skyboxDistance = 20; - float skyboxScale = 4; + float skyboxDistance = 500; + float skyboxScale = 100; PrimitiveType type = PrimitiveType.Plane; var xmPlane = GameObject.CreatePrimitive(type); @@ -60,7 +73,11 @@ namespace SpacemarketSimulator { x.plane.transform.SetParent(container); var rend = x.plane.GetComponent(); - rend.material.shader = Shader.Find(SpaceShader); + rend.material.shader = Shader.Find(Plugin.SpaceShader.Value); + rend.allowOcclusionWhenDynamic = false; + rend.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; + rend.receiveShadows = false; + SpaceShader.SettingChanged += (a, b) => { try { rend.material.shader = Shader.Find(SpaceShader.Value); } catch (Exception e) { Logger.LogError(e); } }; rend.material.mainTexture = LoadTexture(x.texture); }); @@ -71,45 +88,94 @@ namespace SpacemarketSimulator var yptd = TransformDefiner.AddToGameObject(ypPlane); yptd.position = new Vector3(0, skyboxDistance - 0.001f, 0); - yptd.eulerAngles = new Vector3(0, 90, 0); - yptd.localScale = new Vector3(skyboxScale, 1, -skyboxScale); + yptd.eulerAngles = new Vector3(180, -90, 0); + yptd.localScale = new Vector3(-skyboxScale, 1, -skyboxScale); var xmtd = TransformDefiner.AddToGameObject(xmPlane); - xmtd.position = new Vector3(-skyboxDistance, 0, 0); + xmtd.position = new Vector3(-skyboxDistance + 0.001f, 0, 0); xmtd.eulerAngles = new Vector3(90, 0, 90); - xmtd.localScale = new Vector3(skyboxScale, 1, -skyboxScale); + xmtd.localScale = new Vector3(skyboxScale, -1, -skyboxScale); var xptd = TransformDefiner.AddToGameObject(xpPlane); xptd.localScale = new Vector3(skyboxScale, 1, skyboxScale); - xptd.position = new Vector3(skyboxDistance, 0, 0); + xptd.position = new Vector3(skyboxDistance - 0.001f, 0, 0); xptd.eulerAngles = new Vector3(-90, 0, 90); var zmtd = TransformDefiner.AddToGameObject(zmPlane); - zmtd.position = new Vector3(0, 0, -skyboxDistance); - zmtd.eulerAngles = new Vector3(90, 0, 180); - zmtd.localScale = new Vector3(skyboxScale, 1, -skyboxScale); + zmtd.position = new Vector3(0, 0, -skyboxDistance + 0.001f); + zmtd.eulerAngles = new Vector3(90, 180, 180); + zmtd.localScale = new Vector3(-skyboxScale, 1, -skyboxScale); var zptd = TransformDefiner.AddToGameObject(zpPlane); zptd.localScale = new Vector3(skyboxScale, 1, skyboxScale); - zptd.position = new Vector3(0, 0, skyboxDistance); + zptd.position = new Vector3(0, 0, skyboxDistance - 0.001f); zptd.eulerAngles = new Vector3(-90, 0, 0); } public void Update() { - if(Input.GetKeyDown(KeyCode.Backspace)) + if (Input.GetKeyDown(KeyCode.Backspace)) { Player.transform.position = new Vector3(4.52f, -0.06f, 4.85f); } } - private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1) + public static GameObject DisableStandardEnvironment() { + string[] piecesToLeaveEnabled = new string[] + { + "Sidewalk_4x4_A_01 (1)", + "Sidewalk_4x4_A_01 (3)", + "Sidewalk_4x2_A_02 (3)", + "Sidewalk_4x2_A_01 (2)", + "Sidewalk_4x4_A_02 (3)", + "Sidewalk_4x4_A_02 (1)", + "Descent_Store (10)", + "Street", + "Showcase_Store_08", + "Wall_2m_01", + "Wall_4m_01", + "NI_Wall_4m_01", + "Store Status Sign", + "Table Canvas", + "Placement Obstacle", + }; var standardEnvironmentContainer = GameObject.Find("Environment v0.1.1"); - if (standardEnvironmentContainer == null) return; - standardEnvironmentContainer.SetActive(false); + GameObject street = null; + if (standardEnvironmentContainer == null) return null; + for (int i = 0; i < standardEnvironmentContainer.transform.childCount; i++) + { + var child = standardEnvironmentContainer.transform.GetChild(i).gameObject; + if (!piecesToLeaveEnabled.Contains(child.name)) child.SetActive(false); + if (child.name == "Street") street = child; + } + for (int i = 0; i < street.transform.childCount; i++) + { + var child = street.transform.GetChild(i).gameObject; + if (!piecesToLeaveEnabled.Contains(child.name)) child.SetActive(false); + } + for (int i = 2; i < 24; i++) + { + SLogger.LogInfo("Disabling Section " + i); + var section = GameObject.Find("Section " + i); + var tbd = section.transform.GetChild(0); + for (int j = 0; j < tbd.childCount; j++) + { + var child = tbd.GetChild(j).gameObject; + SLogger.LogInfo("Disabling " + child.name); + string name = child.name.Split(" (")[0]; + if (!piecesToLeaveEnabled.Contains(name)) child.SetActive(false); + } + } var streetLightsContainer = GameObject.Find("Street Lights"); streetLightsContainer.SetActive(false); + return standardEnvironmentContainer; + } + private void SceneManager_sceneLoaded(Scene arg0, LoadSceneMode arg1) + { + var standardEnvironmentContainer = DisableStandardEnvironment(); + if (standardEnvironmentContainer == null) return; + Player = GameObject.Find("Player"); var newContainer = new GameObject("Space Environment").transform; @@ -118,17 +184,19 @@ namespace SpacemarketSimulator var skyboxContainer = new GameObject("Skybox").transform; skyboxContainer.SetParent(newContainer); - GameObject platform = GameObject.CreatePrimitive(PrimitiveType.Plane); - platform.transform.localScale = new Vector3(1, 1, 1); - platform.transform.position = new Vector3(6, 0, 6); - platform.transform.SetParent(newContainer); + //GameObject platform = GameObject.CreatePrimitive(PrimitiveType.Plane); + //platform.transform.localScale = new Vector3(1, 1, 1); + //platform.transform.position = new Vector3(6, 0, 6); + //platform.transform.SetParent(newContainer); + //var camera = GameObject.Find("Main Camera"); + //(camera.GetComponent().ActiveVirtualCamera as CinemachineVirtualCamera).; - var renderer = platform.GetComponent(); - renderer.material.shader = Shader.Find("Universal Render Pipeline/Lit"); - renderer.material.mainTexture = LoadTexture("metalgrid3_basecolor"); - renderer.material.SetTexture("_NORMALMAP", LoadTexture("metalgrid3_normal-ogl")); - renderer.material.SetTexture("_METALLICGLOSSMAP", LoadTexture("metalgrid3_metallic")); - renderer.material.DisableKeyword("_SPECULAR_SETUP"); + //var renderer = platform.GetComponent(); + //renderer.material.shader = Shader.Find("Universal Render Pipeline/Lit"); + //renderer.material.mainTexture = LoadTexture("metalgrid3_basecolor"); + //renderer.material.SetTexture("_NORMALMAP", LoadTexture("metalgrid3_normal-ogl")); + //renderer.material.SetTexture("_METALLICGLOSSMAP", LoadTexture("metalgrid3_metallic")); + //renderer.material.DisableKeyword("_SPECULAR_SETUP"); ApplySkybox(skyboxContainer); diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index 534681f..ba38340 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -70,6 +70,16 @@ namespace SpacemarketSimulator.Properties { } } + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + /// + internal static byte[] bg { + get { + object obj = ResourceManager.GetObject("bg", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Sucht eine lokalisierte Ressource vom Typ System.Byte[]. /// diff --git a/Properties/Resources.resx b/Properties/Resources.resx index ec1ef8d..e76f889 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -121,6 +121,9 @@ ..\Resources\back_galaxyfire.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\image (5).png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ..\Resources\down_galaxyfire.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/Resources/image (4).png b/Resources/image (4).png new file mode 100644 index 0000000..c6b09b1 Binary files /dev/null and b/Resources/image (4).png differ diff --git a/Resources/image (5).png b/Resources/image (5).png new file mode 100644 index 0000000..7290762 Binary files /dev/null and b/Resources/image (5).png differ diff --git a/SpacemarketSimulator.csproj b/SpacemarketSimulator.csproj index 727bfc8..09f139a 100644 --- a/SpacemarketSimulator.csproj +++ b/SpacemarketSimulator.csproj @@ -1,16 +1,20 @@ - + netstandard2.1 SpacemarketSimulator My first plugin - 1.0.0 + 0.1.0 true latest + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + @@ -20,6 +24,21 @@ + + + D:\SteamLibrary\steamapps\common\Supermarket Simulator\Supermarket Simulator_Data\Managed\Assembly-CSharp.dll + + + D:\SteamLibrary\steamapps\common\Supermarket Simulator\Supermarket Simulator_Data\Managed\Cinemachine.dll + + + D:\SteamLibrary\steamapps\common\Supermarket Simulator\Supermarket Simulator_Data\Managed\MyBox.dll + + + D:\SteamLibrary\steamapps\common\Supermarket Simulator\Supermarket Simulator_Data\Managed\UnityEngine.UI.dll + + + True diff --git a/TransformDefiner.cs b/TransformDefiner.cs index 8cb4085..1382517 100644 --- a/TransformDefiner.cs +++ b/TransformDefiner.cs @@ -12,7 +12,7 @@ namespace SpacemarketSimulator public void Update() { transform.localPosition = localPosition; - transform.localPosition = position + Plugin.Player.transform.position; + transform.localPosition = position + (Plugin.MoveSkyboxWithPlayer.Value ? Plugin.Player.transform.position : new Vector3()); transform.localScale = localScale; transform.eulerAngles = eulerAngles; }