private void ClearObjectsAndSlots(HashSet <string> usedSlotsSet, List <GameObject> objectsList) { foreach (string usedSlotSet in usedSlotsSet) { CacheUmaAvatar.ClearSlot(usedSlotSet); } usedSlotsSet.Clear(); foreach (GameObject objectList in objectsList) { Destroy(objectList); } objectsList.Clear(); }
public override void SetEquipItems(IList <CharacterItem> equipItems) { tempEquipItems = equipItems; if (!IsUmaCharacterCreated) { return; } ClearObjectsAndSlots(equipItemUsedSlots, equipItemObjects); if (CacheUmaAvatar.activeRace == null || CacheUmaAvatar.activeRace.racedata == null || equipItems == null) { return; } string raceName = CacheUmaAvatar.activeRace.racedata.raceName; Item tempEquipmentItem; UMATextRecipe[] receipes; BaseEquipmentEntity tempEquipmentEntity; foreach (CharacterItem equipItem in equipItems) { tempEquipmentItem = equipItem.GetEquipmentItem(); if (tempEquipmentItem == null) { continue; } SetEquipmentObject(equipItemObjects, tempEquipmentItem.equipmentModels, equipItem.level, out tempEquipmentEntity); if (!tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes)) { continue; } SetSlot(equipItemUsedSlots, receipes); } // Update avatar CacheUmaAvatar.BuildCharacter(true); CacheUmaAvatar.ForceUpdate(true, true, true); }
private void SetSlot(HashSet <string> usedSlotsSet, UMATextRecipe[] receipes) { if (usedSlotsSet == null || receipes == null || receipes.Length == 0) { return; } foreach (UMATextRecipe receipeSlot in receipes) { if (receipeSlot == null || string.IsNullOrEmpty(receipeSlot.wardrobeSlot) || usedSlotsSet.Contains(receipeSlot.wardrobeSlot)) { // If data is empty or slot already used, skip it continue; } usedSlotsSet.Add(receipeSlot.wardrobeSlot); CacheUmaAvatar.SetSlot(receipeSlot); } }
public override void SetEquipWeapons(EquipWeapons equipWeapons) { tempEquipWeapons = equipWeapons; SetClipBasedOnWeapon(equipWeapons); if (!IsUmaCharacterCreated) { return; } ClearObjectsAndSlots(equipWeaponUsedSlots, equipWeaponObjects); if (CacheUmaAvatar.activeRace == null || CacheUmaAvatar.activeRace.racedata == null || equipWeapons == null) { return; } string raceName = CacheUmaAvatar.activeRace.racedata.raceName; Item tempEquipmentItem; UMATextRecipe[] receipes; // Setup right hand weapon if (equipWeapons.rightHand != null) { tempEquipmentItem = equipWeapons.rightHand.GetWeaponItem(); if (tempEquipmentItem != null) { SetEquipmentObject(equipWeaponObjects, tempEquipmentItem.equipmentModels, equipWeapons.rightHand.level, out rightHandEquipmentEntity); if (tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes)) { SetSlot(equipWeaponUsedSlots, receipes); } } } // Setup left hand weapon if (equipWeapons.leftHand != null) { // Weapon tempEquipmentItem = equipWeapons.leftHand.GetWeaponItem(); if (tempEquipmentItem != null) { SetEquipmentObject(equipWeaponObjects, tempEquipmentItem.subEquipmentModels, equipWeapons.leftHand.level, out leftHandEquipmentEntity); if (tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes)) { SetSlot(equipWeaponUsedSlots, receipes); } } // Shield tempEquipmentItem = equipWeapons.leftHand.GetShieldItem(); if (tempEquipmentItem != null) { SetEquipmentObject(equipWeaponObjects, tempEquipmentItem.equipmentModels, equipWeapons.leftHand.level, out leftHandEquipmentEntity); if (tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes)) { SetSlot(equipWeaponUsedSlots, receipes); } } } // Update avatar CacheUmaAvatar.BuildCharacter(true); CacheUmaAvatar.ForceUpdate(true, true, true); }
IEnumerator ApplyUmaAvatarRoutine(UmaAvatarData avatarData) { int i; UmaRace race = CurrentGameInstance.UmaRaces[avatarData.raceIndex]; UmaRaceGender gender = race.genders[avatarData.genderIndex]; CacheUmaAvatar.ChangeRace(gender.raceData.raceName); yield return(null); // Set character hair, beard, eyebrows (or other things up to your settings) if (avatarData.slots != null) { Dictionary <string, List <UMATextRecipe> > recipes = CacheUmaAvatar.AvailableRecipes; string slotName; for (i = 0; i < gender.customizableSlots.Length; ++i) { if (i >= avatarData.slots.Length) { break; } slotName = gender.customizableSlots[i].name; CacheUmaAvatar.SetSlot(recipes[slotName][avatarData.slots[i]]); } } // Set skin color, eyes color, hair color (or other things up to your settings) if (avatarData.colors != null) { SharedColorTable colorTable; for (i = 0; i < race.colorTables.Length; ++i) { if (i >= avatarData.colors.Length) { break; } colorTable = race.colorTables[i]; CacheUmaAvatar.SetColor(colorTable.sharedColorName, colorTable.colors[avatarData.colors[i]]); } } // Set equip items if it is already set if (tempEquipWeapons != null) { SetEquipWeapons(tempEquipWeapons); } if (tempEquipItems != null) { SetEquipItems(tempEquipItems); } // Update avatar CacheUmaAvatar.BuildCharacter(true); CacheUmaAvatar.ForceUpdate(true, true, true); yield return(null); // Set character dna if (avatarData.dnas != null) { Dictionary <string, DnaSetter> dnas = null; while (dnas == null || dnas.Count == 0) { dnas = CacheUmaAvatar.GetDNA(); yield return(null); } List <string> dnaNames = new List <string>(dnas.Keys); dnaNames.Sort(); string dnaName; for (i = 0; i < dnaNames.Count; ++i) { if (i >= avatarData.dnas.Length) { break; } dnaName = dnaNames[i]; dnas[dnaName].Set(avatarData.dnas[i] * 0.01f); } } // Update avatar after set dna CacheUmaAvatar.ForceUpdate(true, false, false); }