private void OnAnySkillUsing(SkillUseEventData data) { if (data.Caster != Target || data.Skill.Type != SkillType.Weapon || !data.Skill.Flags.HasFlag(SkillFlags.RangedWeapon)) { return; } if (!(data.Skill.Effect is LaunchMissileEffect launchMissileEffect)) { return; } var enemies = this.boardNavigator .WithinCircle(data.Caster.transform.position, data.Skill.GetMaxRange()) .Where(cell => cell.IsOccupied && cell.OccupiedBy != (GameObject)data.Target && cell.IsOnLineOfSight(data.Caster.transform.position) && !cell.OccupiedBy.IsDummy() && cell.OccupiedBy != data.Caster && cell.OccupiedBy.IsEnemyOf(data.Caster) && Vector3.Dot((data.Target.GetPosition() - data.Caster.transform.position).normalized, (cell.transform.position - data.Caster.transform.position).normalized) >= 0.5f) .OrderBy(cell => (cell.transform.position - data.Caster.transform.position).sqrMagnitude) .Take(2); launchMissileEffect.Skill = data.Skill; Timer.Instance.Wait(0.2f, () => { foreach (var enemy in enemies) { launchMissileEffect.Clone().Apply(data.Caster, enemy.OccupiedBy); } }); }
private void OnAnySkillUsed(SkillUseEventData data) { var behaviours = Behaviours.Where(b => b.Flags.HasFlag(BehaviourFlags.BreaksOnCast) && b.Caster == data.Caster).ToList(); foreach (var behaviour in behaviours) { if (!behaviour.CanBeRemovedOnCast) { continue; } RemoveStack(behaviour, behaviour.StackCount); } // Skills triggering "AnySkillUsed" event right after behaviour is applied. Timer.Instance.WaitForEndOfFrame(() => { foreach (var behaviour in behaviours) { if (behaviour.CanBeRemovedOnCast) { continue; } behaviour.CanBeRemovedOnCast = true; } }); }
private void OnSkillUsed(SkillUseEventData data) { if (data.Caster != gameObject) { return; } LastUsedSkill = data.Skill; LastUsedSkillThisRound = data.Skill; }
private void OnSkillUsing(SkillUseEventData data) { var targetEntity = data.Target as GameObject; if (targetEntity != null) { OnEntityUsedSkillOnEntity(data.Caster, targetEntity, data.Skill); return; } OnEntityUsedSkillOnPoint(data.Caster, (Vector3)data.Target, data.Skill); }
private void OnAnySkillUsed(SkillUseEventData data) { switch (data.Skill.Id) { case ShovelDigSkillId: Open(data.Target.GetPosition()); return; case ShovelMarkSkillId: Mark(data.Target.GetPosition()); break; } }
private void OnSkillUsed(SkillUseEventData data) { if (data.Caster != Target || this.data.SkillFlags != SkillFlags.None && (data.Skill.Flags & this.data.SkillFlags) == 0) { return; } if (!this.Validators.All(v => v.Validate(data.Caster, data.Target))) { return; } var clone = this.effect.Clone(); clone.StackCount = StackCount; clone.Apply(Caster, EventSubject == BehaviourEventSubject.Me ? Target : data.Target); }
private void OnSkillUsed(SkillUseEventData data) { this.success = true; data.Skill.Used -= OnSkillUsed; }