private void DropdownChanged(UIComponent trigger, int selectedValue)
        {
            if (!isInitialized)
            {
                return;
            }
            DebugUtils.Log($"DropdownChanged: name = {trigger.name}, selected value is {selectedValue}.");
            //
            CustomizableRoadsignItem        affectedSign  = new CustomizableRoadsignItem();
            List <CustomizableRoadsignItem> affectedSigns = new List <CustomizableRoadsignItem>();

            if (trigger == _gantryDropdown)
            {
                affectedSign = AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "motorway overroad signs").FirstOrDefault();
                AmericanRoadsignsTool.ChangeRoadsignPropWithoutCustomAsset(affectedSign, selectedValue);
                AmericanRoadsignsTool.config.rendermode_highwaygantry = selectedValue;
            }
            else if (trigger == _highwayDropdown)
            {
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "motorway sign").FirstOrDefault());
                AmericanRoadsignsTool.ChangeRoadsignPropWithCustomAsset(affectedSigns, selectedValue);
                AmericanRoadsignsTool.config.rendermode_highwaysign = selectedValue;
            }
            else if (trigger == _noparkingDropdown)
            {
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "no parking sign").FirstOrDefault());
                AmericanRoadsignsTool.ChangeRoadsignPropWithCustomAsset(affectedSigns, selectedValue);
                AmericanRoadsignsTool.config.rendermode_noparking = selectedValue;
            }
            else if (trigger == _turningDropdown)
            {
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "no left turn sign").FirstOrDefault());
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "no right turn sign").FirstOrDefault());
                AmericanRoadsignsTool.ChangeRoadsignPropWithCustomAsset(affectedSigns, selectedValue);
                AmericanRoadsignsTool.config.rendermode_noturnings = selectedValue;
            }
            else if (trigger == _speedlimitDropdown)
            {
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "30 speed limit").FirstOrDefault());
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "40 speed limit").FirstOrDefault());
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "50 speed limit").FirstOrDefault());
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "60 speed limit").FirstOrDefault());
                affectedSigns.Add(AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "100 speed limit").FirstOrDefault());
                AmericanRoadsignsTool.ChangeRoadsignPropWithCustomAsset(affectedSigns, selectedValue);
                AmericanRoadsignsTool.config.rendermode_speedlimits = selectedValue;
            }
            else if (trigger == _streetnameDropdown)
            {
                affectedSign = AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "street name sign").FirstOrDefault();
                AmericanRoadsignsTool.ChangeRoadsignPropWithoutCustomAsset(affectedSign, selectedValue);
                AmericanRoadsignsTool.config.rendermode_streetname = selectedValue;
            }
            //
            AmericanRoadsignsTool.SaveConfig();
        }
 private void TextureCheckboxChanged(UIComponent trigger, bool isChecked)
 {
     if (!isInitialized)
     {
         return;
     }
     DebugUtils.Log($"CheckboxChanged: name = {trigger.name}, use alternative texture = {isChecked}.");
     //
     if (trigger == _textureCheckbox)
     {
         CustomizableRoadsignItem affectedSign = AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "motorway overroad signs").FirstOrDefault();
         AmericanRoadsignsTool.RetextureRoadSignProp("Motorway Overroad Signs", isChecked);
         AmericanRoadsignsTool.config.rendermode_highwaygantry_usealt = isChecked;
     }
     AmericanRoadsignsTool.SaveConfig();
     //
 }
 protected override void OnMouseMove(UIMouseEventParameter p)
 {
     if (p.buttons.IsFlagSet(UIMouseButton.Right))
     {
         var ratio = UIView.GetAView().ratio;
         position = new Vector3(position.x + (p.moveDelta.x * ratio), position.y + (p.moveDelta.y * ratio), position.z);
         //
         AmericanRoadsignsTool.config.buttonposition = absolutePosition;
         AmericanRoadsignsTool.SaveConfig();
         //
         if (AmericanRoadsignsTool.config.enable_debug)
         {
             DebugUtils.Log($"Button position changed to {absolutePosition}.");
         }
     }
     base.OnMouseMove(p);
 }
 private void CheckboxChanged(UIComponent trigger, bool isChecked)
 {
     if (!isInitialized)
     {
         return;
     }
     //
     if (trigger == _manholeHighwayCheckbox)
     {
         AmericanRoadsignsTool.ChangeLanePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "manhole").FirstOrDefault(), isChecked, "highway");
         AmericanRoadsignsTool.config.enable_manholes_highway = isChecked;
     }
     else if (trigger == _manholeElevatedCheckbox)
     {
         AmericanRoadsignsTool.ChangeLanePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "manhole").FirstOrDefault(), isChecked, "elevated");
         AmericanRoadsignsTool.config.enable_manholes_elevated = isChecked;
     }
     else if (trigger == _electricityBoxCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadSidePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "electricity box").FirstOrDefault(), isChecked);
         AmericanRoadsignsTool.config.enable_streetprops_electricitybox = isChecked;
     }
     else if (trigger == _fireHydrantCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadSidePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "fire hydrant").FirstOrDefault(), isChecked);
         AmericanRoadsignsTool.config.enable_streetprops_firehydrant = isChecked;
     }
     else if (trigger == _infoTerminalCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadSidePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "info terminal").FirstOrDefault(), isChecked);
         AmericanRoadsignsTool.config.enable_streetprops_infoterminal = isChecked;
     }
     else if (trigger == _parkingMeterCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadSidePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "parking meter").FirstOrDefault(), isChecked);
         AmericanRoadsignsTool.config.enable_streetprops_parkingmeter = isChecked;
     }
     else if (trigger == _randomPropCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadSidePropVisibility(AmericanRoadsignsTool.vanillaAssets.Where(x => x.name.ToLower() == "random street prop").FirstOrDefault(), isChecked);
         AmericanRoadsignsTool.config.enable_streetprops_random = isChecked;
     }
     //
     AmericanRoadsignsTool.SaveConfig();
 }
 private void CheckboxChanged(UIComponent trigger, bool isChecked)
 {
     if (!isInitialized)
     {
         return;
     }
     DebugUtils.Log($"CheckboxChanged: name = {trigger.name}, visible = {isChecked}.");
     //
     if (trigger == _gantryCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadsignPropVisibility("gantry", isChecked, true);
         AmericanRoadsignsTool.config.enable_gantrysigns = isChecked;
     }
     if (trigger == _highwayCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadsignPropVisibility("highway", isChecked, true);
         AmericanRoadsignsTool.config.enable_highwaysigns = isChecked;
     }
     if (trigger == _noparkingCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadsignPropVisibility("noparking", isChecked, true);
         AmericanRoadsignsTool.config.enable_speedlimitsigns = isChecked;
     }
     if (trigger == _turningCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadsignPropVisibility("turning", isChecked, true);
         AmericanRoadsignsTool.config.enable_turningsigns = isChecked;
     }
     if (trigger == _speedlimitCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadsignPropVisibility("speedlimit", isChecked, true);
         AmericanRoadsignsTool.config.enable_speedlimitsigns = isChecked;
     }
     if (trigger == _streetnameCheckbox)
     {
         AmericanRoadsignsTool.ChangeRoadsignPropVisibility("streetname", isChecked, true);
         AmericanRoadsignsTool.config.enable_streetnamesigns = isChecked;
     }
     //
     AmericanRoadsignsTool.SaveConfig();
 }
 private void CheckboxChanged(UIComponent trigger, bool isChecked)
 {
     if (!isInitialized)
     {
         return;
     }
     //
     if (trigger == _textureCheckbox)
     {
         //  Only for Americanized texture:
         //if (AmericanRoadsignsTool.config.rendermode_highwaygantry != 0)
         //{
         //    return;
         //}
         AmericanRoadsignsTool.config.rendermode_highwaygantry_usealt = isChecked;
         CustomizableRoadsignItem affectedSign = AmericanRoadsignsTool.CustomizableRoadsignsList.Where(x => x._originalSign.name.ToLower() == "motorway overroad signs").FirstOrDefault();
         AmericanRoadsignsTool.ChangeRoadsignPropWithoutCustomAsset(affectedSign, 0);
         //
         AmericanRoadsignsTool.SaveConfig();
         //
         _gantryDropdown.selectedIndex = 0;
     }
 }