public virtual Upgrade BasicCopy(MinionPool pool) { Card newCopy = pool.FindBasicCard(this.name); if (newCopy.name != BlankUpgrade.name) { return((Upgrade)newCopy.DeepCopy()); } return((Upgrade)Activator.CreateInstance(this.GetType())); }
public void Test_GetTarget() { MinionPool.KeepOnLoad = false; MinionPool.Reset(); Minion enemy = MinionPool.Instance.GetMinion(); enemy.gameObject.SetActive(true); SphereCollider enemyCollider = enemy.AttackableInterface.GetComponent <SphereCollider>(); enemy.transform.SetPositionAndRotation(new Vector3(8, 0, -8), Quaternion.identity); enemyCollider.radius = 0.1f; GameObject tower = new GameObject(); TowerAggro towerAggro = tower.AddComponent <TowerAggro>(); towerAggro.Start(); SphereCollider towerCollider = tower.AddComponent <SphereCollider>(); towerCollider.radius = 4; towerAggro.Start(); towerAggro.OnTriggerEnter(enemyCollider); enemy = MinionPool.Instance.GetMinion(); enemy.gameObject.SetActive(true); enemyCollider = enemy.AttackableInterface.GetComponent <SphereCollider>(); enemy.transform.SetPositionAndRotation(new Vector3(4, 0, 4), Quaternion.identity); enemyCollider.radius = 0.1f; towerAggro.OnTriggerEnter(enemyCollider); enemy = MinionPool.Instance.GetMinion(); enemy.gameObject.SetActive(true); enemyCollider = enemy.AttackableInterface.GetComponent <SphereCollider>(); enemy.transform.SetPositionAndRotation(new Vector3(2, 0, 4), Quaternion.identity); enemyCollider.radius = 0.1f; towerAggro.OnTriggerEnter(enemyCollider); enemy = MinionPool.Instance.GetMinion(); enemy.gameObject.SetActive(true); enemyCollider = enemy.AttackableInterface.GetComponent <SphereCollider>(); enemy.transform.SetPositionAndRotation(new Vector3(1, 0, 1), Quaternion.identity); enemyCollider.radius = 0.1f; towerAggro.OnTriggerEnter(enemyCollider); Minion target = towerAggro.GetTarget(); Assert.That(target.GetInstanceID(), Is.EqualTo(enemy.GetInstanceID())); }
public void Test_MinionPool_CreateNew() { // Set KeepOnLoad to false so we don't crash the testing framework MinionPool.KeepOnLoad = false; // Create a local MinionPool MinionPool pool = new MinionPool(1); Assert.That(pool.Minions.Count, Is.EqualTo(1)); Minion minion = pool.GetMinion(); Assert.That(pool.Minions.Count, Is.EqualTo(1)); minion.Deactivate(); Assert.That(pool.Minions.Count, Is.EqualTo(2)); }
public void Test_MinionPool_GetSameMinion() { // Set KeepOnLoad to false so we don't crash the testing framework MinionPool.KeepOnLoad = false; // Create a local MinionPool MinionPool pool = new MinionPool(2); Minion minion1 = pool.GetMinion(); // Deactivate minion1.Deactivate(); // GetMinion should return the same minion Minion minion2 = pool.GetMinion(); Assert.That(minion1.ID, Is.EqualTo(minion2.ID)); }
public void Initialize(BossPool bossPool, MinionPool minionPool) { _bossPool = bossPool; _minionPool = minionPool; _leftPositions = _leftPositionsRaw.Select(x => x.position).ToArray(); _rightPositions = _rightPositionsRaw.Select(x => x.position).ToArray(); MessageManager.ReceiveEvent <PlayerDamagedEvent>().Subscribe(ev => { if (ev.Source.Type == EnemyType.Boss) { _bossPool.Despawn(ev.Source); } else { _minionPool.Despawn(ev.Source); } }); }
public void Test_AddTarget() { MinionPool.KeepOnLoad = false; MinionPool.Reset(); Minion enemy = MinionPool.Instance.GetMinion(); enemy.gameObject.SetActive(true); SphereCollider enemyCollider = enemy.AttackableInterface.GetComponent <SphereCollider>(); enemy.transform.SetPositionAndRotation(new Vector3(8, 0, -8), Quaternion.identity); GameObject tower = new GameObject(); TowerAggro towerAggro = tower.AddComponent <TowerAggro>(); towerAggro.Start(); towerAggro.OnTriggerEnter(enemyCollider); Assert.That(towerAggro.Targets.Count, Is.EqualTo(1)); }
public void Test_CompareDistance_PosOne2() { MinionPool.KeepOnLoad = false; MinionPool.Reset(); Minion enemy1 = MinionPool.Instance.GetMinion(); Minion enemy2 = MinionPool.Instance.GetMinion(); enemy1.gameObject.SetActive(true); enemy2.gameObject.SetActive(true); enemy1.transform.SetPositionAndRotation(new Vector3(8, 0, -8), Quaternion.identity); enemy2.transform.SetPositionAndRotation(new Vector3(-4, 0, 4), Quaternion.identity); GameObject tower = new GameObject(); TowerAggro towerAggro = tower.AddComponent <TowerAggro>(); int distanceSortValue = towerAggro.CompareDistances(enemy1, enemy2); Assert.That(distanceSortValue, Is.EqualTo(1)); }
public void Test_MinionPool_ResetDamageOnRespawn() { // Set KeepOnLoad to false so we don't crash the testing framework MinionPool.KeepOnLoad = false; // Create a local MinionPool MinionPool pool = new MinionPool(2); Minion minion = pool.GetMinion(); int originalHP = minion.AttackableInterface.HP; // Deal damage minion.DealDamage(4); // Deactivate minion.Deactivate(); minion = pool.GetMinion(); // This should be the same minion Assert.That(minion.AttackableInterface.HP, Is.EqualTo(originalHP)); }
public async Task <bool> StartGame(CommandContext ctx) { const int minPlayers = 1; DiscordEmbedBuilder responseMessage; if (BotInfoHandler.gameHandler.players.Count() < minPlayers) //amount to be changed { //not enough players responseMessage = new DiscordEmbedBuilder { Title = "Not enough players to start a game", Description = $"You need at least {minPlayers} players to start a game.", Color = DiscordColor.Red }; await ctx.RespondAsync(embed : responseMessage).ConfigureAwait(false); return(false); } else if (BotInfoHandler.inGame) { //already in game responseMessage = new DiscordEmbedBuilder { Title = "A game is already in the process.", Description = "Cancel the current game to start another.", Color = DiscordColor.Red }; await ctx.RespondAsync(embed : responseMessage).ConfigureAwait(false); return(false); } else { //successfully starting a game responseMessage = new DiscordEmbedBuilder { Title = "Game successfully started.", Description = "More commands are now available.", Color = DiscordColor.Green }; await ctx.RespondAsync(embed : responseMessage).ConfigureAwait(false); MinionPool pool = new MinionPool(); if (BotInfoHandler.gameHandler.setsAmount <= 0) { pool.FillGenericMinionPool(); responseMessage = new DiscordEmbedBuilder { Title = "Sets Included This Game", Description = "All sets are included.", Color = DiscordColor.Azure }; } else { var setNames = pool.FillMinionPoolWithSets(BotInfoHandler.gameHandler.setsAmount, BotInfoHandler.gameHandler.setHandler); string desc = setNames[0]; for (int i = 1; i < BotInfoHandler.gameHandler.setsAmount; i++) { desc += $"\n{setNames[i]}"; } responseMessage = new DiscordEmbedBuilder { Title = "Sets Included This Game", Description = desc, Color = DiscordColor.Azure }; } await Task.Delay(1000); await ctx.RespondAsync(embed : responseMessage).ConfigureAwait(false); BotInfoHandler.inGame = true; BotInfoHandler.shopsSent = false; BotInfoHandler.gameHandler.StartNewGame(pool); BotInfoHandler.gameHandler.currentRound = 1; BotInfoHandler.pairsReady = false; ctx.Client.UpdateStatusAsync(new DiscordActivity { Name = "Scrap Scramble | >help", ActivityType = ActivityType.Playing }); await Task.Delay(1000); await NextPairs(ctx); await Task.Delay(1000); await SendShops(ctx); await Task.Delay(1000); await CreateInteractivePlayerlist(ctx); BotInfoHandler.pairsReady = false; return(true); } }
/// <summary> /// Initialize the Attackable and Movement interfaces. /// Also set the MinionPool owner. /// </summary> /// <param name="owner"></param> public void InitInterfaces(MinionPool owner) { AttackableInterface = GetComponentInChildren <Attackable>(); MovementInterface = GetComponent <MovementController>(); owningPool = owner; }
/// <summary> /// Reset this minion pool. /// Needs to be called any time you load a scene if KeepOnLoad is set to false. /// Must be called at the beginning of every client test method because /// minions are destroyed between method calls for some stupid reason. /// </summary> public static void Reset() { _instance = new MinionPool(); }
public void Refresh(GameHandler gameHandler, MinionPool pool, int maxMana, bool decreaseFreeze = true) { int commons = gameHandler.shopRarities.common, rares = gameHandler.shopRarities.rare, epics = gameHandler.shopRarities.epic, legendaries = gameHandler.shopRarities.legendary; List <Upgrade> kept = new List <Upgrade>(); for (int i = 0; i < this.options.Count(); i++) { if (this.options[i].creatureData.staticKeywords[StaticKeyword.Freeze] > 0) { if (decreaseFreeze) { this.options[i].creatureData.staticKeywords[StaticKeyword.Freeze]--; } kept.Add((Upgrade)this.options[i].DeepCopy()); if (this.options[i].rarity == Rarity.Common) { commons--; } else if (this.options[i].rarity == Rarity.Rare) { rares--; } else if (this.options[i].rarity == Rarity.Epic) { epics--; } else if (this.options[i].rarity == Rarity.Legendary) { legendaries--; } } } this.options.Clear(); this.options = kept; List <Upgrade> subList = new List <Upgrade>(); subList = CardsFilter.FilterList <Upgrade>(pool.upgrades, x => x.rarity == Rarity.Legendary && x.Cost <= maxMana - 5); for (int i = 0; i < legendaries; i++) { Upgrade m = subList[GameHandler.randomGenerator.Next(0, subList.Count())]; this.AddUpgrade(m); } subList = CardsFilter.FilterList <Upgrade>(pool.upgrades, x => x.rarity == Rarity.Epic && x.Cost <= maxMana - 5); for (int i = 0; i < epics; i++) { Upgrade m = subList[GameHandler.randomGenerator.Next(0, subList.Count())]; this.AddUpgrade(m); } subList = CardsFilter.FilterList <Upgrade>(pool.upgrades, x => x.rarity == Rarity.Rare && x.Cost <= maxMana - 5); for (int i = 0; i < rares; i++) { Upgrade m = subList[GameHandler.randomGenerator.Next(0, subList.Count())]; this.AddUpgrade(m); } subList = CardsFilter.FilterList <Upgrade>(pool.upgrades, x => x.rarity == Rarity.Common && x.Cost <= maxMana - 5); for (int i = 0; i < commons; i++) { Upgrade m = subList[GameHandler.randomGenerator.Next(0, subList.Count())]; this.AddUpgrade(m); } this.options.Sort(); }