コード例 #1
0
        private void Setup()
        {
            name             = "CustomizeItVehicleExtendedPanel";
            isVisible        = false;
            canFocus         = true;
            isInteractive    = true;
            relativePosition = new Vector3(0f, UiVehicleTitleBar.Instance.height);
            width            = parent.width;

            var fields = SelectedVehicle.GetType().GetFields();

            var fieldsToRetrieve = typeof(CustomVehicleProperties).GetFields().Select(x => x.Name);

            Inputs  = new List <UIComponent>();
            _labels = new List <UILabel>();

            var widestWidth = 0f;

            foreach (var field in fields.Where(x => fieldsToRetrieve.Contains(x.Name)))
            {
                var label = AddUIComponent <UILabel>();
                label.name          = field.Name + "Label";
                label.text          = UiUtils.FieldNames[field.Name];
                label.textScale     = 0.9f;
                label.isInteractive = false;

                if (field.FieldType == typeof(float) || field.FieldType == typeof(int))
                {
                    Inputs.Add(UiUtils.CreateVehicleTextField(this, field.Name));
                    _labels.Add(label);
                }
                else if (field.FieldType == typeof(bool))
                {
                    Inputs.Add(UiUtils.CreateVehicleCheckBox(this, field.Name));
                    _labels.Add(label);
                }

                if (label.width + UiUtils.FieldWidth + UiUtils.FieldMargin * 6 > widestWidth)
                {
                    widestWidth = label.width + UiUtils.FieldWidth + UiUtils.FieldMargin * 6;
                }
            }

            if (!CustomizeItExtendedMod.Settings.OverrideAVO)
            {
                foreach (var input in Inputs)
                {
                    if (!AdvancedVehicleOptionsCompatibilityPatch.IsAVOActive() ||
                        !AdvancedVehicleOptionsCompatibilityPatch.AVOFields.Contains(input.name))
                    {
                        continue;
                    }

                    input.isEnabled     = false;
                    input.isInteractive = false;

                    if (input is UITextField textField)
                    {
                        textField.text = "DISABLED";
                    }

                    if (input is UICheckBox checkbox)
                    {
                        checkbox.enabled       = false;
                        checkbox.isInteractive = false;
                        checkbox.disabledColor = Color.gray;
                    }
                }
            }


            Inputs.Add(UiUtils.CreateNameTextfield(this, "DefaultName", (component, value) =>
            {
                if (!string.IsNullOrEmpty(value))
                {
                    if (CustomizeItExtendedVehicleTool.instance.CustomVehicleNames.TryGetValue(SelectedVehicle.name,
                                                                                               out var props))
                    {
                        props.CustomName  = value;
                        props.DefaultName = true;
                    }
                    else
                    {
                        CustomizeItExtendedVehicleTool.instance.CustomVehicleNames.Add(SelectedVehicle.name,
                                                                                       new NameProperties(value, true));
                    }
                }
                else
                {
                    if (CustomizeItExtendedVehicleTool.instance.CustomVehicleNames.TryGetValue(SelectedVehicle.name,
                                                                                               out var _))
                    {
                        CustomizeItExtendedVehicleTool.instance.CustomVehicleNames.Remove(SelectedVehicle.name);
                    }
                }

                if (!CustomizeItExtendedMod.Settings.SavePerCity)
                {
                    CustomizeItExtendedMod.Settings.Save();
                }
            }, CustomizeItExtendedVehicleTool
                                                   .instance.CustomVehicleNames.TryGetValue(SelectedVehicle.name, out var customName)
                ? customName.CustomName
                : string.Empty));

            var nameLabel = AddUIComponent <UILabel>();

            nameLabel.name          = "DefaultNameLabel";
            nameLabel.text          = "Default Name";
            nameLabel.textScale     = 0.9f;
            nameLabel.isInteractive = false;

            if (nameLabel.width + UiUtils.FieldWidth + UiUtils.FieldMargin * 6 > widestWidth)
            {
                widestWidth = nameLabel.width + UiUtils.FieldWidth + UiUtils.FieldMargin * 6;
            }

            _labels.Add(nameLabel);

            Inputs.Sort((x, y) => x.name.CompareTo(y.name));
            _labels.Sort((x, y) => x.name.CompareTo(y.name));

            Inputs.Add(UiUtils.CreateVehicleResetButton(this));

            Inputs.Add(UiUtils.CreateDropdown(this, "SelectedVehicle", VehicleHelper.GetAllVehicleNames().ToArray(),
                                              (component, value) =>
            {
                var newVehicle = VehicleHelper.GetAllVehicles()
                                 .Find(x =>
                                       x.name == VehicleHelper.RetrieveOriginalVehicleName(((UIDropDown)component).items[value]));


                UiUtils.DeepDestroy(CustomizeItExtendedVehicleTool.instance.VehiclePanelWrapper);
                CustomizeItExtendedVehicleTool.instance.SelectedVehicle = newVehicle;
                newVehicle.GenerateVehiclePanel();
            }, VehicleHelper.RetrieveCurrentVehicleName(SelectedVehicle)));

            width = UIVehiclePanelWrapper.Instance.width =
                UiVehicleTitleBar.Instance.width = UiVehicleTitleBar.Instance.DragHandle.width = widestWidth;
            UiVehicleTitleBar.Instance.RecenterElements();
            Align();

            Inputs.Find(x => x.name == "SelectedVehicle").relativePosition = new Vector3(12,
                                                                                         Inputs.Find(x => x.name == "CustomizeItExtendedVehicleResetButton").relativePosition.y);


            height = Inputs.Count * (UiUtils.FieldHeight + UiUtils.FieldMargin) + UiUtils.FieldMargin * 3;

            UIVehiclePanelWrapper.Instance.height = height + UiVehicleTitleBar.Instance.height;


            UIVehiclePanelWrapper.Instance.relativePosition = new Vector3(CustomizeItExtendedMod.Settings.PanelX,
                                                                          CustomizeItExtendedMod.Settings.PanelY);

            isVisible = UIVehiclePanelWrapper.Instance.isVisible =
                UiVehicleTitleBar.Instance.isVisible = UiVehicleTitleBar.Instance.DragHandle.isVisible = true;
        }