public static void ResolveAllGraphicsPostfix(PawnGraphicSet __instance) { Pawn pawn = __instance.pawn; if (!pawn.RaceProps.Humanlike) { return; } CompFacepaint compFacepaint = pawn.GetComp <CompFacepaint>(); if (compFacepaint == null) { return; } compFacepaint.facepaintGraphicOne = compFacepaint.facepaintDefOne?.Graphic.GetColoredVersion(compFacepaint.facepaintDefOne.shader.Shader, compFacepaint.colorOne, compFacepaint.colorOne); compFacepaint.facepaintGraphicTwo = compFacepaint.facepaintDefTwo?.Graphic.GetColoredVersion(compFacepaint.facepaintDefTwo.shader.Shader, compFacepaint.colorTwo, compFacepaint.colorTwo); }
public override void DoWindowContents(Rect inRect) { Text.Font = GameFont.Medium; Text.Anchor = TextAnchor.MiddleCenter; // Check for a press of 'Return' and process as a confirmation if so bool pressedReturn = false; if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) { pressedReturn = true; Event.current.Use(); } // Preview var fullPawnConfirmationRect = inRect.LeftPart(0.4f).ContractedBy(12); var pawnLabelRect = fullPawnConfirmationRect.TopPart(0.08f); string pawnLabel = Pawn.Label; while (Text.CalcSize(pawnLabel).x > pawnLabelRect.width && Text.Font > GameFont.Tiny) { Text.Font--; } pawnLabel = Text.CalcSize(pawnLabel).x <= pawnLabelRect.width ? pawnLabel : pawnLabel.Truncate(pawnLabelRect.width, truncatedLabelCache); Widgets.Label(pawnLabelRect, Pawn.Label); var pawnConfirmationRect = fullPawnConfirmationRect.BottomPart(0.92f); var previewRect = pawnConfirmationRect.TopPartPixels(pawnConfirmationRect.width); GUI.DrawTexture(previewRect, ColonistBar.BGTex); previewRect = previewRect.ContractedBy(6); GUI.DrawTexture(previewRect, PortraitsCache.Get(Pawn, previewRect.size, Rot4.South)); var fullOptionRectsArea = inRect.RightPart(0.6f); // Hair/beard options var optionRectsArea = fullOptionRectsArea.TopPart(0.75f); var hairRect = optionRectsArea.LeftHalf().ContractedBy(12); var hairHeadingRect = hairRect.TopPart(0.08f); Widgets.Label(hairHeadingRect, "VanillaFactionsExpandedVikings.Facepaint".Translate()); var hairListRect = hairRect.BottomPart(0.92f); Widgets.DrawMenuSection(hairListRect); hairListRect = hairListRect.ContractedBy(6); var hairViewRect = new Rect(0, 0, hairListRect.width - 18, hairViewRectHeight); var beardRect = optionRectsArea.RightHalf().ContractedBy(12); var beardHeadingRect = beardRect.TopPart(0.08f); Widgets.Label(beardHeadingRect, "VanillaFactionsExpandedVikings.Facepaint".Translate()); var beardListRect = beardRect.BottomPart(0.92f); Widgets.DrawMenuSection(beardListRect); beardListRect = beardListRect.ContractedBy(6); var beardViewRect = new Rect(0, 0, beardListRect.width - 18, beardViewRectHeight); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; CompFacepaint compFacepaint = Pawn.GetComp <CompFacepaint>(); Rect firstListingViewRect = new Rect(hairViewRect); firstListingViewRect.height = 71 * orderedFacepaintDefs.Count; Rect secondListingViewRect = new Rect(beardViewRect); secondListingViewRect.height = 71 * orderedFacepaintDefs.Count; Widgets.BeginScrollView(hairListRect, ref hairScrollVec2, firstListingViewRect); var firstListing = new Listing_Standard(); firstListing.Begin(firstListingViewRect); for (int i = 0; i < orderedFacepaintDefs.Count; i++) { var hDef = orderedFacepaintDefs[i]; DrawRow(firstListing, hDef, compFacepaint.colorOne, ref this.newFacepaintCombo.facepaintDefOne); } firstListing.End(); Widgets.EndScrollView(); Widgets.BeginScrollView(beardListRect, ref beardScrollVec2, secondListingViewRect); var secondListing = new Listing_Standard(); secondListing.Begin(secondListingViewRect); for (int i = 0; i < orderedFacepaintDefs.Count; i++) { var hDef = orderedFacepaintDefs[i]; DrawRow(secondListing, hDef, compFacepaint.colorTwo, ref this.newFacepaintCombo.facepaintDefTwo); } secondListing.End(); Widgets.EndScrollView(); hairViewRectHeight = firstListing.CurHeight; beardViewRectHeight = secondListing.CurHeight; // Colour selection var fullColourRectsArea = fullOptionRectsArea.BottomPart(0.25f).ContractedBy(12); var colourRectsArea = fullColourRectsArea.TopPart(0.7f); if (coloursTied) { DrawColourChangeSection(colourRectsArea, ref this.newFacepaintCombo.colourOne); } else { DrawColourChangeSection(colourRectsArea.LeftPartPixels(colourRectsArea.width / 2 - 12), ref this.newFacepaintCombo.colourOne); DrawColourChangeSection(colourRectsArea.RightPartPixels(colourRectsArea.width / 2 - 12), ref this.newFacepaintCombo.colourTwo); } var fullCheckboxRectsArea = fullColourRectsArea.BottomPart(0.2f); var customCheckboxRect = fullCheckboxRectsArea.LeftPart(0.45f); Widgets.CheckboxLabeled(customCheckboxRect, "VanillaFactionsExpandedVikings.CustomMode".Translate(), ref colourSliders); var tiedCheckboxRect = fullCheckboxRectsArea.RightPart(0.45f); Widgets.CheckboxLabeled(tiedCheckboxRect, "VanillaFactionsExpandedVikings.ColoursTied".Translate(), ref coloursTied); // Work amount, Reset and Confirm var workConfirmRect = pawnConfirmationRect.BottomPart(0.2f).LeftPart(0.9f).RightPart(8f / 9); var workRect = workConfirmRect.TopHalf(); Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(workRect, $"{"WorkAmount".Translate()}: {((float) RestyleTicks).ToStringWorkAmount()}"); Text.Anchor = TextAnchor.UpperLeft; var resetConfirmRect = workConfirmRect.BottomHalf(); if (Widgets.ButtonText(resetConfirmRect.LeftPart(0.48f), "Reset".Translate())) { this.newFacepaintCombo = this.initFacepaintCombo; RimWorld.SoundDefOf.Click.PlayOneShotOnCamera(); } if (Widgets.ButtonText(resetConfirmRect.RightPart(0.48f), "Confirm".Translate()) || pressedReturn) { SetHairstyle(); Find.WindowStack.TryRemove(this); } }