/// <summary>
        /// Snapshot a minion.
        /// </summary>
        /// <param name="minion">The Entity.</param>
        /// <returns>The RockMinion.</returns>
        private static RockMinion SnapshotMinion(Entity minion)
        {
            var rockMinion = new RockMinion();

            rockMinion.RockId           = minion.GetEntityId();
            rockMinion.Name             = minion.GetName();
            rockMinion.CardId           = minion.GetCardId();
            rockMinion.Health           = minion.GetRealTimeRemainingHP();
            rockMinion.BaseHealth       = minion.GetHealth();
            rockMinion.CanAttack        = minion.CanAttack();
            rockMinion.CanBeAttacked    = minion.CanBeAttacked();
            rockMinion.Damage           = minion.GetATK();
            rockMinion.HasTaunt         = minion.HasTaunt();
            rockMinion.HasWindfury      = minion.HasWindfury();
            rockMinion.HasDivineShield  = minion.HasDivineShield();
            rockMinion.HasAura          = minion.HasAura();
            rockMinion.IsStealthed      = minion.IsStealthed();
            rockMinion.IsExhausted      = minion.IsExhausted();
            rockMinion.IsFrozen         = minion.IsFrozen();
            rockMinion.IsAsleep         = minion.IsAsleep();
            rockMinion.HasDeathrattle   = minion.HasDeathrattle();
            rockMinion.HasInspire       = minion.HasInspire();
            rockMinion.HasTriggerVisual = minion.HasTriggerVisual();
            rockMinion.HasLifesteal     = minion.HasLifesteal();
            rockMinion.IsPoisonous      = minion.IsPoisonous();
            rockMinion.IsEnraged        = minion.IsEnraged();
            rockMinion.HasBattlecry     = minion.HasBattlecry();
            rockMinion.Race             = (RockRace)(int)minion.GetRace();

            return(rockMinion);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Compute score for using a HeroPower.
        /// </summary>
        /// <param name="sceneContext">The RockSceneContext</param>
        /// <param name="cardRockId">The RockId of HeroPower</param>
        /// <param name="targetRockId">The RockId of Target</param>
        /// <returns>The score in double</returns>
        private static double ScoreForUsePriestHeroPower(RockSceneContext sceneContext, int cardRockId, int targetRockId)
        {
            double   score = 4; // initial score
            RockCard card  = sceneContext.GetRockCard(cardRockId);

            // adjust score by wasted cost
            int wastedCost = sceneContext.GetMininWastedCost(cardRockId);

            score -= wastedCost * 0.4d;

            var target = sceneContext.GetRockObject(targetRockId);

            switch (target.ObjectType)
            {
            case RockObjectType.EnemyHero:
                score -= 5d;
                break;

            case RockObjectType.EnemyMinion:
                // but in some special case, we will want to heal them
                score -= 5d;
                break;

            case RockObjectType.FriendlyHero:
                RockHero hero = (RockHero)target.Object;
                if (hero.Health < 30)
                {
                    score += 0.5d;
                }
                else
                {
                    return(0);
                }

                score += (30 - hero.Health) * 0.05;

                break;

            case RockObjectType.FriendlyMinion:
                RockMinion minion = (RockMinion)target.Object;
                if (minion.Health < minion.BaseHealth)
                {
                    score += minion.Damage * 0.4d;
                }

                break;

            default:
                break;
            }

            return(score);
        }