Ejemplo n.º 1
0
        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()));
    }
Ejemplo n.º 3
0
    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));
    }
Ejemplo n.º 4
0
    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));
    }
Ejemplo n.º 5
0
 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));
    }
Ejemplo n.º 8
0
    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);
            }
        }
Ejemplo n.º 10
0
 /// <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;
 }
Ejemplo n.º 11
0
 /// <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();
 }
Ejemplo n.º 12
0
        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();
        }