public override void LoadData(GameInstance gameInstance)
        {
            GameInstance.AddAttributes(attributes);
            GameInstance.AddItems(new Item[] { gameInstance.DefaultWeaponItem });
            GameInstance.AddItems(items);
            GameInstance.AddWeaponTypes(new WeaponType[] { gameInstance.DefaultWeaponType });
            GameInstance.AddSkills(skills);
            GameInstance.AddNpcDialogs(npcDialogs);
            GameInstance.AddQuests(quests);
            GameInstance.AddGuildSkills(guildSkills);
            GameInstance.AddCharacters(playerCharacters);
            GameInstance.AddCharacters(monsterCharacters);
            GameInstance.AddCharacterEntities(playerCharacterEntities);
            GameInstance.AddCharacterEntities(monsterCharacterEntities);
            GameInstance.AddMapInfos(mapInfos);
            // Add hit effects
            List <GameEffectCollection> weaponHitEffects = new List <GameEffectCollection>();

            if (gameInstance.DefaultDamageElement.hitEffects != null)
            {
                weaponHitEffects.Add(gameInstance.DefaultDamageElement.hitEffects);
            }
            foreach (DamageElement damageElement in damageElements)
            {
                if (damageElement.hitEffects != null)
                {
                    weaponHitEffects.Add(damageElement.hitEffects);
                }
            }
            GameInstance.AddGameEffectCollections(weaponHitEffects);
            // Tell game instance that data loaded
            gameInstance.LoadedGameData();
        }
        public override void LoadData(GameInstance gameInstance)
        {
            // Use Resources Load Async ?
            BaseGameData[]        gameDataList        = Resources.LoadAll <BaseGameData>("");
            BaseCharacterEntity[] characterEntityList = Resources.LoadAll <BaseCharacterEntity>("");

            List <Attribute>                  attributes               = new List <Attribute>();
            List <DamageElement>              damageElements           = new List <DamageElement>();
            List <Item>                       items                    = new List <Item>();
            List <Skill>                      skills                   = new List <Skill>();
            List <NpcDialog>                  npcDialogs               = new List <NpcDialog>();
            List <Quest>                      quests                   = new List <Quest>();
            List <GuildSkill>                 guildSkills              = new List <GuildSkill>();
            List <PlayerCharacter>            playerCharacters         = new List <PlayerCharacter>();
            List <MonsterCharacter>           monsterCharacters        = new List <MonsterCharacter>();
            List <BasePlayerCharacterEntity>  playerCharacterEntities  = new List <BasePlayerCharacterEntity>();
            List <BaseMonsterCharacterEntity> monsterCharacterEntities = new List <BaseMonsterCharacterEntity>();
            List <MapInfo>                    mapInfos                 = new List <MapInfo>();

            // Filtering game data
            foreach (BaseGameData gameData in gameDataList)
            {
                if (gameData is Attribute)
                {
                    attributes.Add(gameData as Attribute);
                }
                if (gameData is DamageElement)
                {
                    damageElements.Add(gameData as DamageElement);
                }
                if (gameData is Item)
                {
                    items.Add(gameData as Item);
                }
                if (gameData is Skill)
                {
                    skills.Add(gameData as Skill);
                }
                if (gameData is NpcDialog)
                {
                    npcDialogs.Add(gameData as NpcDialog);
                }
                if (gameData is Quest)
                {
                    quests.Add(gameData as Quest);
                }
                if (gameData is GuildSkill)
                {
                    guildSkills.Add(gameData as GuildSkill);
                }
                if (gameData is PlayerCharacter)
                {
                    playerCharacters.Add(gameData as PlayerCharacter);
                }
                if (gameData is MonsterCharacter)
                {
                    monsterCharacters.Add(gameData as MonsterCharacter);
                }
                if (gameData is MapInfo)
                {
                    mapInfos.Add(gameData as MapInfo);
                }
            }

            // Filtering character entity
            foreach (BaseCharacterEntity characterEntity in characterEntityList)
            {
                if (characterEntity is BasePlayerCharacterEntity)
                {
                    playerCharacterEntities.Add(characterEntity as BasePlayerCharacterEntity);
                }
                if (characterEntity is BaseMonsterCharacterEntity)
                {
                    monsterCharacterEntities.Add(characterEntity as BaseMonsterCharacterEntity);
                }
            }

            GameInstance.AddAttributes(attributes);
            GameInstance.AddItems(new Item[] { gameInstance.DefaultWeaponItem });
            GameInstance.AddItems(items);
            GameInstance.AddWeaponTypes(new WeaponType[] { gameInstance.DefaultWeaponType });
            GameInstance.AddSkills(skills);
            GameInstance.AddNpcDialogs(npcDialogs);
            GameInstance.AddQuests(quests);
            GameInstance.AddGuildSkills(guildSkills);
            GameInstance.AddCharacters(playerCharacters);
            GameInstance.AddCharacters(monsterCharacters);
            GameInstance.AddCharacterEntities(playerCharacterEntities);
            GameInstance.AddCharacterEntities(monsterCharacterEntities);
            GameInstance.AddMapInfos(mapInfos);
            // Add hit effects
            List <GameEffectCollection> weaponHitEffects = new List <GameEffectCollection>();

            if (gameInstance.DefaultDamageElement.hitEffects != null)
            {
                weaponHitEffects.Add(gameInstance.DefaultDamageElement.hitEffects);
            }
            foreach (DamageElement damageElement in damageElements)
            {
                if (damageElement.hitEffects != null)
                {
                    weaponHitEffects.Add(damageElement.hitEffects);
                }
            }
            GameInstance.AddGameEffectCollections(weaponHitEffects);
            // Tell game instance that data loaded
            gameInstance.LoadedGameData();
        }