public GameObject SpawnHero(TeamName team, GameObject teamGroup, GameObject unitSlot) { // Get monster data from index HeroInfo heroInfo = GameManager.Instance.GetHeroData.heroWrapper.HeroData.HeroInfo; GameObject heroGO = GameObject.Instantiate(heroTemplateGO, unitSlot.transform.position, Quaternion.identity, teamGroup.transform) as GameObject; heroGO.name = heroInfo.PlayerName; if (team == TeamName.Friendly) { heroGO.GetComponent <Hero>().SetMonsterSprite(monsterSprites[heroInfo.FriendlySpriteName]); } else { Debug.Log("TEAM name not correct!!!!"); } heroGO.GetComponent <Hero>().SetTeam(team); heroGO.GetComponent <Hero>().SetUnitSlot(unitSlot); // Set Monster's ability List <Ability> abilities = new List <Ability>(); if (heroInfo.baseActions.Abilities.Count > 0) { foreach (var action in heroInfo.baseActions.Abilities) { abilities.Add(CreateAbilityFromData(action)); } } else { Debug.LogError("No Base abilities set for the hero, something may have gone wrong!"); } heroGO.GetComponent <Hero>().SetMonsterAbilities(abilities); #region Set up Hero's Menus List <ActionMenu> menus = new List <ActionMenu>(); // Summon Menu - Should only contain 1 ability if (heroInfo.SummonActions.Abilities.Count == 1) { menus.Add(PopulateHeroSummonMenu(heroInfo)); } // Item Menu if (heroInfo.ConsumableActions.Consumables.Count > 0) { List <Ability> menuAbilities = new List <Ability>(); foreach (var consumable in heroInfo.ConsumableActions.Consumables) { menuAbilities.Add(CreateConsumableAbilityFromData(consumable.Name, consumable.Charges)); } ActionMenu ItemMenu = new ActionMenu(heroInfo.ConsumableActions.Name, menuAbilities); menus.Add(ItemMenu); } // Spells Menu if (heroInfo.SpellActions.Abilities.Count > 0) { List <Ability> menuAbilities = new List <Ability>(); foreach (var ability in heroInfo.SpellActions.Abilities) { menuAbilities.Add(CreateAbilityFromData(ability)); } ActionMenu spellMenu = new ActionMenu(heroInfo.SpellActions.Name, menuAbilities); menus.Add(spellMenu); } // TODO... add this heroGO.GetComponent <Hero>().SetMenus(menus); #endregion // Set Hero HP, MP + Stats // HP and Mana specifically Must be set here or the UI at start doesn't update with correct HP/MP heroGO.GetComponent <Hero>().SetupHero(heroInfo); // Set Character Unique ID heroGO.GetComponent <Hero>().SetUniqueID(heroInfo.UniqueID); // Trigger Unit Spawn Event Callback EventCallbacks.UnitSpawnEventInfo usei = new EventCallbacks.UnitSpawnEventInfo(); usei.EventDescription = "Unit " + heroGO.name + " has spawned."; usei.UnitGO = heroGO; usei.UnitSlotGO = unitSlot; usei.FireEvent(); return(heroGO); }
public GameObject SpawnMonster(int index, MonsterInfo mi, TeamName team, GameObject teamGroup, GameObject unitSlot) { // TODO... the index will not be needed once all monster spawns are driven by player and map driven teams MonsterInfo monsterInfo; if (index == 0) { monsterInfo = mi; } else { // Get monster data from index monsterInfo = MonsterDataReader.GetMonsterFromIndex(index); } // Keep track of count of each monster type in this fight TrackCharacterCount(monsterInfo, team); GameObject monsterGO = GameObject.Instantiate(monsterTemplateGO, unitSlot.transform.position, Quaternion.identity, teamGroup.transform) as GameObject; monsterGO.name = monsterInfo.MonsterName;// + " " + monsterCounts[team + monsterInfo.MonsterName]; if (team == TeamName.Friendly) { monsterGO.GetComponent <Monster>().SetMonsterSprite(monsterSprites[monsterInfo.FriendlySpriteName]); monsterGO.GetComponent <Animator>().runtimeAnimatorController = Resources.Load($"BattleResources\\Animations\\Default_Animations\\{monsterInfo.AnnimationController}") as RuntimeAnimatorController; } else if (team == TeamName.Enemy) { monsterGO.GetComponent <Monster>().SetMonsterSprite(monsterSprites[monsterInfo.EnemySpriteName]); monsterGO.GetComponent <Animator>().runtimeAnimatorController = Resources.Load($"BattleResources\\Animations\\Default_Animations\\Enemy\\Enemy{monsterInfo.AnnimationController}") as RuntimeAnimatorController; } else { Debug.Log("TEAM name not correct!!!!"); } monsterGO.GetComponent <Monster>().SetTeam(team); monsterGO.GetComponent <Monster>().SetUnitSlot(unitSlot); // Set Monster's ability List <Ability> abilities = new List <Ability>(); if (!string.IsNullOrEmpty(monsterInfo.Ability1)) { abilities.Add(CreateAbilityFromData(monsterInfo.Ability1)); } if (!string.IsNullOrEmpty(monsterInfo.Ability2)) { abilities.Add(CreateAbilityFromData(monsterInfo.Ability2)); } if (!string.IsNullOrEmpty(monsterInfo.Ability3)) { abilities.Add(CreateAbilityFromData(monsterInfo.Ability3)); } if (!string.IsNullOrEmpty(monsterInfo.Ability4)) { abilities.Add(CreateAbilityFromData(monsterInfo.Ability4)); } // TODO... what if no abilities?!? monsterGO.GetComponent <Monster>().SetMonsterAbilities(abilities); // Set monster HP, MP and stats // HP and Mana specifically Must be set here or the UI at start doesn't update with correct HP/MP monsterGO.GetComponent <Monster>().SetupMonster(monsterInfo); // Set Character Unique ID monsterGO.GetComponent <Monster>().SetUniqueID(AssignUniqueID(monsterInfo, team)); // Trigger Unit Spawn Event Callback EventCallbacks.UnitSpawnEventInfo usei = new EventCallbacks.UnitSpawnEventInfo(); usei.EventDescription = "Unit " + monsterGO.name + " has spawned."; usei.UnitGO = monsterGO; usei.UnitSlotGO = unitSlot; usei.FireEvent(); return(monsterGO); }