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); }
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))); } }
private void AddMutator([NotNull] IMutatorBase <TU> mutator) { mutator.Prepare(); _mutators.Add(mutator); }