/// <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);
        }
Exemple #2
0
 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);
            }
        }
Exemple #6
0
    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;
        }
    }