public override void OnResolve() { Unit target = ParentAbility.GetAbilityComponent <TargetingAbility>().Target; target.Health += Data.HealAmount; if (target.Health > target.MaxHealth) { target.Health = target.MaxHealth; } }
// 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; } }
// 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(); } } }
// 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); }