示例#1
0
        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);
                }
            });
        }
示例#2
0
        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;
                }
            });
        }
示例#3
0
        private void OnSkillUsed(SkillUseEventData data)
        {
            if (data.Caster != gameObject)
            {
                return;
            }

            LastUsedSkill          = data.Skill;
            LastUsedSkillThisRound = data.Skill;
        }
示例#4
0
        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);
        }
示例#5
0
        private void OnAnySkillUsed(SkillUseEventData data)
        {
            switch (data.Skill.Id)
            {
            case ShovelDigSkillId:
                Open(data.Target.GetPosition());
                return;

            case ShovelMarkSkillId:
                Mark(data.Target.GetPosition());
                break;
            }
        }
示例#6
0
        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);
        }
示例#7
0
 private void OnSkillUsed(SkillUseEventData data)
 {
     this.success     = true;
     data.Skill.Used -= OnSkillUsed;
 }