/// <summary> /// Add from saved game /// </summary> public void AddMonsterGroup(Monster m, ThreatInteraction interaction) { //check if monster can be spawned in this Difficulty mode if (!m.IsValid()) { return; } bar.DOLocalMoveY(50, .75f).SetEase(Ease.InOutCubic); //apply elite modifier bonuses if (m.isArmored) { m.shieldValue += 1; } if (m.isLarge) { m.health += 2; } if (m.isBloodThirsty) { m.damage += 1; } m.interaction = interaction; m.currentHealth = new int[3] { m.health, m.health, m.health }; GameObject go = Instantiate(monsterButtonPrefab, buttonAttach); go.transform.localPosition = new Vector3((175 * monsterList.Count), 25, 0); go.GetComponent <MonsterButton>().monster = m; go.GetComponent <MonsterButton>().AddToBar(m.isElite, this); monsterList.Add(m); //add banner var mc = from monster in monsterList where monster.monsterType == m.monsterType && monster.isElite == m.isElite select monster; if (mc.Count() > 1) { if (!m.isElite && bannerQueue.Count > 0) { go.GetComponent <MonsterButton>().SetBanner(bannerQueue.Dequeue()); } else if (m.isElite && eliteBannerQueue.Count > 0) { go.GetComponent <MonsterButton>().SetBanner(eliteBannerQueue.Dequeue()); } } scrollReady = false; foreach (Transform child in buttonAttach) { if (child.transform.position.x > sbRect.position.x + (1000f * scalar)) //off the edge { scrollOffset -= 175; } } buttonAttach.DOLocalMoveX(scrollOffset, .5f).SetEase(Ease.InOutQuad).OnComplete(() => { scrollReady = true; }); }
/// <summary> /// removes monster group, shows reward, and fires its Trigger After Event /// </summary> public void RemoveMonster(Monster m) { monsterList.Remove(m); //remove the prefab button from the screen and rearrange buttons int c = 0; foreach (Transform child in buttonAttach) { var mb = child.GetComponent <MonsterButton>(); if (mb.monster == m) { //add any lore unique to this monster FindObjectOfType <LorePanel>().AddReward(mb.monster.loreReward); mb.markRemove = true; mb.cg.DOFade(0, .5f); child.DOLocalMoveY(0, .5f).OnComplete(() => { Sprite b = mb.Remove(); if (b != null && !m.isElite) { bannerQueue.Enqueue(b); } else if (b != null) { eliteBannerQueue.Enqueue(b); } }); } else { mb.Regroup(c++ *175); } } if (monsterList.Count == 0) { bar.DOLocalMoveY(-45, .5f).SetEase(Ease.InOutCubic); } else { scrollReady = false; scrollOffset = -517; buttonAttach.DOLocalMoveX(scrollOffset, .5f).SetEase(Ease.InOutQuad).OnComplete(() => { scrollReady = true; }); } //show reward on group defeated //then fire Defeated trigger only if ALL groups in the Event are defeated if (m.interaction != null) { ThreatInteraction ti = m.interaction; int foo = monsterList.Count(x => x.interaction.GUID == m.interaction.GUID); FindObjectOfType <InteractionManager>().GetNewTextPanel().ShowOkContinue($"Remove the {m.dataName}(s) from the board.\r\n\r\nYou or a nearby Hero gain 1 Inspiration.", ButtonIcon.Continue, () => { if (foo == 0) { string trigger = ti.triggerDefeatedName; FindObjectOfType <TriggerManager>().FireTrigger(trigger); FindObjectOfType <LorePanel>().AddReward(ti.loreReward); } }); } }