示例#1
0
        public override void OnLoadData()
        {
            byte[] bytes = serializableDataManager.LoadData(PropPainterDataContainer.DataId);
            if (bytes != null)
            {
                using (var stream = new MemoryStream(bytes))
                {
                    _data = DataSerializer.Deserialize <PropPainterDataContainer>(stream, DataSerializer.Mode.Memory);
                }
                Db.l("Data loaded (Size in bytes: { " + bytes.Length + "})");
            }
            else
            {
                _data = new PropPainterDataContainer();

                Db.w("Data created");
            }
        }
        private static void Postfix()
        {
            List <ushort> t = PropPainterManager.instance.ExtractPropsFromMoveItSelection();

            for (int i = 0; i < t.Count; i++)
            {
                Db.w((i + 1) + ": " + t[i]);
            }
            Color?r         = PropPainterManager.instance.ParseAggregateColor(t);
            Color trueColor = new Color32(255, 255, 255, 255);

            if (r != null)
            {
                trueColor = (Color)r;
            }

            PropPainterInstallationPatch.doNotUpdateColors       = true;
            PropPainterManager.instance.colorField.selectedColor = trueColor;
            PropPainterManager.instance.propPainterButton.color  = trueColor;
        }
        // Updated code thanks to TPB- @TODO implement!
        private static void CreateUI(UIComponent parent, string name)
        {
            UIColorField field = UITemplateManager.Get <UIPanel>("LineTemplate").Find <UIColorField>("LineColor");

            field           = UnityEngine.Object.Instantiate <UIColorField>(field);
            field.isVisible = false;
            field.name      = "PropPickerColorField";

            UIColorPicker picker = UnityEngine.Object.Instantiate <UIColorPicker>(field.colorPicker);

            picker.eventColorUpdated += ChangeSelectionColors;
            picker.color              = Color.white;
            picker.component.color    = Color.white;
            picker.name = name;

            UIPanel pickerPanel = picker.component as UIPanel;

            pickerPanel.backgroundSprite = "InfoPanelBack";
            pickerPanel.isVisible        = false;
            picker.component.size        = new Vector2(254f, 226f); // ?/

            parent.AttachUIComponent(picker.gameObject);

            pickerPanel.absolutePosition = UIToolOptionPanel.instance.m_viewOptions.absolutePosition - new Vector3(329, 147);

            Db.l("Prop Picker color picker instantiated");


            FieldInfo f          = typeof(UIToolOptionPanel).GetField("m_alignTools", BindingFlags.Instance | BindingFlags.NonPublic);
            UIButton  AlignTools = f.GetValue(UIToolOptionPanel.instance) as UIButton;

            UIPanel AlignToolsPanel = UIToolOptionPanel.instance.m_alignToolsPanel;

            FieldInfo fa     = typeof(UIToolOptionPanel).GetField("m_single", BindingFlags.Instance | BindingFlags.NonPublic);
            UIButton  Single = fa.GetValue(UIToolOptionPanel.instance) as UIButton;

            FieldInfo fb      = typeof(UIToolOptionPanel).GetField("m_marquee", BindingFlags.Instance | BindingFlags.NonPublic);
            UIButton  Marquee = fb.GetValue(UIToolOptionPanel.instance) as UIButton;

            Single.zOrder  = 7;
            Marquee.zOrder = 7;

            UIToolOptionPanel.instance.m_filtersPanelList.height = 240f;

            // @TODO - Make this modular, please! I need to put more buttons here later and I need to make a single singleton manager for all of my mods.
            UIPanel extraToolBackground = AlignToolsPanel.AddUIComponent <UIPanel>();

            extraToolBackground.size             = new Vector2(26, 70);
            extraToolBackground.clipChildren     = true;
            extraToolBackground.relativePosition = new Vector3(5, -37);
            extraToolBackground.backgroundSprite = "InfoPanelBack";
            extraToolBackground.name             = "ElektrixModsMenu";
            extraToolBackground.zOrder           = 0;

            AlignTools.tooltip = "More Tools";

            UIToolOptionPanel.instance.clipChildren = false;
            UIComponent[] t = UIToolOptionPanel.instance.GetComponentsInChildren <UIPanel>();
            for (int i = 0; i < t.Length; i++)
            {
                t[i].clipChildren = false;
            }


            UIMultiStateButton propPickerButton = AlignToolsPanel.AddUIComponent <UIMultiStateButton>();

            propPickerButton.name            = "PropPickerButton";
            propPickerButton.tooltip         = "Prop Painter";
            propPickerButton.spritePadding   = new RectOffset(2, 2, 2, 2);
            propPickerButton.playAudioEvents = true;

            propPickerButton.relativePosition = new Vector3(0, -45);

            var GetIconsAtlas = typeof(UIToolOptionPanel).GetMethod("GetIconsAtlas", BindingFlags.Instance | BindingFlags.NonPublic);

            propPickerButton.atlas = GetIconsAtlas.Invoke(UIToolOptionPanel.instance, new object[] { }) as UITextureAtlas;

            propPickerButton.backgroundSprites.AddState();
            propPickerButton.foregroundSprites.AddState();

            propPickerButton.backgroundSprites[0].normal   = "OptionBase";
            propPickerButton.backgroundSprites[0].focused  = "OptionBase";
            propPickerButton.backgroundSprites[0].hovered  = "OptionBaseHovered";
            propPickerButton.backgroundSprites[0].pressed  = "OptionBasePressed";
            propPickerButton.backgroundSprites[0].disabled = "OptionBaseDisabled";

            propPickerButton.foregroundSprites[0].normal = "EyeDropper";

            propPickerButton.backgroundSprites[1].normal   = "OptionBaseFocused";
            propPickerButton.backgroundSprites[1].focused  = "OptionBaseFocused";
            propPickerButton.backgroundSprites[1].hovered  = "OptionBaseHovered";
            propPickerButton.backgroundSprites[1].pressed  = "OptionBasePressed";
            propPickerButton.backgroundSprites[1].disabled = "OptionBaseDisabled";

            propPickerButton.foregroundSprites[1].normal = "EyeDropper";

            propPickerButton.size             = new Vector2(36, 36);
            propPickerButton.activeStateIndex = 0;


            propPickerButton.eventClicked += (component, eventParam) => {
                Db.l("Button state " + propPickerButton.activeStateIndex);
                pickerPanel.isVisible = propPickerButton.activeStateIndex == 1;
                UIToolOptionPanel.instance.m_filtersPanelList.height = 240f;
                Db.w("Tried to make color picker visible/invisible");
            };

            Db.l("Prop Picker button instantiated");


            PropPainterManager.instance.colorField        = field;
            PropPainterManager.instance.colorPicker       = picker;
            PropPainterManager.instance.propPainterButton = propPickerButton;
            PropPainterManager.instance.colorPanel        = pickerPanel;
        }