Example #1
0
        private void Cast(Actor caster, Actor target)
        {
            //Deal damage
            var damagePerTick = new Damage(_tickDamage, DamageType.Magical, DamageFlags.Ability);
            var damage        = new SourcedDamage(caster, damagePerTick);
            var damageable    = target.GetModule <IDamageable>();


            void InternalTick()
            {
                damageable.TakeDamage(damage);
            }

            var tickWrapper = new TickAction
            {
                Callback     = InternalTick,
                TickCount    = _tickCount,
                TickInterval = _tickInterval
            };

            if (target.TryGetModule <IKillable>(out var killable))
            {
                killable.Died += RemoveTick;
            }

            void RemoveTick(object sender, DeathEventArgs args)
            {
                killable.Died -= RemoveTick;
                Ticks.Remove(tickWrapper);
            }

            Ticks.Add(tickWrapper);
            ApplyFX(target.transform, _tickInterval * _tickCount);
        }
Example #2
0
        public void Queue(TickAction action, double milliseconds)
        {
            System.Timers.Timer timer;
            if (FreeTimers.Count == 0)
            {
                timer                     = new System.Timers.Timer(milliseconds);
                timer.AutoReset           = false;
                timer.SynchronizingObject = owner;
                BusyTimers.Add(timer);
            }
            else
            {
                int i = FreeTimers.Count - 1;
                timer = FreeTimers[i];
                FreeTimers.RemoveAt(i);

                timer.Interval = milliseconds;
            }

            System.Timers.ElapsedEventHandler handler = delegate(object sender, System.Timers.ElapsedEventArgs e) {
                HandleTimerTick(timer, action);
            };

            timer.Elapsed += handler;
        }
Example #3
0
    public void FocusCameraToPos(Vector3 _focalPos, float _focusDuration, Graph _focusGraph)
    {
        _focalPos.y -= mfCenterYOffset;
        _focalPos    = ConstrainVectorToCameraBounds(_focalPos);
        MoveToAction focusToPos    = new MoveToAction(camTransform, _focusGraph, _focalPos, _focusDuration);
        TickAction   updateMiniMap = new TickAction(_focusDuration, UpdateMiniMap);

        ActionHandler.RunAction(focusToPos, updateMiniMap);
    }
Example #4
0
 internal static bool RemoveTick(TickAction action)
 {
     if (_ticking)
     {
         var index = _tickActions.IndexOf(action);
         if (index < 0)
         {
             return(false);
         }
         if (index <= _tickingIndex)
         {
             _tickingIndex--;
         }
         return(_tickActions.Remove(action));
     }
     else
     {
         return(_tickActions.Remove(action));
     }
 }
Example #5
0
        /// <summary>
        /// Can be called from any thread. Releases the specified timer and invokes the
        /// specified action on the owning thread.
        /// </summary>
        private void HandleTimerTick(System.Timers.Timer timer, TickAction action)
        {
            // Marshal to main thread if required
            if (owner.InvokeRequired)
            {
                owner.Invoke((TickAction) delegate() { HandleTimerTick(timer, action); }, null);
            }
            else
            {
                BusyTimers.Remove(timer);
                if (FreeTimers.Count >= MaxTimerReserve)
                {
                    timer.Dispose();
                }
                else
                {
                    FreeTimers.Add(timer);
                }

                action();
            }
        }
Example #6
0
		// ================================================================================
		//  constructor
		// --------------------------------------------------------------------------------

		public Ticker(TickAction tickHandler, float interval = 1.0f)
		{
			_tickEvent = tickHandler;
			_interval = interval;
		}
Example #7
0
 internal static void AddTick(TickAction action)
 {
     _tickActions.Add(action);
 }
Example #8
0
        // ================================================================================
        //  constructor
        // --------------------------------------------------------------------------------

        public Ticker(TickAction tickHandler, float interval = 1.0f)
        {
            _tickEvent = tickHandler;
            _interval  = interval;
        }
Example #9
0
 public void RemoveTicker(TickAction tickAction)
 {
     tickActions.Remove(tickAction);
 }
Example #10
0
 public void RegisterTicker(TickAction tickAction)
 {
     tickActions.Add(tickAction);
 }
Example #11
0
        public void CastObjectTarget(Actor target)
        {
            //Deal damage
            var damage = new Damage(_damage, DamageType.Magical, DamageFlags.Ability);
//            var targetable = target.GetComponent<ITargetable>();
            var damagable = target.GetModule <IDamageable>();

            damagable.TakeDamage(Self, damage);
            //Gather DOT targets
            var dotTargets = new List <Actor> {
                target
            };

            if (IsInOverheat)
            {
                var colliders = Physics.OverlapSphere(target.transform.position, _overheatSearchRange,
                                                      (int)LayerMaskFlag.Entity);
                foreach (var collider in colliders)
                {
                    if (!AbilityHelper.TryGetActor(collider, out var actor))
                    {
                        continue;
                    }
                    if (!CheckBuilder.AllowTarget(actor))
                    {
                        continue;
                    }
                    if (actor == target) //Already added
                    {
                        continue;
                    }
                    dotTargets.Add(actor);
                }
            }

            foreach (var actor in dotTargets)
            {
                if (!actor.TryGetModule <IDamageable>(out var damageTarget))
                {
                    continue;
                }
                var source    = Self;
                var dotDamage = new Damage(_tickDamage, DamageType.Magical, DamageFlags.Ability);

                void internalFunc()
                {
                    damageTarget.TakeDamage(source, dotDamage);
                }

                var tickWrapper = new TickAction
                {
                    Callback     = internalFunc,
                    TickCount    = _tickCount,
                    TickInterval = _tickInterval
                };

                if (actor.TryGetModule <IKillable>(out var killable))
                {
                    killable.Died += RemoveTick;
                }

                void RemoveTick(object sender, DeathEventArgs args)
                {
                    killable.Died -= RemoveTick;
                    _ticks.Remove(tickWrapper);
                }

                _ticks.Add(tickWrapper);
                ApplyFX(actor.transform, _tickCount * _tickInterval);
            }
        }