diff --git a/LogixVisualCustomizer/AssetExtensions.cs b/LogixVisualCustomizer/AssetExtensions.cs index 697f2c5..b77fc47 100644 --- a/LogixVisualCustomizer/AssetExtensions.cs +++ b/LogixVisualCustomizer/AssetExtensions.cs @@ -13,15 +13,18 @@ internal static class Assets { public static StaticTexture2D GetBackgroundTexture(this World world) { - if (world.KeyOwner($"Logix_CustomBackground_Texture_{world.LocalUser.UserID}") is StaticTexture2D customBackgroundTexture) + var key = $"Logix_CustomBackground_Texture_{world.LocalUser.UserID}"; + if (world.KeyOwner(key) is StaticTexture2D customBackgroundTexture) return customBackgroundTexture; customBackgroundTexture = world.GetCustomizerAssets().AttachComponent(); - customBackgroundTexture.URL.Value = LogixVisualCustomizer.BorderSpriteUri; + customBackgroundTexture.URL.Value = LogixVisualCustomizer.BackgroundSpriteUri; customBackgroundTexture.WrapModeU.Value = TextureWrapMode.Clamp; customBackgroundTexture.WrapModeV.Value = TextureWrapMode.Clamp; customBackgroundTexture.FilterMode.Value = TextureFilterMode.Anisotropic; + customBackgroundTexture.AssignKey(key); + return customBackgroundTexture; } @@ -37,15 +40,18 @@ public static StaticTexture2D GetBorderTexture(this Worker worker) public static StaticTexture2D GetBorderTexture(this World world) { - if (world.KeyOwner($"Logix_CustomBorder_Texture_{world.LocalUser.UserID}") is StaticTexture2D customBorderTexture) + var key = $"Logix_CustomBorder_Texture_{world.LocalUser.UserID}"; + if (world.KeyOwner(key) is StaticTexture2D customBorderTexture) return customBorderTexture; customBorderTexture = world.GetCustomizerAssets().AttachComponent(); - customBorderTexture.URL.Value = LogixVisualCustomizer.BackgroundSpriteUri; + customBorderTexture.URL.Value = LogixVisualCustomizer.BorderSpriteUri; customBorderTexture.WrapModeU.Value = TextureWrapMode.Clamp; customBorderTexture.WrapModeV.Value = TextureWrapMode.Clamp; customBorderTexture.FilterMode.Value = TextureFilterMode.Anisotropic; + customBorderTexture.AssignKey(key); + return customBorderTexture; } @@ -59,6 +65,41 @@ public static Slot GetCustomizerAssets(this World world) return world.AssetsSlot.FindOrAdd("LogixCustomizerAssets"); } + public static SpriteProvider GetFullInputBackgroundProvider(this Worker worker) + { + return worker.World.GetFullInputBackgroundProvider(); + } + + public static SpriteProvider GetFullInputBackgroundProvider(this World world) + { + const string key = "Logix_FullInputBackground_SpriteProvider"; + if (world.KeyOwner(key) is SpriteProvider backgroundSprite) + return backgroundSprite; + + backgroundSprite = world.GetCustomizerAssets().AttachComponent(); + + var textureOverride = backgroundSprite.Texture.GetUserOverride(true); + textureOverride.CreateOverrideOnWrite.Value = true; + textureOverride.Default.Target = world.GetSolidBackgroundTexture(); + textureOverride.SetOverride(world.LocalUser, world.GetBackgroundTexture()); + + var rectOverride = backgroundSprite.Rect.GetUserOverride(true); + rectOverride.CreateOverrideOnWrite.Value = true; + rectOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.FullBackgroundRect); + + var bordersOverride = backgroundSprite.Borders.GetUserOverride(true); + bordersOverride.CreateOverrideOnWrite.Value = true; + bordersOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.FullBackgroundBorders); + + var scaleOverride = backgroundSprite.Scale.GetUserOverride(true); + scaleOverride.CreateOverrideOnWrite.Value = true; + scaleOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.InputBackgroundScale); + + backgroundSprite.AssignKey(key); + + return backgroundSprite; + } + public static SpriteProvider GetFullInputBorderProvider(this Worker worker) { return worker.World.GetFullInputBorderProvider(); @@ -66,7 +107,8 @@ public static SpriteProvider GetFullInputBorderProvider(this Worker worker) public static SpriteProvider GetFullInputBorderProvider(this World world) { - if (world.KeyOwner("Logix_FullInputBorder_SpriteProvider") is SpriteProvider borderSprite) + const string key = "Logix_FullInputBorder_SpriteProvider"; + if (world.KeyOwner(key) is SpriteProvider borderSprite) return borderSprite; borderSprite = world.GetCustomizerAssets().AttachComponent(); @@ -88,6 +130,8 @@ public static SpriteProvider GetFullInputBorderProvider(this World world) scaleOverride.CreateOverrideOnWrite.Value = true; scaleOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.InputBorderScale); + borderSprite.AssignKey(key); + return borderSprite; } @@ -98,15 +142,53 @@ public static SolidColorTexture GetHiddenBorderTexture(this Worker worker) public static SolidColorTexture GetHiddenBorderTexture(this World world) { - if (world.KeyOwner("Logix_HiddenBorder_Texture") is SolidColorTexture hiddenBorderTexture) + const string key = "Logix_HiddenBorder_Texture"; + if (world.KeyOwner(key) is SolidColorTexture hiddenBorderTexture) return hiddenBorderTexture; hiddenBorderTexture = world.GetCustomizerAssets().AttachComponent(); hiddenBorderTexture.Color.Value = new color(1, 0); + hiddenBorderTexture.AssignKey(key); + return hiddenBorderTexture; } + public static SpriteProvider GetLeftInputBackgroundProvider(this Worker worker) + { + return worker.World.GetLeftInputBackgroundProvider(); + } + + public static SpriteProvider GetLeftInputBackgroundProvider(this World world) + { + const string key = "Logix_LeftInputBackground_SpriteProvider"; + if (world.KeyOwner(key) is SpriteProvider backgroundSprite) + return backgroundSprite; + + backgroundSprite = world.GetCustomizerAssets().AttachComponent(); + + var textureOverride = backgroundSprite.Texture.GetUserOverride(true); + textureOverride.CreateOverrideOnWrite.Value = true; + textureOverride.Default.Target = world.GetSolidBackgroundTexture(); + textureOverride.SetOverride(world.LocalUser, world.GetBackgroundTexture()); + + var rectOverride = backgroundSprite.Rect.GetUserOverride(true); + rectOverride.CreateOverrideOnWrite.Value = true; + rectOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.LeftBackgroundRect); + + var bordersOverride = backgroundSprite.Borders.GetUserOverride(true); + bordersOverride.CreateOverrideOnWrite.Value = true; + bordersOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.LeftBackgroundBorders); + + var scaleOverride = backgroundSprite.Scale.GetUserOverride(true); + scaleOverride.CreateOverrideOnWrite.Value = true; + scaleOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.InputBackgroundScale); + + backgroundSprite.AssignKey(key); + + return backgroundSprite; + } + public static SpriteProvider GetLeftInputBorderProvider(this Worker worker) { return worker.World.GetLeftInputBorderProvider(); @@ -114,7 +196,8 @@ public static SpriteProvider GetLeftInputBorderProvider(this Worker worker) public static SpriteProvider GetLeftInputBorderProvider(this World world) { - if (world.KeyOwner("Logix_LeftInputBorder_SpriteProvider") is SpriteProvider borderSprite) + const string key = "Logix_LeftInputBorder_SpriteProvider"; + if (world.KeyOwner(key) is SpriteProvider borderSprite) return borderSprite; borderSprite = world.GetCustomizerAssets().AttachComponent(); @@ -136,6 +219,8 @@ public static SpriteProvider GetLeftInputBorderProvider(this World world) scaleOverride.CreateOverrideOnWrite.Value = true; scaleOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.InputBorderScale); + borderSprite.AssignKey(key); + return borderSprite; } @@ -146,7 +231,8 @@ public static SpriteProvider GetNodeBackgroundProvider(this Worker worker) public static SpriteProvider GetNodeBackgroundProvider(this World world) { - if (world.KeyOwner("Logix_NodeBackground_SpriteProvider") is SpriteProvider backgroundSprite) + const string key = "Logix_NodeBackground_SpriteProvider"; + if (world.KeyOwner(key) is SpriteProvider backgroundSprite) return backgroundSprite; backgroundSprite = world.GetCustomizerAssets().AttachComponent(); @@ -154,7 +240,7 @@ public static SpriteProvider GetNodeBackgroundProvider(this World world) var textureOverride = backgroundSprite.Texture.GetUserOverride(true); textureOverride.CreateOverrideOnWrite.Value = true; textureOverride.Default.Target = world.GetSolidBackgroundTexture(); - textureOverride.SetOverride(world.LocalUser, world.GetBorderTexture()); + textureOverride.SetOverride(world.LocalUser, world.GetBackgroundTexture()); var rectOverride = backgroundSprite.Rect.GetUserOverride(true); rectOverride.CreateOverrideOnWrite.Value = true; @@ -168,6 +254,8 @@ public static SpriteProvider GetNodeBackgroundProvider(this World world) scaleOverride.CreateOverrideOnWrite.Value = true; scaleOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.NodeBackgroundScale); + backgroundSprite.AssignKey(key); + return backgroundSprite; } @@ -178,7 +266,8 @@ public static SpriteProvider GetNodeBorderProvider(this Worker worker) public static SpriteProvider GetNodeBorderProvider(this World world) { - if (world.KeyOwner("Logix_NodeBorder_SpriteProvider") is SpriteProvider borderSprite) + const string key = "Logix_NodeBorder_SpriteProvider"; + if (world.KeyOwner(key) is SpriteProvider borderSprite) return borderSprite; borderSprite = world.GetCustomizerAssets().AttachComponent(); @@ -200,6 +289,8 @@ public static SpriteProvider GetNodeBorderProvider(this World world) scaleOverride.CreateOverrideOnWrite.Value = true; scaleOverride.SetOverride(world.LocalUser, LogixVisualCustomizer.NodeBorderScale); + borderSprite.AssignKey(key); + return borderSprite; } @@ -210,12 +301,15 @@ public static SolidColorTexture GetSolidBackgroundTexture(this Worker worker) public static SolidColorTexture GetSolidBackgroundTexture(this World world) { - if (world.KeyOwner("Logix_DefaultBackground_Texture") is SolidColorTexture backgroundTexture) + const string key = "Logix_DefaultBackground_Texture"; + if (world.KeyOwner(key) is SolidColorTexture backgroundTexture) return backgroundTexture; backgroundTexture = world.GetCustomizerAssets().AttachComponent(); backgroundTexture.Color.Value = LogixNode.DEFAULT_NODE_BACKGROUND; + backgroundTexture.AssignKey(key); + return backgroundTexture; } @@ -261,6 +355,24 @@ public static void UpdateCustomizerAssets(this World world) background.URL.Value = LogixVisualCustomizer.BackgroundSpriteUri; backgroundTexture = background; } + + var nodeBackgroundSprite = world.GetNodeBackgroundProvider(); + nodeBackgroundSprite.Texture.Target = backgroundTexture; + nodeBackgroundSprite.Rect.Value = LogixVisualCustomizer.FullBackgroundRect; + nodeBackgroundSprite.Borders.Value = LogixVisualCustomizer.FullBackgroundBorders; + nodeBackgroundSprite.Scale.Value = LogixVisualCustomizer.NodeBackgroundScale; + + var fullBackgroundSprite = world.GetFullInputBackgroundProvider(); + fullBackgroundSprite.Texture.Target = backgroundTexture; + fullBackgroundSprite.Rect.Value = LogixVisualCustomizer.FullBackgroundRect; + fullBackgroundSprite.Borders.Value = LogixVisualCustomizer.FullBackgroundBorders; + fullBackgroundSprite.Scale.Value = LogixVisualCustomizer.InputBorderScale; + + var leftBackgroundSprite = world.GetLeftInputBackgroundProvider(); + leftBackgroundSprite.Texture.Target = backgroundTexture; + leftBackgroundSprite.Rect.Value = LogixVisualCustomizer.LeftBackgroundRect; + leftBackgroundSprite.Borders.Value = LogixVisualCustomizer.LeftBackgroundBorders; + leftBackgroundSprite.Scale.Value = LogixVisualCustomizer.InputBorderScale; } } } \ No newline at end of file diff --git a/LogixVisualCustomizer/Assets/Border.png b/LogixVisualCustomizer/Assets/Border.png index eeed364..8472c4a 100644 Binary files a/LogixVisualCustomizer/Assets/Border.png and b/LogixVisualCustomizer/Assets/Border.png differ diff --git a/LogixVisualCustomizer/Assets/Disc.png b/LogixVisualCustomizer/Assets/Disc.png new file mode 100644 index 0000000..83df979 Binary files /dev/null and b/LogixVisualCustomizer/Assets/Disc.png differ diff --git a/LogixVisualCustomizer/BoolInputPatch.cs b/LogixVisualCustomizer/BoolInputPatch.cs index a288ca8..1481537 100644 --- a/LogixVisualCustomizer/BoolInputPatch.cs +++ b/LogixVisualCustomizer/BoolInputPatch.cs @@ -18,7 +18,26 @@ internal static class BoolInputPatch [HarmonyPatch("OnGenerateVisual")] private static void OnGenerateVisualPostfix(Slot root) { - var textRect = root.GetComponentInChildren().RectTransform; + var button = root.GetComponentInChildren