Exemplo n.º 1
0
 public bool IsActive(GetBonusDto bonus)
 {
     if (ParentAbility != null)
     {
         return(ParentAbility.IsActive(bonus));
     }
     return(true);
 }
Exemplo n.º 2
0
    // Damages target selected by TargetingAbility component by value provided by DamageData
    // Interacting directly with the TargetingAbility component is not something that I really want, so this will probably be changed later
    public override void OnResolve()
    {
        Unit target = ParentAbility.GetAbilityComponent <TargetingAbility>().Target;

        target.Health -= Data.Damage;
        if (target.Health < 0)
        {
            target.Health = 0;
        }
    }
    public override void OnResolve()
    {
        Unit target = ParentAbility.GetAbilityComponent <TargetingAbility>().Target;

        target.Health += Data.HealAmount;
        if (target.Health > target.MaxHealth)
        {
            target.Health = target.MaxHealth;
        }
    }
Exemplo n.º 4
0
 public override void OnShieldLayerBroken()
 {
     _scene.WriteMessage(BreakShieldMessage);
     ShieldLayers--;
     ShieldStrength = 100;
     if (ShieldLayers <= 0)
     {
         ParentAbility.Deactivate();
     }
     base.OnShieldLayerBroken();
 }
Exemplo n.º 5
0
    protected virtual void PopAbilityUseTimer()
    {
        InUse = false;

        //Debug.Log("Popping usetimer for " + abilityName + " Use status: " + InUse);

        if (ParentAbility != null)
        {
            ParentAbility.IncrementSequenceIndex();
        }
    }
Exemplo n.º 6
0
 public virtual void OnZeroHP()
 {
     if (ParentAbility != null)
     {
         ParentAbility.Deactivate();
     }
     else
     {
         _scene.GetGameObjectPool().GetActor(AffectedActor).RemoveBehavior(this.InstanceID);
         Alive = false;
     }
 }
 // Tries to cast its parent spell if it's off cooldown
 // Doesn't look at all like what it will
 // GameEvents have an associated Unit and an associated Ability
 // This component will need to interact with something that can differentiate units and something that can differentiate abilities
 public override void HandleEvent(GameEvent gameEvent)
 {
     if (gameEvent.EventType == EventType.UnitTurnMainPhase &&
         ParentAbility.Owner.IsSameAs(gameEvent.Unit))
     {
         if (ParentAbility.HasAbilityComponent <CooldownAbility>() &&
             ParentAbility.GetAbilityComponent <CooldownAbility>().CooldownRemaining == 0)
         {
             ParentAbility.Owner.Game.RequestCast(ParentAbility);
             ParentAbility.GetAbilityComponent <CooldownAbility>().SetCooldown();
         }
     }
 }
Exemplo n.º 8
0
 public override TurnResult OnActorStartTurn()
 {
     TurnsRemaining--;
     if (TurnsRemaining <= 0)
     {
         _scene.WriteMessage("The stun wears off.");
         if (ParentAbility != null)
         {
             ParentAbility.Deactivate();
         }
         else
         {
             _scene.GetGameObjectPool().GetActor(AffectedActor).RemoveBehavior(this.InstanceID);
             Alive = false;
         }
     }
     return(TurnResult.GOTO_ENDTURN);
 }
Exemplo n.º 9
0
    // todo: handle targeting that's not purely random
    private Unit GetTarget()
    {
        List <Unit> validTargets = GetValidTargets();

        if (validTargets.Count == 0)
        {
            throw new UnityException("Ability has no valid targets");
        }

        if (Data.TargetingMethod == TargetingMethod.Random)
        {
            return(validTargets[Random.Range(0, validTargets.Count)]);
        }

        if (Data.TargetingMethod == TargetingMethod.Derived)
        {
            return(ParentAbility.GetAbilityComponent <UnitStatComparingAbility>().GetUnit(validTargets));
        }

        return(null);
    }
Exemplo n.º 10
0
        public virtual DiceRoll GetBonus(GetBonusDto bonusDto)
        {
            if (ParentAbility != null && ParentAbility.IsActive(bonusDto) && ParentAbility.IsChargeItem())
            {
                if (ParentAbility.Limit != null && ParentAbility.Limit.Amount != null &&
                    (ParentAbility.Limit.Amount.ActionRequired == RoundAction.AutoOnHit ||
                     ParentAbility.Limit.Amount.ActionRequired == RoundAction.AutoOnTakeDamage))
                {
                    return(BonusValue.GetBonus(bonusDto));
                }
                var activeAbi = bonusDto.Round.ActivatedAbilities.First(x => x.AbilityId == ParentAbility.ID);
                var charge    = ParentAbility.BonusFromCharges.First(x => x.NumberOfChargesForBonus == activeAbi.Charges);
                return(charge.Bonus);
            }
            if (ParentAbility != null && ParentAbility.IsActive(bonusDto) && ParentAbility.IsTradeOff())
            {
                var activeAbi = bonusDto.Round.ActivatedAbilities.First(x => x.AbilityId == ParentAbility.ID);

                var toTrade = 0;
                if (ParentAbility.Limit.Amount.TradeWith == this)
                {
                    toTrade = -activeAbi.Charges;
                }
                else
                {
                    toTrade = (int)(activeAbi.Charges * activeAbi.Multiplier);
                }

                return(new DiceRoll
                {
                    FixedAmount = toTrade
                });
            }


            return(BonusValue.GetBonus(bonusDto));
        }
Exemplo n.º 11
0
        public override TurnResult OnActorStartTurn()
        {
            TurnsRemaining--;

            Actor      tgt = _scene.GetGameObjectPool().GetActor(AffectedActor);
            DamageData dmg = Damage;

            tgt.TakeDamage(dmg);

            if (TurnsRemaining <= 0)
            {
                if (ParentAbility != null)
                {
                    ParentAbility.Deactivate();
                }
                else
                {
                    _scene.GetGameObjectPool().GetActor(AffectedActor).RemoveBehavior(this.InstanceID);
                    Alive = false;
                }
            }

            return(TurnResult.GOTO_TAKETURN);
        }