Example #1
0
        private void DrawMutatorMenu(Rect canvas)
        {
            var addRect      = new Rect(0f, 0f, _addMutatorTextSize.x + 16f, Text.LineHeight);
            var applyRect    = new Rect(canvas.width - (_applyTextSize.x + 16f), 0f, _applyTextSize.x + 16f, Text.LineHeight);
            var mutatorsRect = new Rect(0f, addRect.height, canvas.width, canvas.height - addRect.height);
            var viewPort     = new Rect(0f, 0f, mutatorsRect.width - 16f, _mutators.Count * Text.LineHeight);

            if (Widgets.ButtonText(addRect, _addMutatorText))
            {
                Find.WindowStack.Add(new FloatMenu(_mutateAdders));
            }

            if (Widgets.ButtonText(applyRect, _applyText))
            {
                ExecuteMutators();
            }

            _mutatorScrollPos = GUI.BeginScrollView(mutatorsRect, _mutatorScrollPos, viewPort);
            IMutatorBase <TU> toRemove = null;

            for (var i = 0; i < _mutators.Count; i++)
            {
                IMutatorBase <TU> mutator = _mutators[i];
                var lineRect = new Rect(0f, Text.LineHeight * i, mutatorsRect.width, Text.LineHeight);

                if (!lineRect.IsVisible(mutatorsRect, _mutatorScrollPos))
                {
                    continue;
                }

                if (i % 2 == 0)
                {
                    Widgets.DrawLightHighlight(lineRect);
                }

                Rect mutatorRect = lineRect.Trim(Direction8Way.East, Text.LineHeight - 2f);
                mutator.Draw(mutatorRect);

                if (UiHelper.FieldButton(lineRect, Widgets.CheckboxOffTex))
                {
                    toRemove = mutator;
                }
            }

            GUI.EndScrollView();

            if (toRemove == null)
            {
                return;
            }

            _mutators.Remove(toRemove);
            UpdateView(true);
        }
Example #2
0
        private protected void DiscoverMutators(DomainIndexer.EditorTarget target)
        {
            foreach (DomainIndexer.MutatorEntry entry in DomainIndexer.Mutators)
            {
                if (entry.Target != target)
                {
                    continue;
                }

                IMutatorBase <TU> mutator = CreateMutator(entry);

                if (mutator == null)
                {
                    continue;
                }

                _mutateAdders.Add(new FloatMenuOption(mutator.Label, () => AddMutator(mutator)));
            }
        }
Example #3
0
 private void AddMutator([NotNull] IMutatorBase <TU> mutator)
 {
     mutator.Prepare();
     _mutators.Add(mutator);
 }