static void ChooseDoll(UnitEntityData unitEntityData) { try { if (!unitEntityData.IsMainCharacter && !unitEntityData.IsCustomCompanion() && GUILayout.Button("Destroy Doll", GUILayout.Width(DefaultLabelWidth))) { unitEntityData.Descriptor.Doll = null; unitEntityData.Descriptor.ForcceUseClassEquipment = false; CharacterManager.RebuildCharacter(unitEntityData); } var doll = DollResourcesManager.GetDoll(unitEntityData); var race = doll.Race; var gender = unitEntityData.Gender; CustomizationOptions customizationOptions = gender != Gender.Male ? race.FemaleOptions : race.MaleOptions; ChooseRace(unitEntityData, doll); ChooseEEL(unitEntityData, doll, "Face", customizationOptions.Heads, doll.Head.m_Link, (EquipmentEntityLink ee) => doll.SetHead(ee)); ChooseEEL(unitEntityData, doll, "Hair", customizationOptions.Hair, doll.Hair.m_Link, (EquipmentEntityLink ee) => doll.SetHair(ee)); if (customizationOptions.Beards.Length > 0) { ChooseEEL(unitEntityData, doll, "Beards", customizationOptions.Beards, doll.Beard.m_Link, (EquipmentEntityLink ee) => doll.SetBeard(ee)); } if (customizationOptions.Horns.Length > 0) { ChooseEEL(unitEntityData, doll, "Horns", customizationOptions.Horns, doll.Horn.m_Link, (EquipmentEntityLink ee) => doll.SetHorn(ee)); } ChooseRamp(unitEntityData, doll, "Hair Color", doll.GetHairRamps(), doll.HairRampIndex, (int index) => doll.SetHairColor(index)); ChooseRamp(unitEntityData, doll, "Skin Color", doll.GetSkinRamps(), doll.SkinRampIndex, (int index) => doll.SetSkinColor(index)); ChooseRamp(unitEntityData, doll, "Horn Color", doll.GetHornsRamps(), doll.HornsRampIndex, (int index) => doll.SetHornsColor(index)); ChooseRamp(unitEntityData, doll, "Primary Outfit Color", doll.GetOutfitRampsPrimary(), doll.EquipmentRampIndex, (int index) => doll.SetEquipColors(index, doll.EquipmentRampIndexSecondary)); ChooseRamp(unitEntityData, doll, "Secondary Outfit Color", doll.GetOutfitRampsSecondary(), doll.EquipmentRampIndexSecondary, (int index) => doll.SetEquipColors(doll.EquipmentRampIndex, index)); ReferenceArrayProxy <BlueprintRaceVisualPreset, BlueprintRaceVisualPresetReference> presets = doll.Race.Presets; BlueprintRaceVisualPreset racePreset = doll.RacePreset; /*if (unitEntityData.Descriptor.LeftHandedOverride == true && GUILayout.Button("Set Right Handed", GUILayout.Width(DefaultLabelWidth))) * { * unitEntityData.Descriptor.LeftHandedOverride = false; * unitEntityData.Descriptor.Doll = doll.CreateData(); * ViewManager.ReplaceView(unitEntityData, null); * unitEntityData.View.HandsEquipment.HandleEquipmentSetChanged(); * } * else if (unitEntityData.Descriptor.LeftHandedOverride == false && GUILayout.Button("Set Left Handed", GUILayout.Width(DefaultLabelWidth))) * { * unitEntityData.Descriptor.LeftHandedOverride = true; * unitEntityData.Descriptor.Doll = doll.CreateData(); * ViewManager.ReplaceView(unitEntityData, null); * unitEntityData.View.HandsEquipment.HandleEquipmentSetChanged(); * }*/ ChoosePortrait(unitEntityData); if (unitEntityData.IsMainCharacter || unitEntityData.IsCustomCompanion()) { ChooseAsks(unitEntityData); } } catch (Exception e) { Main.logger.Log(e.ToString()); } }
/* static void ChooseRace(UnitEntityData unitEntityData, DollState doll) * { * var currentRace = doll.Race; * var racess = new List<BlueprintRace> { }; * foreach(BlueprintRace race in BlueprintRoot.Instance.Progression.CharacterRaces) * { * racess.AddItem(race); * } * var races = racess.ToArray(); * foreach(BlueprintRace race in races) * { * Main.logger.Log(race.NameForAcronym); * } * /// var index = Array.FindIndex(races, (race) => race == currentRace); * var index = 1; * GUILayout.BeginHorizontal(); * ChooseFromList("Race", races, ref index, () => { * doll.SetRace(races[index]); * unitEntityData.Descriptor.Doll = doll.CreateData(); * CharacterManager.RebuildCharacter(unitEntityData); * }); * GUILayout.Label(" " + races[index].Name); * GUILayout.EndHorizontal(); * }*/ static void ChooseVisualPreset(UnitEntityData unitEntityData, DollState doll, string label, BlueprintRaceVisualPreset[] presets, BlueprintRaceVisualPreset currentPreset) { var index = Array.FindIndex(presets, (vp) => vp == currentPreset); ChooseFromList(label, presets, ref index, () => { doll.SetRacePreset(presets[index]); unitEntityData.Descriptor.Doll = doll.CreateData(); CharacterManager.RebuildCharacter(unitEntityData); }); }
static BlueprintRaceVisualPreset[] CopyPresets(BlueprintRace original, string prevGUID) { var newPresets = new BlueprintRaceVisualPreset[original.Presets.Length]; for (int i = 0; i < original.Presets.Length; i++) { newPresets[i] = ScriptableObject.CreateInstance <BlueprintRaceVisualPreset>(); var presetAssetGUID = GetDeterministicAssetID(prevGUID); BlueprintUtil.AddBlueprint(newPresets[i], presetAssetGUID); //RaceManager.assets[presetAssetGUID] = newPresets[i]; newPresets[i].RaceId = original.Presets[i].RaceId; newPresets[i].MaleSkeleton = original.Presets[i].MaleSkeleton; newPresets[i].FemaleSkeleton = original.Presets[i].FemaleSkeleton; newPresets[i].Skin = ScriptableObject.CreateInstance <KingmakerEquipmentEntity>(); var maleSkin = CopyLinks(original.Presets[i].Skin.GetLinks(Gender.Male, original.RaceId), presetAssetGUID + "MaleSalt"); var femaleSkin = CopyLinks(original.Presets[i].Skin.GetLinks(Gender.Female, original.RaceId), presetAssetGUID + "FemaleSalt"); Traverse.Create(newPresets[i].Skin).Field("m_RaceDependent").SetValue(false); Traverse.Create(newPresets[i].Skin).Field("m_MaleArray").SetValue(maleSkin); Traverse.Create(newPresets[i].Skin).Field("m_FemaleArray").SetValue(femaleSkin); prevGUID = presetAssetGUID; } return(newPresets); }