Пример #1
0
 public static bool Prefix(ushort vehicleID, ref Vehicle data, TransferManager.TransferReason material,
                           TransferManager.TransferOffer offer)
 {
     Debug.Log("Start Transfer Called");
     Debug.Log("Start Transfer Called");
     return(DistrictHelper.CanTransfer(data.m_sourceBuilding, material, offer));
 }
Пример #2
0
        private static void DistrictToggleCheck(UIComponent comp, bool value)
        {
            DebugHelper.Log($"Toggling {comp.name} to {value}");

            DistrictOptions customOptions =
                AdvancedDistrictOptionsTool.instance.CustomDistrictOptions.TryGetValue(
                    AdvancedDistrictOptionsTool.instance.SelectedDistrictID, out var props)
                    ? props
                    : new DistrictOptions();

            if (value)
            {
                customOptions.AllowedDistricts.Add(DistrictHelper.RetrieveDistrictIDFromName(comp.name));
            }
            else
            {
                customOptions.AllowedDistricts.Remove(DistrictHelper.RetrieveDistrictIDFromName(comp.name));
            }

            if (AdvancedDistrictOptionsTool.instance.CustomDistrictOptions.TryGetValue(
                    AdvancedDistrictOptionsTool.instance.SelectedDistrictID, out var _))
            {
                AdvancedDistrictOptionsTool.instance.CustomDistrictOptions[
                    AdvancedDistrictOptionsTool.instance.SelectedDistrictID] = customOptions;
            }
            else
            {
                AdvancedDistrictOptionsTool.instance.CustomDistrictOptions.Add(AdvancedDistrictOptionsTool.instance.SelectedDistrictID, customOptions);
            }

            foreach (var id in AdvancedDistrictOptionsTool.instance.CustomDistrictOptions[AdvancedDistrictOptionsTool.instance.SelectedDistrictID].AllowedDistricts)
            {
                DebugHelper.Log($"{DistrictManager.instance.GetDistrictName(id)} exists in {DistrictManager.instance.GetDistrictName(AdvancedDistrictOptionsTool.instance.SelectedDistrictID)}'s Allowed List");
            }
        }
Пример #3
0
        public static UICheckBox CreateCheckbox(UIComponent parent, string name)
        {
            var checkBox = parent.AddUIComponent <UICheckBox>();

            checkBox.name             = name;
            checkBox.width            = 20f;
            checkBox.height           = 20f;
            checkBox.relativePosition = Vector3.zero;

            var sprite = checkBox.AddUIComponent <UISprite>();

            sprite.spriteName       = "ToggleBase";
            sprite.size             = new Vector2(16f, 16f);
            sprite.relativePosition = new Vector3(2f, 2f);

            checkBox.checkedBoxObject = sprite.AddUIComponent <UISprite>();
            ((UISprite)checkBox.checkedBoxObject).spriteName = "ToggleBaseFocused";
            checkBox.checkedBoxObject.size             = new Vector2(16f, 16f);
            checkBox.checkedBoxObject.relativePosition = Vector3.zero;


            checkBox.isChecked = ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                ServiceRestrictTool.instance.SelectedBuildingID, out var options) &&
                                 options.CoveredDistricts.Contains(DistrictHelper.RetrieveDistrictIDFromName(name));
            checkBox.eventCheckChanged += OnCheckChanged;


            return(checkBox);
        }
Пример #4
0
        private static void OnParkCheckChanged(UIComponent comp, bool value)
        {
            if (ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                    ServiceRestrictTool.instance.SelectedBuildingID, out var options))
            {
                if (value)
                {
                    options.CoveredParks.Add(DistrictHelper.RetrieveParkIDFromName(comp.name));
                }
                else
                {
                    options.CoveredParks.Remove(DistrictHelper.RetrieveParkIDFromName(comp.name));
                }
            }
            else
            {
                if (!value)
                {
                    return;
                }

                ServiceBuildingOptions serviceBuildingOptions = new ServiceBuildingOptions();
                serviceBuildingOptions.CoveredParks.Add(DistrictHelper.RetrieveParkIDFromName(comp.name));

                ServiceRestrictTool.instance.CustomServiceBuildingOptions.Add(
                    ServiceRestrictTool.instance.SelectedBuildingID, serviceBuildingOptions);
            }
        }
Пример #5
0
        private void Setup()
        {
            name             = "ServiceRestrictionRestrictIndustriesPanel";
            isVisible        = false;
            canFocus         = true;
            isInteractive    = true;
            relativePosition = new Vector3(0f, UiIndustriesTitleBar.Instance.height);
            width            = parent.width;

            float widestWidth = 0f;

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

            foreach (var industry in DistrictHelper.RetrieveAllIndustryNames())
            {
                var label = AddUIComponent <UILabel>();
                label.name          = industry + "Label";
                label.text          = industry;
                label.textScale     = 0.9f;
                label.isInteractive = false;

                try
                {
                    Inputs.Add(UIUtils.CreateParkCheckbox(this, industry));
                    _labels.Add(label);

                    if (label.width + UIUtils.FieldWidth + UIUtils.FieldMargin * 6 > widestWidth)
                    {
                        widestWidth = label.width + UIUtils.FieldWidth + UIUtils.FieldMargin * 6;
                    }
                }
                catch (Exception e)
                {
                    Debug.Log($"Couldn't create Checkbox for {industry}. {e.Message} - {e.StackTrace}");
                }
            }

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

            width = IndustriesPanelWrapper.Instance.width =
                UiIndustriesTitleBar.Instance.width = UiIndustriesTitleBar.Instance.DragHandle.width = widestWidth;

            UiIndustriesTitleBar.Instance.RecenterElements();
            Align();

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

            IndustriesPanelWrapper.Instance.height = height + UiIndustriesTitleBar.Instance.height;

            IndustriesPanelWrapper.Instance.relativePosition = new Vector3(
                RestrictedDistrictPanelWrapper.Instance.relativePosition.x + IndustriesPanelWrapper.Instance.width +
                20f,
                RestrictedDistrictPanelWrapper.Instance.relativePosition.y);

            isVisible = IndustriesPanelWrapper.Instance.isVisible =
                UiIndustriesTitleBar.Instance.isVisible = UiIndustriesTitleBar.Instance.DragHandle.isVisible = true;
        }
Пример #6
0
        public static void StartTest()
        {
            List <District> districts = DistrictHelper.GetProvinces();

            foreach (District district in districts)
            {
                System.Console.WriteLine(district.Name + district.Extra);
                List <District> districts2 = DistrictHelper.GetDistrictsByParentId(district.Id);
                foreach (District district1 in districts2)
                {
                    System.Console.WriteLine(district.Name + district.Extra + " - " + district1.Name + district1.Extra);
                }
            }
        }
        public static bool Prefix(ushort buildingID, ref Building data, TransferManager.TransferReason material,
                                  TransferManager.TransferOffer offer)
        {
            if (DistrictHelper.BuildingTransfer(buildingID, material, offer))
            {
                DebugHelper.Log($"Transfer Request Accepted.");
                return(true);
            }

            BuildingHelper.MoveRequest(buildingID, ref data, material, offer);
            {
                DebugHelper.Log("Moving Transfer Request.");
                return(false);
            }
        }
Пример #8
0
        public static bool Prefix(ushort buildingID, ref Building data, TransferManager.TransferReason reason,
                                  TransferManager.TransferOffer offer)
        {
            Debug.Log("Start Transfer Called");
            if (DistrictHelper.CanTransfer(buildingID, reason, offer))
            {
                Debug.Log("Transfer Request Accepted.");
                return(true);
            }

            BuildingHelper.MoveRequest(buildingID, ref data, reason, offer);
            {
                Debug.Log("Moving Transfer Request.");
                return(false);
            }
        }
Пример #9
0
        public static bool Prefix(ushort buildingID, ref Building data, TransferManager.TransferReason material,
                                  TransferManager.TransferOffer offer)
        {
            Debug.Log("Start Transfer Called");
            if (DistrictHelper.CanTransfer(buildingID, material, offer))
            {
                Debug.Log(
                    $"Transfer Request Accepted from {DistrictManager.instance.GetDistrictName(DistrictManager.instance.GetDistrict(data.m_position))}");
                return(true);
            }

            BuildingHelper.MoveRequest(buildingID, ref data, material, offer);
            {
                Debug.Log(
                    $"Moving Transfer Request from {DistrictManager.instance.GetDistrictName(DistrictManager.instance.GetDistrict(data.m_position))}");
                return(false);
            }
        }
Пример #10
0
        public override void Update()
        {
            base.Update();

            Inputs.Find(x => x.name == "CampusesButton").isEnabled   = DistrictHelper.RetrieveAllCampusNames().Count > 0;
            Inputs.Find(x => x.name == "IndustriesButton").isEnabled =
                DistrictHelper.RetrieveAllIndustryNames().Count > 0;
            Inputs.Find(x => x.name == "ParksButton").isEnabled = DistrictHelper.RetrieveAllParkNames().Count > 0;

            if (!ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                    ServiceRestrictTool.instance.SelectedBuildingID, out var options))
            {
                return;
            }

            ((UIButton)Inputs.Find(x => x.name == "Restrict EmptyingButton")).normalBgSprite =
                options.RestrictEmptying ? "ListItemHighlight" : "ButtonMenu";
        }
        public static void MoveRequest(ushort buildingID, ref Building data, TransferManager.TransferReason reason,
                                       TransferManager.TransferOffer offer)
        {
            var buildingType = data.Info.m_buildingAI.GetType().BaseType;

            FastList <ushort> buildings = BuildingManager.instance.GetServiceBuildings(data.Info.GetService());

            if (buildings == null)
            {
                return;
            }

            bool moveRequest = reason == TransferManager.TransferReason.Fire ||
                               reason == TransferManager.TransferReason.Crime ||
                               reason == TransferManager.TransferReason.Dead ||
                               reason == TransferManager.TransferReason.Fire2 ||
                               reason == TransferManager.TransferReason.Garbage ||
                               reason == TransferManager.TransferReason.RoadMaintenance ||
                               reason == TransferManager.TransferReason.Snow ||
                               reason == TransferManager.TransferReason.Sick ||
                               reason == TransferManager.TransferReason.Sick2 ||
                               reason == TransferManager.TransferReason.Taxi ||
                               reason == TransferManager.TransferReason.OutgoingMail ||
                               reason == TransferManager.TransferReason.SortedMail ||
                               reason == TransferManager.TransferReason.Mail ||
                               reason == TransferManager.TransferReason.FloodWater;

            for (ushort x = 0; x < buildings.m_size; x++)
            {
                ushort delegateBuildingId = buildings.m_buffer[x];

                if (delegateBuildingId == buildingID)
                {
                    continue;
                }

                var delegateBuilding = BuildingManager.instance.m_buildings.m_buffer[delegateBuildingId];

                if (!delegateBuilding.m_flags.IsFlagSet(Building.Flags.Created) ||
                    delegateBuilding.m_problems.IsFlagSet(Notification.Problem.Emptying) ||
                    delegateBuilding.m_problems.IsFlagSet(Notification.Problem.EmptyingFinished))
                {
                    continue;
                }

                if (!buildingType.IsInstanceOfType(delegateBuilding.Info.m_buildingAI))
                {
                    continue;
                }

                if (delegateBuilding.Info.m_buildingAI.IsFull(delegateBuildingId, ref delegateBuilding))
                {
                    continue;
                }

                if (moveRequest && !SpareVehicles(delegateBuildingId, ref delegateBuilding))
                {
                    continue;
                }

                if (moveRequest)
                {
                    if (DistrictHelper.BuildingTransfer(delegateBuildingId, reason, offer))
                    {
                        delegateBuilding.Info.m_buildingAI.StartTransfer(delegateBuildingId, ref delegateBuilding,
                                                                         reason, offer);
                    }
                }
                else
                {
                    offer.Building = delegateBuildingId;
                    offer.Position = delegateBuilding.m_position;

                    if (DistrictHelper.BuildingTransfer(buildingID, reason, offer))
                    {
                        data.Info.m_buildingAI.StartTransfer(buildingID, ref data, reason, offer);
                    }
                }
            }
        }
Пример #12
0
        private void Setup()
        {
            name             = "ServiceRestrictionRestrictDistrictsPanel";
            isVisible        = false;
            canFocus         = true;
            isInteractive    = true;
            relativePosition = new Vector3(0f, UiTitleBar.Instance.height);
            width            = parent.width;

            float widestWidth = 0f;

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

            foreach (var district in DistrictHelper.RetrieveAllDistrictNames().Where(x =>
                                                                                     x != DistrictManager.instance.GetDistrictName(DistrictManager.instance.GetDistrict(BuildingManager
                                                                                                                                                                        .instance.m_buildings.m_buffer[ServiceRestrictTool.instance.SelectedBuildingID].m_position))))
            {
                var label = AddUIComponent <UILabel>();
                label.name          = district + "Label";
                label.text          = district;
                label.textScale     = 0.9f;
                label.isInteractive = false;

                try
                {
                    Inputs.Add(UIUtils.CreateCheckbox(this, district));
                    _labels.Add(label);


                    if (label.width + UIUtils.FieldWidth + UIUtils.FieldMargin * 6 > widestWidth)
                    {
                        widestWidth = label.width + UIUtils.FieldWidth + UIUtils.FieldMargin * 6;
                    }
                }
                catch (Exception e)
                {
                    Debug.Log($"Couldn't create Checkbox for {district}. {e.Message} - {e.StackTrace}");
                }
            }

            Inputs.Add(UIUtils.CreateCheckbox(this, "aaThisDistrictOnly"));

            var thisDistrictLabel = AddUIComponent <UILabel>();

            thisDistrictLabel.name = "aaThisDistrictOnlyLabel";
            thisDistrictLabel.text = DistrictManager.instance.GetDistrictName(
                DistrictManager.instance.GetDistrict(BuildingManager.instance.m_buildings
                                                     .m_buffer[ServiceRestrictTool.instance.SelectedBuildingID].m_position));
            thisDistrictLabel.textScale     = 0.9f;
            thisDistrictLabel.isInteractive = false;
            thisDistrictLabel.textColor     = Color.green;

            _labels.Add(thisDistrictLabel);

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

            SetupEmptyButton();

            Inputs.Add(UIUtils.CreateCheckbox(this, "Invert", (component, value) =>
            {
                if (ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                        ServiceRestrictTool.instance.SelectedBuildingID, out var options))
                {
                    options.Inverted = !options.Inverted;
                }
                else
                {
                    ServiceBuildingOptions newOptions = new ServiceBuildingOptions {
                        Inverted = true
                    };
                    ServiceRestrictTool.instance.CustomServiceBuildingOptions.Add(
                        ServiceRestrictTool.instance.SelectedBuildingID, newOptions);
                }
            }));


            SetupButtons();
            SetupCopyButtons();

            width = RestrictedDistrictPanelWrapper.Instance.width =
                UiTitleBar.Instance.width = UiTitleBar.Instance.DragHandle.width = widestWidth;

            UiTitleBar.Instance.RecenterElements();
            Align();
            AlignButtons();

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

            RestrictedDistrictPanelWrapper.Instance.height = height + UiTitleBar.Instance.height;

            RestrictedDistrictPanelWrapper.Instance.relativePosition =
                new Vector3(ServiceRestrictionsMod.Settings.PanelX, ServiceRestrictionsMod.Settings.PanelY);

            isVisible = RestrictedDistrictPanelWrapper.Instance.isVisible =
                UiTitleBar.Instance.isVisible = UiTitleBar.Instance.DragHandle.isVisible = true;
        }
Пример #13
0
        private void SetupCopyButtons()
        {
            Inputs.Add(UIUtils.CreateButton(this, "Copy Options", (component, value) =>
            {
                if (!ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                        ServiceRestrictTool.instance.SelectedBuildingID, out var options))
                {
                    return;
                }

                Clipboard.CopyOptions(options, ServiceRestrictTool.instance.SelectedBuildingID);
            }, 0.6f));


            var copyButton = Inputs.Find(x => x.name == "Copy OptionsButton");

            if (!ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                    ServiceRestrictTool.instance.SelectedBuildingID, out var _))
            {
                copyButton.isEnabled = false;
                copyButton.tooltip   = "No Options are present on this building.";
            }

            copyButton.tooltip = "Copies the existing options to the clipboard." + Environment.NewLine +
                                 "This will overwrite any previous copied settings on the clipboard.";


            Inputs.Add(UIUtils.CreateButton(this, "Paste Options", (component, param) =>
            {
                if (Clipboard.CopiedOptions == null)
                {
                    return;
                }

                if (!ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                        ServiceRestrictTool.instance.SelectedBuildingID, out var _))
                {
                    ServiceBuildingOptions newOptions = Clipboard.PasteOptions();

                    ServiceRestrictTool.instance.CustomServiceBuildingOptions.Add(
                        ServiceRestrictTool.instance.SelectedBuildingID, newOptions);
                }
                else
                {
                    var tempOptions = Clipboard.PasteOptions();
                    ServiceRestrictTool.instance.CustomServiceBuildingOptions[
                        ServiceRestrictTool.instance.SelectedBuildingID] = tempOptions;
                }

                foreach (var input in Inputs)
                {
                    if (input is UICheckBox checkbox)
                    {
                        switch (checkbox.name)
                        {
                        case "Areas without a district.":
                            {
                                checkbox.isChecked =
                                    ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                                        ServiceRestrictTool.instance.SelectedBuildingID, out var props) &&
                                    props.CoveredDistricts.Contains(0);
                            }
                            break;

                        case "aaThisDistrictOnly":
                            {
                                checkbox.isChecked =
                                    ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                                        ServiceRestrictTool.instance.SelectedBuildingID, out var props) &&
                                    props.CoveredDistricts.Contains(DistrictHelper.RetrieveDistrictIDFromName(
                                                                        DistrictManager.instance.GetDistrictName(
                                                                            DistrictManager.instance.GetDistrict(BuildingManager.instance.m_buildings
                                                                                                                 .m_buffer[ServiceRestrictTool.instance.SelectedBuildingID]
                                                                                                                 .m_position))));
                            }
                            break;

                        default:
                            {
                                checkbox.isChecked =
                                    ServiceRestrictTool.instance.CustomServiceBuildingOptions.TryGetValue(
                                        ServiceRestrictTool.instance.SelectedBuildingID, out var props) &&
                                    props.CoveredDistricts.Contains(
                                        DistrictHelper.RetrieveDistrictIDFromName(checkbox.name));
                            }
                            break;
                        }
                    }
                }
            }, 0.6f));

            var pasteButton = Inputs.Find(x => x.name == "Paste OptionsButton");

            if (Clipboard.CopiedOptions == null)
            {
                pasteButton.isEnabled = false;
                pasteButton.tooltip   = "No Options have been copied yet.";
            }

            pasteButton.tooltip =
                $"Pastes the copied settings from {CustomizeItExtendedCompatibility.RetrieveBuildingName(Clipboard.CopiedBuildingID)} onto this building." +
                Environment.NewLine +
                "This will overwrite this buildings current settings.";
        }
 public static bool Prefix(ref Citizen data, TransferManager.TransferReason reason,
                           TransferManager.TransferOffer offer)
 {
     return(DistrictHelper.CitizenTransfer(ref data, reason, offer));
 }
 public static bool Prefix(ushort vehicleID, ref Vehicle data, TransferManager.TransferReason material,
                           TransferManager.TransferOffer offer)
 {
     return(DistrictHelper.VehicleTransfer(ref data, material, offer));
 }