/// <summary> /// Create the hero kit object if it does not exist. /// </summary> /// <param name="saveData">Save state data for the hero kit object.</param> /// <returns>The hero kit object that was created.</returns> private static HeroKitObject CreateHeroKitObject(HeroSaveData saveData) { // get hero kit object template GameObject template = Resources.Load <GameObject>("Hero Templates/Components/HeroKit Default Object"); // get the root object if it exists Transform parentObject = null; if (saveData.gameObjectRootName != "") { Transform rootObject = null; GameObject[] roots = SceneManager.GetActiveScene().GetRootGameObjects(); for (int i = 0; i < roots.Length; i++) { if (roots[i].name == saveData.gameObjectRootName) { rootObject = roots[i].transform; break; } } // get the parent object if it exists if (rootObject != null && saveData.gameObjectParentName != "") { Transform[] children = rootObject.GetComponentsInChildren <Transform>(); for (int i = 0; i < children.Length; i++) { if (children[i].name == saveData.gameObjectParentName) { parentObject = children[i]; break; } } if (parentObject == null) { parentObject = rootObject; } } } // create the game object GameObject gameObject = null; if (parentObject != null) { gameObject = UnityEngine.Object.Instantiate(template, new Vector3(), new Quaternion(), parentObject); } else { gameObject = UnityEngine.Object.Instantiate(template, new Vector3(), new Quaternion()); } // set up hero kit stuff HeroKitObject targetObject = gameObject.GetComponent <HeroKitObject>(); targetObject.heroGUID = saveData.heroGUID; return(targetObject); }
public void RemoveHeroData(HeroData hero) { if (heroDict.ContainsKey(hero.Id)) { HeroSaveData temp = heroDict[hero.Id]; heroDict.Remove(hero.Id); heroList.Remove(temp); } }
/// <summary> /// Load a hero kit object. /// </summary> /// <param name="saveData">Save state data for the hero kit object.</param> public static void LoadHeroKitObject(HeroSaveData saveData) { // get the hero kit object to update HeroKitObject targetObject = HeroKitDatabase.GetHeroKitObject(saveData.heroGUID); // if the hero kit object does not exist, add it to the scene if (targetObject == null) { targetObject = CreateHeroKitObject(saveData); targetObject.gameObject.name = saveData.gameObjectName; } else { // change name of game object in scene targetObject.gameObject.name = saveData.gameObjectName; } // update transform data AddTransform(targetObject, saveData); // add hero object if needed AddHeroObject(targetObject, saveData); // set the state of the hero object targetObject.heroStateData.state = saveData.stateID; // set the variables for the hero object AddVariables(targetObject.heroList.ints.items, saveData.variableInts); AddVariables(targetObject.heroList.floats.items, saveData.variableFloats); AddVariables(targetObject.heroList.bools.items, saveData.variableBools); AddVariables(targetObject.heroList.strings.items, saveData.variableStrings); // set the properties for the hero object int pIntCount = 0; int pFloatCount = 0; int pBoolCount = 0; int pStringCount = 0; for (int i = 0; i < saveData.propertyCount; i++) { AddProperties <IntField, int>(targetObject.heroProperties[i].itemProperties.ints.items, saveData.propertyInts, pIntCount, saveData.pIntCount[i]); AddProperties <FloatField, float>(targetObject.heroProperties[i].itemProperties.floats.items, saveData.propertyFloats, pFloatCount, saveData.pFloatCount[i]); AddProperties <BoolField, bool>(targetObject.heroProperties[i].itemProperties.bools.items, saveData.propertyBools, pBoolCount, saveData.pBoolCount[i]); AddProperties <StringField, string>(targetObject.heroProperties[i].itemProperties.strings.items, saveData.propertyStrings, pStringCount, saveData.pStringCount[i]); pIntCount += saveData.pIntCount[i]; pFloatCount += saveData.pFloatCount[i]; pBoolCount += saveData.pBoolCount[i]; pStringCount += saveData.pStringCount[i]; } // set state of hero kit object targetObject.gameObject.SetActive(saveData.gameObjectEnabled); }
/// <summary> /// Add transform data from save file to hero object. /// </summary> /// <param name="targetObject">The hero kit object.</param> /// <param name="saveData">The save data for the hero kit object.</param> private static void AddTransform(HeroKitObject targetObject, HeroSaveData saveData) { Vector3 heroPosition = new Vector3(saveData.heroPosition[0], saveData.heroPosition[1], saveData.heroPosition[2]); targetObject.transform.localPosition = heroPosition; //Vector3 heroRotation = new Vector3(saveData.heroRotation[0], saveData.heroRotation[1], saveData.heroRotation[2]); //targetObject.transform.localEulerAngles = heroRotation; Vector3 heroScale = new Vector3(saveData.heroScale[0], saveData.heroScale[1], saveData.heroScale[2]); targetObject.transform.localScale = heroScale; }
/// <summary> /// Add hero object to hero kit object. /// </summary> /// <param name="targetObject">The hero kit object.</param> /// <param name="saveData">The save data for the hero kit object.</param> private static void AddHeroObject(HeroKitObject targetObject, HeroSaveData saveData) { // alert: if there are two objects with same name, wrong data could be loaded HeroObject[] heroObjects = Resources.LoadAll <HeroObject>(""); HeroObject heroObject = null; for (int i = 0; i < heroObjects.Length; i++) { if (heroObjects[i].name == saveData.heroName) { heroObject = heroObjects[i]; } } if (targetObject.heroObject != heroObject) { targetObject.ChangeHeroObject(heroObject); } }
public void SaveHeroData(HeroData hero) { HeroSaveData heroSaveData; if (!heroDict.ContainsKey(hero.Id)) { heroSaveData = new HeroSaveData { id = hero.Id }; heroDict[hero.Id] = heroSaveData; heroList.Add(heroSaveData); } else { heroSaveData = heroDict[hero.Id]; } heroSaveData.name = hero.Name; heroSaveData.level = hero.Level; heroSaveData.experience = hero.Experience; heroSaveData.baseHealth = hero.BaseHealth; heroSaveData.baseSoulPoints = hero.BaseSoulPoints; heroSaveData.baseStrength = hero.BaseStrength; heroSaveData.baseIntelligence = hero.BaseIntelligence; heroSaveData.baseAgility = hero.BaseAgility; heroSaveData.baseWill = hero.BaseWill; heroSaveData.killCount = hero.killCount; heroSaveData.spriteName = hero.spriteName; foreach (EquipSlotType equipSlot in Enum.GetValues(typeof(EquipSlotType))) { if (equipSlot == EquipSlotType.RING) { continue; } if (hero.GetEquipmentInSlot(equipSlot) != null) { heroSaveData.equipList[(int)equipSlot] = hero.GetEquipmentInSlot(equipSlot).Id; } else { heroSaveData.equipList[(int)equipSlot] = Guid.Empty; } } if (hero.PrimaryArchetype != null) { HeroArchetypeData archetypeData = hero.PrimaryArchetype; HeroArchetypeSaveData archetypeSaveData = new HeroArchetypeSaveData() { id = archetypeData.Id, archetypeId = archetypeData.Base.idName }; archetypeSaveData.nodeLevelData = new List <HeroArchetypeSaveData.NodeLevelSaveData>(); foreach (KeyValuePair <int, int> pair in archetypeData.NodeLevels) { archetypeSaveData.nodeLevelData.Add(new HeroArchetypeSaveData.NodeLevelSaveData(pair.Key, pair.Value)); } heroSaveData.primaryArchetypeData = archetypeSaveData; } if (hero.SecondaryArchetype != null) { HeroArchetypeData archetypeData = hero.SecondaryArchetype; HeroArchetypeSaveData archetypeSaveData = new HeroArchetypeSaveData() { id = archetypeData.Id, archetypeId = archetypeData.Base.idName }; archetypeSaveData.nodeLevelData = new List <HeroArchetypeSaveData.NodeLevelSaveData>(); foreach (KeyValuePair <int, int> pair in archetypeData.NodeLevels) { archetypeSaveData.nodeLevelData.Add(new HeroArchetypeSaveData.NodeLevelSaveData(pair.Key, pair.Value)); } heroSaveData.secondaryArchetypeData = archetypeSaveData; } if (hero.GetAbilityFromSlot(0) != null) { if (heroSaveData.firstAbilitySlot == null) { heroSaveData.firstAbilitySlot = new HeroSaveData.HeroAbilitySlotSaveData(); } hero.SaveAbilitySlotData(0, heroSaveData.firstAbilitySlot); } else { heroSaveData.firstAbilitySlot = null; } if (hero.GetAbilityFromSlot(1) != null) { if (heroSaveData.secondAbilitySlot == null) { heroSaveData.secondAbilitySlot = new HeroSaveData.HeroAbilitySlotSaveData(); } hero.SaveAbilitySlotData(1, heroSaveData.secondAbilitySlot); } else { heroSaveData.secondAbilitySlot = null; } if (hero.GetAbilityFromSlot(2) != null) { if (heroSaveData.soulAbilitySlot == null) { heroSaveData.soulAbilitySlot = new HeroSaveData.HeroAbilitySlotSaveData(); } hero.SaveAbilitySlotData(2, heroSaveData.soulAbilitySlot); } else { heroSaveData.soulAbilitySlot = null; } }