Esempio n. 1
0
        public override void ProcessInput(Event ev)
        {
            // Show change color option
            List <FloatMenuOption> list = new List <FloatMenuOption>
            {
                new FloatMenuOption("MorePlanning.ChangeColor".Translate(),
                                    delegate { Find.WindowStack.Add(new ColorSelectorDialog(Color)); })
            };


            Find.WindowStack.Add(new FloatMenu(list));

            // Select color
            MorePlanningMod.Instance.SelectedColor = Color;

            if (Find.DesignatorManager.SelectedDesignator == null)
            {
                var designatorPlanPaste = MenuUtility.GetPlanningDesignator <AddDesignator>();
                Find.DesignatorManager.Select(designatorPlanPaste);
            }
        }
        public override void DesignateMultiCell(IEnumerable <IntVec3> cells)
        {
            var planDesignations = cells.Select(cell => MapUtility.GetPlanDesignationAt(cell, Map)).Where(cell => cell != null).ToList();

            cells = planDesignations.Select(plan => plan.target.Cell);

            if (planDesignations.Count == 0)
            {
                Messages.Message("MorePlanning.MissingPlanningDesignations".Translate(), MessageTypeDefOf.RejectInput);
                return;
            }

            int left   = cells.Min(cell => cell.x);
            int top    = cells.Max(cell => cell.z);
            int right  = cells.Max(cell => cell.x);
            int bottom = cells.Min(cell => cell.z);

            IntVec2 mousePos = new IntVec2((int)Math.Floor(UI.MouseMapPosition().x), (int)Math.Floor(UI.MouseMapPosition().z));

            // Adjust mouse position to nearest planning designation
            if (mousePos.x < left)
            {
                mousePos.x = left;
            }
            else if (mousePos.x > left)
            {
                mousePos.x = right;
            }

            if (mousePos.z > top)
            {
                mousePos.z = top;
            }
            else if (mousePos.z < bottom)
            {
                mousePos.z = bottom;
            }

            int sizeCompX = mousePos.x;
            int sizeCompZ = mousePos.z;

            List <PlanInfo> planDesignationInfo = new List <PlanInfo>();

            // Copy all data from designations
            foreach (var planDesignation in planDesignations)
            {
                var planInfo = new PlanInfo
                {
                    Color = planDesignation.Color,
                    Pos   = new IntVec3(planDesignation.target.Cell.x - sizeCompX, planDesignation.target.Cell.y, planDesignation.target.Cell.z - sizeCompZ)
                };
                planDesignationInfo.Add(planInfo);
            }

            var planCopy = new PlanInfoSet(planDesignationInfo);

            PasteDesignator.CurrentPlanCopy = planCopy;
            Finalize(true);

            var designatorPlanPaste = MenuUtility.GetPlanningDesignator <PasteDesignator>();

            Find.DesignatorManager.Select(designatorPlanPaste);
        }