public override bool IsOptionSelected(CustomPawn pawn, PawnLayerOption option) { PawnLayerOptionAlienAddon addonOption = option as PawnLayerOptionAlienAddon; if (addonOption == null) { return(false); } if (pawn.AlienRace != null) { ThingComp alienComp = pawn.Pawn.AllComps.FirstOrDefault((ThingComp comp) => { return(comp.GetType().Name == "AlienComp"); }); if (alienComp == null) { return(false); } FieldInfo variantsField = ReflectionUtil.GetPublicField(alienComp, "addonVariants"); if (variantsField == null) { return(false); } List <int> variants = null; try { variants = (List <int>)variantsField.GetValue(alienComp); } catch (Exception) { return(false); } int selectedIndex = variants[AlienAddon.VariantIndex]; return(selectedIndex == addonOption.Index); } return(false); }
public override void SelectOption(CustomPawn pawn, PawnLayerOption option) { PawnLayerOptionAlienAddon addonOption = option as PawnLayerOptionAlienAddon; if (addonOption == null) { return; } if (pawn.AlienRace != null) { ThingComp alienComp = pawn.Pawn.AllComps.FirstOrDefault((ThingComp comp) => { return(comp.GetType().Name == "AlienComp"); }); if (alienComp == null) { return; } FieldInfo variantsField = ReflectionUtil.GetPublicField(alienComp, "addonVariants"); if (variantsField == null) { return; } List <int> variants = null; try { variants = (List <int>)variantsField.GetValue(alienComp); } catch (Exception) { return; } variants[AlienAddon.VariantIndex] = addonOption.Index; pawn.MarkPortraitAsDirty(); } }
private List <PawnLayerOption> InitializeAlienAddonOptions(AlienRace race, AlienRaceBodyAddon addon) { if (addon.OptionCount == 0) { return(null); } List <PawnLayerOption> result = new List <PawnLayerOption>(); for (int i = 0; i < addon.OptionCount; i++) { PawnLayerOptionAlienAddon option = new PawnLayerOptionAlienAddon(); option.Label = "EdB.PC.Pawn.PawnLayer.AlienAddonOption".Translate(new object[] { i + 1 }); option.Index = i; result.Add(option); } return(result); }