public bool IsActive(GetBonusDto bonus) { if (ParentAbility != null) { return(ParentAbility.IsActive(bonus)); } return(true); }
// 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; } }
public override void OnShieldLayerBroken() { _scene.WriteMessage(BreakShieldMessage); ShieldLayers--; ShieldStrength = 100; if (ShieldLayers <= 0) { ParentAbility.Deactivate(); } base.OnShieldLayerBroken(); }
protected virtual void PopAbilityUseTimer() { InUse = false; //Debug.Log("Popping usetimer for " + abilityName + " Use status: " + InUse); if (ParentAbility != null) { ParentAbility.IncrementSequenceIndex(); } }
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(); } } }
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); }
// 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); }
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)); }
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); }