protected Dictionary <BlendUnit, float> GetBlendAmounts(SimDescription sim) { Dictionary <BlendUnit, float> blends; if (!sValues.TryGetValue(sim.SimDescriptionId, out blends)) { using (CASParts.OutfitBuilder builder = new CASParts.OutfitBuilder(sim, CASParts.sPrimary)) { if (builder.OutfitValid) { blends = new Dictionary <BlendUnit, float>(); sValues.Add(sim.SimDescriptionId, blends); foreach (BlendUnit blend in FacialBlends.BlendUnits) { FacialBlendData data = new FacialBlendData(blend); blends.Add(blend, FacialBlends.GetValue(builder.Builder, data)); } builder.Invalidate(); } } } return(blends); }
private static void OnAcceptButtonClick(WindowBase sender, UIButtonClickEventArgs args) { try { CASGenetics ths = CASGenetics.gSingleton; if (ths == null) { return; } if (!ths.mHourglassVisible) { args.Handled = true; if (ths.mSelectedOffspring != null) { if (CASPuck.Instance != null) { ths.mReturnState = ths.mSelectedOffspring.IsPet ? CASState.PetSummary : CASState.Summary; CASPuck.Instance.AttemptingToAdd = true; CASPuck.ShowInputBlocker(); Responder.Instance.CASModel.RequestLoadSim(ths.mSelectedOffspring, false); Responder.Instance.CASModel.RequestAddSimToHousehold(false); Responder.Instance.CASModel.RequestClearStack(); CASController.Singleton.SetCurrentState(ths.mReturnState); } else { FacialBlends.CopyGenetics(ths.mSelectedOffspring as SimDescription, sChoice, false, false); new SavedOutfit.Cache(sChoice).PropagateGenetics(sChoice, CASParts.sPrimary); SimOutfit currentOutfit = sChoice.CreatedSim.CurrentOutfit; if (currentOutfit != null) { ThumbnailManager.GenerateHouseholdSimThumbnail(currentOutfit.Key, currentOutfit.Key.InstanceId, 0x0, ThumbnailSizeMask.Large | ThumbnailSizeMask.ExtraLarge | ThumbnailSizeMask.Medium | ThumbnailSizeMask.Small, ThumbnailTechnique.Default, true, false, sChoice.AgeGenderSpecies); } DestroyHousehold(); CASGenetics.Unload(); } } } } catch (Exception e) { Common.Exception("OnAcceptButtonClick", e); } }
protected override bool Run(SimDescription a, SimDescription b) { if (!ApplyAll) { List <Item> choices = new List <Item>(); foreach (Style style in Enum.GetValues(typeof(Style))) { choices.Add(new Item(style)); } Item choice = new CommonSelection <Item>(Name, choices).SelectSingle(); if (choice == null) { return(false); } mStyle = choice.Value; } bool onlyNonZero = false; bool onlySliders = false; switch (mStyle) { case Style.NonZero: onlyNonZero = true; onlySliders = false; break; case Style.NonZeroOnlySliders: onlyNonZero = true; onlySliders = true; break; case Style.OnlySliders: onlyNonZero = false; onlySliders = true; break; } FacialBlends.CopyGenetics(a, b, onlyNonZero, onlySliders); new SavedOutfit.Cache(b).PropagateGenetics(b, CASParts.sPrimary); return(true); }
protected SimDescription GetRandomSim(CASAgeGenderFlags gender, CASAgeGenderFlags species) { SimDescription result = null; if (species == CASAgeGenderFlags.Human) { SimUtils.SimCreationSpec sim = new SimUtils.SimCreationSpec(); Vector2 fatRange = Manager.GetValue <FatRangeOption <TManager>, Vector2>(); Vector2 fitRange = Manager.GetValue <FitRangeOption <TManager>, Vector2>(); WorldName worldName = GetGeneticWorld(); sim.Gender = gender; sim.Age = CASAgeGenderFlags.Adult; sim.Species = species; sim.Weight = RandomUtil.GetFloat(fatRange.x, fatRange.y); sim.Fitness = RandomUtil.GetFloat(fitRange.x, fitRange.y); sim.Description = ""; sim.GivenName = SimUtils.GetRandomFamilyName(worldName); result = sim.Instantiate(worldName, uint.MaxValue); result.VoiceVariation = (VoiceVariationType)RandomUtil.GetInt(0, 2); result.VoicePitchModifier = RandomUtil.GetFloat(0, 1f); Vector2 skintToneRange = Manager.GetValue <SkinToneRangeOption <TManager>, Vector2>(); result.SkinToneIndex = RandomUtil.GetFloat(skintToneRange.x, skintToneRange.y); } else { result = GeneticsPet.MakeRandomPet(CASAgeGenderFlags.Adult, gender, species, 1f); } SetBustMuscleSliders(result); FacialBlends.RandomizeBlends(mStats.AddStat, result, Manager.GetValue <MutationSetRangeOption <TManager>, Vector2>(), true, Manager.GetValue <MutationSetRangeOption <TManager>, Vector2>(), false, Manager.GetValue <AllowAlienHouseholdOption <TManager>, bool>()); mDispose.Add(result); mStats.IncStat("Immigrant: Random Sim"); return(result); }
protected override bool Run(SimDescription me, bool singleSelection) { if (!ApplyAll) { string text = StringInputDialog.Show(Name, Common.Localize(GetTitlePrefix() + ":Prompt", me.IsFemale, new object[] { me }), "0"); if (string.IsNullOrEmpty(text)) { return(false); } if (!int.TryParse(text, out mRange)) { SimpleMessageDialog.Show(Name, Common.Localize("Numeric:Error")); return(false); } if (mRange <= 0) { return(false); } mAdd = false; if (TwoButtonDialog.Show( Common.Localize(GetTitlePrefix() + ":AddPrompt", me.IsFemale, new object[] { me, mRange }), Common.Localize(GetTitlePrefix() + ":Add"), Common.Localize(GetTitlePrefix() + ":Reroll") )) { mAdd = true; } } float maximum = MasterController.Settings.mSliderMultiple; Vector2 range = new Vector2(-mRange / 256f, mRange / 256f); FacialBlends.RandomizeBlends(null, me, range, mAdd, range, true, false); return(true); }
public SimDescription CreateNewSim(SimDescription mom, SimDescription dad, CASAgeGenderFlags ages, CASAgeGenderFlags genders, CASAgeGenderFlags species, bool updateGenealogy) { if (dad == null) { dad = GetSim(CASAgeGenderFlags.Male, species, mom); if (dad == null) { dad = GetSim(CASAgeGenderFlags.Female, species, mom); if (dad == null) { return(null); } } } CASAgeGenderFlags gender = (CASAgeGenderFlags)RandomUtil.SelectOneRandomBit((uint)(genders)); CASAgeGenderFlags age = (CASAgeGenderFlags)RandomUtil.SelectOneRandomBit((uint)(ages)); if (dad.CelebrityManager == null) { dad.Fixup(); } if (mom.CelebrityManager == null) { mom.Fixup(); } SimDescription newSim = null; try { if (mom.Species == CASAgeGenderFlags.Human) { newSim = Genetics.MakeDescendant(dad, mom, age, gender, 100, new Random(), false, updateGenealogy, true, GetGeneticWorld(), false); newSim.HomeWorld = GameUtils.GetCurrentWorld(); } else { newSim = GeneticsPet.MakePetDescendant(dad, mom, age, gender, mom.Species, new Random(), updateGenealogy, GeneticsPet.SetName.SetNameNonInteractive, 0, OccultTypes.None); } } catch (Exception e) { Common.Exception(dad, mom, e); } if (newSim == null) { return(null); } if (!updateGenealogy) { FacialBlends.RandomizeBlends(mStats.AddStat, newSim, new Vector2(0f, 0f), true, Manager.GetValue <MutationUnsetRangeOption <TManager>, Vector2>(), true, Manager.GetValue <AllowAlienHouseholdOption <TManager>, bool>()); } List <OccultTypes> occults = new List <OccultTypes>(); occults.AddRange(OccultTypeHelper.CreateList(mom.OccultManager.CurrentOccultTypes, true)); occults.AddRange(OccultTypeHelper.CreateList(dad.OccultManager.CurrentOccultTypes, true)); if (updateGenealogy) { Manager.Sims.ApplyOccultChance(Manager, newSim, occults, Manager.GetValue <ChanceOfHybridOption <TManager>, int>(), Manager.GetValue <MaximumOccultOption <TManager>, int>()); } else if (species == CASAgeGenderFlags.Human) { int maxCelebrityLevel = Manager.GetValue <MaxCelebrityLevelOption <TManager>, int>(); if (maxCelebrityLevel >= 0) { newSim.CelebrityManager.mOwner = newSim; Skill scienceSkill = SkillManager.GetStaticSkill(SkillNames.Science); if (scienceSkill != null) { scienceSkill.mNonPersistableData.SkillCategory |= SkillCategory.Hidden; } try { newSim.CelebrityManager.ForceSetLevel((uint)RandomUtil.GetInt(maxCelebrityLevel)); } finally { if (scienceSkill != null) { scienceSkill.mNonPersistableData.SkillCategory &= ~SkillCategory.Hidden; } } } occults.AddRange(Manager.GetValue <ImmigrantOccultOption <TManager>, List <OccultTypes> >()); if (occults.Count > 0) { if (RandomUtil.RandomChance(Manager.GetValue <ChanceOfOccultOption <TManager>, int>())) { OccultTypeHelper.Add(newSim, RandomUtil.GetRandomObjectFromList(occults), false, false); } } } Manager.Sims.ApplyOccultChance(Manager, newSim, occults, Manager.GetValue <ChanceOfHybridOption <TManager>, int>(), Manager.GetValue <MaximumOccultOption <TManager>, int>()); OccultTypeHelper.ValidateOccult(newSim, null); OccultTypeHelper.TestAndRebuildWerewolfOutfit(newSim); newSim.FirstName = Manager.Sims.EnsureUniqueName(newSim); List <Trait> traits = new List <Trait>(newSim.TraitManager.List); foreach (Trait trait in traits) { if (trait.IsHidden) { newSim.TraitManager.RemoveElement(trait.Guid); } } List <Trait> choices = AgingManager.GetValidTraits(newSim, true, true, true); if (choices.Count > 0) { while (!newSim.TraitManager.TraitsMaxed()) { Trait choice = RandomUtil.GetRandomObjectFromList <Trait>(choices); if (!newSim.TraitManager.AddElement(choice.Guid)) { break; } } } if (SimFromBinEvents.OnGeneticSkinBlend != null) { SimFromBinEvents.OnGeneticSkinBlend(mStats, newSim, mom, dad, Manager); } FixInvisibleTask.Perform(newSim, true); if (SimFromBinEvents.OnSimFromBinUpdate != null) { SimFromBinEvents.OnSimFromBinUpdate(mStats, newSim, mom, dad, Manager); } INameTakeOption nameTake = Manager.GetOption <NameTakeOption <TManager> >(); if ((!updateGenealogy) && (nameTake != null)) { bool wasEither; newSim.LastName = Manager.Sims.HandleName(nameTake, mom, dad, out wasEither); } else if (mom != null) { newSim.LastName = mom.LastName; } else if (dad != null) { newSim.LastName = dad.LastName; } if (!updateGenealogy && Manager.GetValue <CustomNamesOnlyOption <TManager>, bool>()) { newSim.LastName = LastNameListBooter.GetRandomName(!Manager.GetValue <CustomNamesOnlyOption <TManager>, bool>(), newSim.Species, newSim.IsFemale); } return(newSim); }
protected bool PrivatePerform(SimDescription a, SimDescription b, SimDescription priorBaby) { if ((priorBaby != null) && (RandomUtil.RandomChance(GetValue <ChanceOfIdenticalTwinOption, int>()))) { FacialBlends.CopyGenetics(priorBaby, Sim, false, false); new SavedOutfit.Cache(Sim).PropagateGenetics(Sim, CASParts.sPrimary); IncStat("Identical"); return(true); } else { List <SimDescription> parents = new List <SimDescription>(); List <WorldName> worlds = new List <WorldName>(); if (a != null) { SimDescription sim = Relationships.GetSim(a.Genealogy); if (sim != null) { parents.Add(sim); worlds.Add(a.HomeWorld); } } if (b != null) { SimDescription sim = Relationships.GetSim(b.Genealogy); if (sim != null) { parents.Add(sim); worlds.Add(b.HomeWorld); } } if (GetValue <SkinOption, bool>()) { AlterSkinBlend(this, Sim, parents); } if (parents.Count == 2) { List <SimDescription> allParents = new List <SimDescription>(parents); foreach (SimDescription parent in parents) { foreach (SimDescription grandParent in Relationships.GetParents(parent)) { allParents.Add(grandParent); } } BlendWings(allParents); using (CASParts.OutfitBuilder builder = new CASParts.OutfitBuilder(Sim, CASParts.sPrimary)) { builder.Builder.Species = CASAgeGenderFlags.Human; builder.Builder.UseCompression = true; if (!builder.OutfitValid) { IncStat("Skin Blend: Outfit Fail"); return(false); } else { InheritFacialBlends(builder.Builder, parents, new Random()); builder.Builder.SkinToneIndex = Sim.SkinToneIndex; builder.Builder.SkinTone = Sim.SkinToneKey; } } new SavedOutfit.Cache(Sim).PropagateGenetics(Sim, CASParts.sPrimary); IncStat("Blended"); return(true); } else { IncStat("Not Two"); return(false); } } }
protected override bool PrivateUpdate(ScenarioFrame frame) { SimDescription newSim = null; using (SimFromBin <ManagerSim> bin = new SimFromBin <ManagerSim>(this, Sims)) { CASAgeGenderFlags gender = Sim.Gender; switch (GetValue <GenderOption, BabyGenderScenario.FirstBornGender>()) { case BabyGenderScenario.FirstBornGender.Male: gender = CASAgeGenderFlags.Male; break; case BabyGenderScenario.FirstBornGender.Female: gender = CASAgeGenderFlags.Female; break; } newSim = bin.CreateNewSim(Sim.Age, gender, CASAgeGenderFlags.Human); if (newSim == null) { IncStat("Creation Fail"); return(false); } } bool genderChanged = (Sim.Gender != newSim.Gender); bool result = FacialBlends.CopyGenetics(newSim, Sim, false, false); Sim.VoiceVariation = newSim.VoiceVariation; Sim.VoicePitchModifier = newSim.VoicePitchModifier; Sim.FirstName = newSim.FirstName; if (genderChanged) { Sim.Gender = newSim.Gender; SavedOutfit.Cache cache = new SavedOutfit.Cache(newSim); Dictionary <OutfitCategories, bool> replaced = new Dictionary <OutfitCategories, bool>(); Sim.RemoveOutfits(OutfitCategories.Career, true); SimOutfit geneOutfit = CASParts.GetOutfit(Sim, CASParts.sPrimary, false); foreach (SavedOutfit.Cache.Key outfit in cache.Outfits) { using (CASParts.OutfitBuilder builder = new CASParts.OutfitBuilder(Sim, outfit.mKey, geneOutfit)) { builder.Builder.Gender = Sim.Gender; outfit.Apply(builder, false, null, null); if (!replaced.ContainsKey(outfit.Category)) { replaced.Add(outfit.Category, true); CASParts.RemoveOutfits(Sim, outfit.Category, false); } } } if (Sim.CreatedSim != null) { Sim.CreatedSim.UpdateOutfitInfo(); Sim.CreatedSim.RefreshCurrentOutfit(true); SwitchOutfits.SwitchNoSpin(Sim.CreatedSim, new CASParts.Key(OutfitCategories.Everyday, 0)); } } else { new SavedOutfit.Cache(Sim).PropagateGenetics(Sim, CASParts.sPrimary); } if (newSim.OccultManager.CurrentOccultTypes != OccultTypes.None) { if (Instantiation.PerformOffLot(Sim, Household.ActiveHousehold.LotHome, null) != null) { List <OccultTypes> occults = OccultTypeHelper.CreateList(newSim, true); foreach (OccultTypes occult in occults) { switch (occult) { case OccultTypes.Frankenstein: Sim.TraitManager.AddElement(TraitNames.Brave); Sim.TraitManager.AddElement(TraitNames.Hydrophobic); break; } } Sims.ApplyOccultChance(this, Sim, occults, 100, int.MaxValue); } if (Sim.GetOutfitCount(OutfitCategories.Everyday) > 1) { Sim.RemoveOutfit(OutfitCategories.Everyday, 1, true); } SimOutfit currentOutfit = Sim.GetOutfit(OutfitCategories.Everyday, 0); if (currentOutfit != null) { try { ThumbnailManager.GenerateHouseholdSimThumbnail(currentOutfit.Key, currentOutfit.Key.InstanceId, 0x0, ThumbnailSizeMask.Large | ThumbnailSizeMask.ExtraLarge | ThumbnailSizeMask.Medium | ThumbnailSizeMask.Small, ThumbnailTechnique.Default, true, false, Sim.AgeGenderSpecies); } catch (Exception e) { Common.Exception(Sim, e); } } } Deaths.CleansingKill(newSim, true); if (!result) { return(false); } if (Common.kDebugging) { Common.DebugNotify(GetTitlePrefix(PrefixType.Pure) + ": " + Sim.FullName, Sim.CreatedSim); } SpeedTrap.Sleep(); return(true); }