public static RectTransform Checkbox(RectTransform parent) { GameObject obj = new GameObject("ToyBox.Checkbox"); RectTransform transform = obj.AddComponent <RectTransform>(); transform.SetParent(parent, false); transform.anchorMin = new Vector2(0.0f, 0.0f); transform.anchorMax = new Vector2(1.0f, 1.0f); transform.pivot = new Vector2(0.5f, 0.5f); transform.offsetMin = new Vector2(0.0f, 0.0f); transform.offsetMax = new Vector2(0.0f, 0.0f); HorizontalLayoutGroupWorkaround group = obj.AddComponent <HorizontalLayoutGroupWorkaround>(); group.SetLayoutHorizontal(); group.childControlWidth = true; group.childControlHeight = true; group.childForceExpandWidth = false; group.childForceExpandHeight = false; group.childScaleWidth = false; group.childScaleHeight = false; group.childAlignment = TextAnchor.UpperLeft; group.spacing = DefaultSpacing; group.padding = DefaultPadding; LayoutElement layout = obj.AddComponent <LayoutElement>(); layout.minWidth = 32.0f; layout.minHeight = 32.0f; layout.preferredWidth = -1.0f; layout.preferredHeight = -1.0f; layout.flexibleWidth = 0.0f; layout.flexibleHeight = 0.0f; OwlcatMultiButton button = obj.AddComponent <OwlcatMultiButton>(); button.ClickSoundType = -1; //button.HoverSoundType = 1; // background GameObject background_obj = new GameObject("ToyBox.Checkbox.Background"); RectTransform background_transform = background_obj.AddComponent <RectTransform>(); background_transform.SetParent(transform, false); background_transform.anchorMin = new Vector2(0.0f, 0.0f); background_transform.anchorMax = new Vector2(1.0f, 1.0f); background_transform.pivot = new Vector2(0.5f, 0.5f); background_transform.offsetMin = new Vector2(0.0f, 0.0f); background_transform.offsetMax = new Vector2(0.0f, 0.0f); HorizontalLayoutGroupWorkaround background_group = background_obj.AddComponent <HorizontalLayoutGroupWorkaround>(); background_group.SetLayoutHorizontal(); background_group.childControlWidth = true; background_group.childControlHeight = true; background_group.childForceExpandWidth = false; background_group.childForceExpandHeight = false; background_group.childScaleWidth = false; background_group.childScaleHeight = false; background_group.childAlignment = TextAnchor.UpperLeft; background_group.spacing = DefaultSpacing; background_group.padding = new RectOffset( (int)(layout.minWidth * 0.2f), (int)(layout.minHeight * 0.2f), (int)(layout.minWidth * 0.2f), (int)(layout.minHeight * 0.2f) ); LayoutElement background_layout = background_obj.AddComponent <LayoutElement>(); background_layout.minWidth = -1.0f; background_layout.minHeight = -1.0f; background_layout.preferredWidth = -1.0f; background_layout.preferredHeight = -1.0f; background_layout.flexibleWidth = 0.0f; background_layout.flexibleHeight = 0.0f; CanvasRenderer background_renderer = background_obj.AddComponent <CanvasRenderer>(); Image background_image = background_obj.AddComponent <Image>(); background_image.sprite = crUI.CheckboxBackgroundImage?.sprite; // checkmark GameObject checkmark_obj = new GameObject("ToyBox.Checkbox.Checkmark"); RectTransform checkmark_transform = checkmark_obj.AddComponent <RectTransform>(); checkmark_transform.SetParent(background_transform, false); checkmark_transform.anchorMin = new Vector2(0.0f, 0.0f); checkmark_transform.anchorMax = new Vector2(1.0f, 1.0f); checkmark_transform.pivot = new Vector2(0.5f, 0.5f); checkmark_transform.offsetMin = new Vector2(0.0f, 0.0f); checkmark_transform.offsetMax = new Vector2(0.0f, 0.0f); LayoutElement checkmark_layout = checkmark_obj.AddComponent <LayoutElement>(); checkmark_layout.minWidth = -1.0f; checkmark_layout.minHeight = -1.0f; checkmark_layout.preferredWidth = -1.0f; checkmark_layout.preferredHeight = -1.0f; checkmark_layout.flexibleWidth = 1.0f; checkmark_layout.flexibleHeight = 1.0f; CanvasRenderer checkmark_renderer = checkmark_obj.AddComponent <CanvasRenderer>(); Image checkmark_image = checkmark_obj.AddComponent <Image>(); checkmark_image.sprite = crUI.CheckboxCheckmarkImage?.sprite; SpriteState sprite_state = crUI.CheckboxLayerParts[0].SpriteState; OwlcatSelectableLayerPart layer0 = new OwlcatSelectableLayerPart(); layer0.Image = background_image; layer0.Transition = OwlcatTransition.SpriteSwap; layer0.SpriteState = sprite_state; button.AddLayerToMainPart(layer0); button.AddMultiLayer(); button.AddMultiLayer(); List <OwlcatMultiLayer> layers = AccessTools.DeclaredField(typeof(OwlcatMultiSelectable), "m_MultiLayers") .GetValue(button) as List <OwlcatMultiLayer>; layers[0].LayerName = "Unchecked"; OwlcatMultiLayer layer1 = layers[1]; layer1.LayerName = "Checked"; layer1.AddPart(); layer1.Parts[0].Transition = OwlcatTransition.Activate; AccessTools.DeclaredField(typeof(OwlcatSelectableLayerPart), "m_TargetGameObject") .SetValue(layer1.Parts[0], checkmark_obj); AccessTools.DeclaredMethod(typeof(OwlcatMultiSelectable), "DoSetLayers").Invoke(button, new object[] {}); Button.ButtonClickedEvent evt = AccessTools .DeclaredField(typeof(OwlcatMultiButton), "m_OnLeftClick").GetValue(button) as Button.ButtonClickedEvent; evt.AddListener(() => { List <OwlcatMultiLayer> layers = AccessTools.DeclaredField(typeof(OwlcatMultiSelectable), "m_MultiLayers") .GetValue(button) as List <OwlcatMultiLayer>; button.SetActiveLayer((button.ActiveLayerIndex + 1) % layers.Count); }); return(transform); }
public static RectTransform Button(RectTransform parent, string text) { GameObject obj = new GameObject("ToyBox.Button"); RectTransform transform = obj.AddComponent <RectTransform>(); transform.SetParent(parent, false); transform.anchorMin = new Vector2(0.0f, 0.0f); transform.anchorMax = new Vector2(1.0f, 1.0f); transform.pivot = new Vector2(0.5f, 0.5f); transform.offsetMin = new Vector2(0.0f, 0.0f); transform.offsetMax = new Vector2(0.0f, 0.0f); HorizontalLayoutGroupWorkaround group = obj.AddComponent <HorizontalLayoutGroupWorkaround>(); group.SetLayoutHorizontal(); group.childControlWidth = true; group.childControlHeight = true; group.childForceExpandWidth = false; group.childForceExpandHeight = false; group.childScaleWidth = false; group.childScaleHeight = false; group.childAlignment = TextAnchor.MiddleCenter; group.spacing = DefaultSpacing; group.padding = DefaultPadding; LayoutElement layout = obj.AddComponent <LayoutElement>(); layout.minWidth = -1.0f; layout.minHeight = -1.0f; layout.preferredWidth = -1.0f; layout.preferredHeight = -1.0f; layout.flexibleWidth = 1.0f; layout.flexibleHeight = 1.0f; CanvasRenderer renderer = obj.AddComponent <CanvasRenderer>(); RectTransform inner_text = crUI.Text(transform, text); inner_text.GetComponent <TextMeshProUGUI>().alignment = TextAlignmentOptions.Center; Image image = obj.AddComponent <Image>(); image.sprite = crUI.ButtonBackgroundImage?.sprite; SpriteState sprite_state = crUI.ButtonBackgroundSpriteState; OwlcatButton button = obj.AddComponent <OwlcatButton>(); button.ClickSoundType = -1; button.HoverSoundType = 0; OwlcatSelectableLayerPart part0 = new OwlcatSelectableLayerPart(); part0.Image = image; part0.Transition = OwlcatTransition.SpriteSwap; part0.SpriteState = sprite_state; OwlcatSelectableLayerPart part1 = new OwlcatSelectableLayerPart(); ColorBlock colors = new ColorBlock(); colors.normalColor = new Color(0.7843f, 0.7686f, 0.749f, 1.0f); colors.highlightedColor = new Color(0.9176f, 0.8824f, 0.8235f, 1.0f); colors.pressedColor = new Color(0.7647f, 0.749f, 0.7294f, 1.0f); colors.selectedColor = new Color(0.9176f, 0.8824f, 0.8235f, 1.0f); colors.disabledColor = new Color(0.6941f, 0.6941f, 0.6902f, 0.1922f); colors.colorMultiplier = 1.0f; colors.fadeDuration = 0.1f; part1.Colors = colors; part1.TargetGraphic = inner_text.GetComponent <TextMeshProUGUI>(); button.AddLayerToMainPart(part0); button.AddLayerToMainPart(part1); return(transform); }