public void LoadUnitsDataFromJson(JsonCharacter[] jsonCharacters) { CharacterDataset[] characterDatasets = new CharacterDataset[unitList.Length]; for (int i = 0; i < characterDatasets.Length; i++) { characterDatasets[i] = new CharacterDataset(); characterDatasets[i].character = unitList[i].GetComponent <Character>(); characterDatasets[i].infos = new Dictionary <Rarity, CharacterInfo>(); unitDict.Add((UnitName)Enum.Parse(typeof(UnitName), unitList[i].name), characterDatasets[i]); } foreach (var jsonCharacter in jsonCharacters) { GameObject prefab = null; foreach (var unit in unitList) { if (jsonCharacter.character_type_name == unit.name) { prefab = unit; break; } } if (prefab == null) { continue; } CharacterInfo charInfo = new CharacterInfo(); charInfo.characterName = jsonCharacter.character_name; charInfo.unitName = (UnitName)Enum.Parse(typeof(UnitName), jsonCharacter.character_type_name); charInfo.rarity = (Rarity)Enum.Parse(typeof(Rarity), jsonCharacter.rarity); charInfo.attackSpeed = jsonCharacter.attack_speed; charInfo.maxHP = jsonCharacter.max_hp; charInfo.maxMP = jsonCharacter.max_mp; charInfo.damage = jsonCharacter.damage; charInfo.armor = jsonCharacter.armor; charInfo.attackDist = jsonCharacter.attack_dist; charInfo.criticalPercent = jsonCharacter.critical_percent; charInfo.criticalDamagePercent = jsonCharacter.critical_damage_percent; unitDict[charInfo.unitName].infos.Add(charInfo.rarity, charInfo); } }
private async Task ExecuteLoadDataCommand() { // uncomment once crudi works i think //if(first) //{ // first = false; // InitalLoadDataCommand(); //} //else { if (IsBusy) { return; } IsBusy = true; try { CharacterDataset.Clear(); StartingPlayers.Clear(); var cData = ctrl.Players; foreach (var data in cData) { StartingPlayers.Add(data); CharacterDataset.Add(data); } MonsterDataset.Clear(); var mData = ctrl.Monsters; foreach (var data in mData) { MonsterDataset.Add(data); } } catch (Exception ex) { Debug.WriteLine(ex); } finally { IsBusy = false; } } }
public Character GetFromPool(UnitName unitName, Rarity rarity) { if (unitList.Count <= 0) { // 풀에 유닛이 없는경우 5개 한번에 만들어놓음 var tempName = UnitName.unit_archer; for (int i = 0; i < 5; i++) { CharacterDataset prefabCharacterDataset = Database.Instance.GetUnitDataset(tempName); GameObject newGameObject = Instantiate(prefabCharacterDataset.character.gameObject); newGameObject.name = prefabCharacterDataset.character.gameObject.name; newGameObject.SetActive(false); newGameObject.transform.SetParent(transform); AddNewUnit(newGameObject.GetComponent <Character>()); } } Character character = unitList.Pop(); CharacterDataset baseCharacterDataset = Database.Instance.GetUnitDataset(unitName); character.myHealth.dieClip = baseCharacterDataset.character.myHealth.dieClip; character.spriteRenderer.material = Database.Instance.rarityMaterial[(int)rarity]; character.animator.runtimeAnimatorController = baseCharacterDataset.character.animator.runtimeAnimatorController; character.characterInfo = (CharacterInfo)baseCharacterDataset.infos[rarity].Clone(); // 스킬복사 if (character.myAttack.skills.Length != baseCharacterDataset.character.myAttack.skills.Length) { character.myAttack.skills = new Skill[baseCharacterDataset.character.myAttack.skills.Length]; } for (int i = 0; i < baseCharacterDataset.character.myAttack.skills.Length; i++) { character.myAttack.skills[i] = (Skill)baseCharacterDataset.character.myAttack.skills[i].Clone(); } character.gameObject.name = character.characterInfo.unitName.ToString(); return(character); }
private async Task InitalLoadDataCommand() { if (IsBusy) { return; } IsBusy = true; try { CharacterDataset.Clear(); var cData = await DataStore.GetAllAsync_Character(true); foreach (var data in cData) { StartingPlayers.Add(data); CharacterDataset.Add(data); } MonsterDataset.Clear(); var mData = ctrl.Monsters; foreach (var data in mData) { MonsterDataset.Add(data); } } catch (Exception ex) { Debug.WriteLine(ex); } finally { // temp cause crudi not working IsBusy = false; } }
public CharacterInfo CreateRandomStat(UnitName unitName, Rarity rarity, Prefix prefix) { CharacterDataset dataset = Database.Instance.GetUnitDataset(unitName); CharacterInfo datasetCharInfo = (CharacterInfo)dataset.infos[rarity].Clone(); datasetCharInfo.printName = datasetCharInfo.characterName; switch (rarity) { case Rarity.Normal: datasetCharInfo.printName = "일반 " + datasetCharInfo.printName; break; case Rarity.Rare: datasetCharInfo.printName = "희귀 " + datasetCharInfo.printName; break; case Rarity.Unique: datasetCharInfo.printName = "유일 " + datasetCharInfo.printName; break; case Rarity.Legend: datasetCharInfo.printName = "전설 " + datasetCharInfo.printName; break; case Rarity.Epic: datasetCharInfo.printName = "신화 " + datasetCharInfo.printName; break; default: break; } datasetCharInfo.damage *= Random.Range(0.9f, 1.1f); datasetCharInfo.maxHP *= Random.Range(0.9f, 1.1f); datasetCharInfo.maxMP *= Random.Range(0.9f, 1.1f); datasetCharInfo.armor *= Random.Range(0.9f, 1.1f); datasetCharInfo.currentHP = datasetCharInfo.maxHP; datasetCharInfo.prefix = prefix; switch (prefix) { case Prefix.HighSpeed: datasetCharInfo.printName = "재빠른 " + datasetCharInfo.printName; datasetCharInfo.attackSpeed *= 1.5f; break; case Prefix.SingleBlow: datasetCharInfo.printName = "일격의 " + datasetCharInfo.printName; datasetCharInfo.damage *= 1.5f; datasetCharInfo.attackSpeed *= 0.8f; break; case Prefix.Tough: datasetCharInfo.printName = "단단한 " + datasetCharInfo.printName; datasetCharInfo.armor = (datasetCharInfo.armor + 10) * 1.5f; datasetCharInfo.maxHP *= 1.5f; datasetCharInfo.currentHP = datasetCharInfo.maxHP; break; case Prefix.Weak: datasetCharInfo.printName = "나약한 " + datasetCharInfo.printName; datasetCharInfo.maxHP *= 4f / 5f; datasetCharInfo.currentHP = datasetCharInfo.maxHP; break; case Prefix.Assassin: datasetCharInfo.printName = "암살의 " + datasetCharInfo.printName; datasetCharInfo.criticalDamagePercent += 0.5f; datasetCharInfo.criticalPercent += 30f; break; /* * case Prefix.Random: * datasetCharInfo.printName = "인생도박꾼 " + datasetCharInfo.printName; * datasetCharInfo.damage *= Random.Range(0.7f, 1.1f); * datasetCharInfo.maxHP *= Random.Range(0.7f, 1.1f); * datasetCharInfo.maxMP *= Random.Range(0.7f, 1.1f); * datasetCharInfo.armor *= Random.Range(0.7f, 1.1f); * datasetCharInfo.attackSpeed += Random.Range(0.1f, 0.4f); * datasetCharInfo.currentHP = datasetCharInfo.maxHP; * break; * case Prefix.FakeExpert: * datasetCharInfo.printName = "X문가 " + datasetCharInfo.printName; * datasetCharInfo.criticalPercent += 100f; * datasetCharInfo.criticalDamagePercent -= 0.9f; * break; * case Prefix.Carefull: * datasetCharInfo.printName = "신중한 " + datasetCharInfo.printName; * datasetCharInfo.damage *= 4; * datasetCharInfo.attackSpeed *= 2f/3f; * datasetCharInfo.criticalPercent *= 0.3f; * break; * case Prefix.Careless: * datasetCharInfo.printName = "덤벙거리는 " + datasetCharInfo.printName; * datasetCharInfo.attackSpeed *= 1.3f; * datasetCharInfo.damage *= 0.7f; * datasetCharInfo.criticalPercent *= 2f/3f; * break; * case Prefix.Insight: * datasetCharInfo.printName = "천리안 " + datasetCharInfo.printName; * datasetCharInfo.attackDist *= 1.5f; * datasetCharInfo.criticalDamagePercent += 0.5f; * datasetCharInfo.criticalPercent += 10f; * break;*/ case Prefix.Upgrade: datasetCharInfo.printName = "강화된 " + datasetCharInfo.printName; datasetCharInfo.maxHP *= 1.25f; datasetCharInfo.damage *= 1.25f; datasetCharInfo.attackSpeed *= 1.25f; datasetCharInfo.armor *= 1.25f; datasetCharInfo.criticalDamagePercent += 0.3f; datasetCharInfo.criticalPercent += 5f; datasetCharInfo.currentHP = datasetCharInfo.maxHP; break; case Prefix.Glass: datasetCharInfo.printName = "유리같은 " + datasetCharInfo.printName; datasetCharInfo.maxHP *= 0.75f; datasetCharInfo.damage *= 1.5f; datasetCharInfo.armor *= 0.75f; datasetCharInfo.currentHP = datasetCharInfo.maxHP; break; /* * case Prefix.Pacifist: * datasetCharInfo.printName = "평화주의자 " + datasetCharInfo.printName; * datasetCharInfo.maxHP *= 3f; * datasetCharInfo.damage *= 0.2f; * datasetCharInfo.armor *= 3f; * datasetCharInfo.currentHP = datasetCharInfo.maxHP; * break;*/ case Prefix.None: //datasetCharInfo.printName = datasetCharInfo.characterName; break; default: break; } return(datasetCharInfo); }