Example #1
0
    /// <summary>
    /// Pushes the control handler.
    /// </summary>
    /// <param name="controlHandler">The control handler.</param>
    public void PushControlHandler(BaseProjectileControlHandler controlHandler)
    {
        Logger.Info("Pushing handler: " + controlHandler.ToString());

        _controlHandlers.Push(controlHandler);
        TryActivateCurrentControlHandler(_currentBaseProjectileControlHandler);
    }
    public void InsertControlHandler(int index, BaseProjectileControlHandler controlHandler)
    {
        Logger.Info("Pushing handler: " + controlHandler.ToString());

        if (index >= _controlHandlers.Count)
        {
            PushControlHandler(controlHandler);
        }
        else
        {
            _controlHandlers.Insert(index, controlHandler);
        }
    }
Example #3
0
    /// <summary>
    /// Resets the control handlers.
    /// </summary>
    /// <param name="controlHandler">The control handler.</param>
    public void ResetControlHandlers(BaseProjectileControlHandler controlHandler)
    {
        Logger.Info("Resetting character control handlers.");
        for (int i = _controlHandlers.Count - 1; i >= 0; i--)
        {
            Logger.Info("Removing handler: " + _controlHandlers[i].ToString());
            _controlHandlers[i].Dispose();
            _controlHandlers.RemoveAt(i);
        }

        _currentBaseProjectileControlHandler = null;
        PushControlHandler(controlHandler);
    }
Example #4
0
    private void TryActivateCurrentControlHandler(BaseProjectileControlHandler previousControlHandler)
    {
        _currentBaseProjectileControlHandler = _controlHandlers.Peek();

        while (_currentBaseProjectileControlHandler != null &&
               !_currentBaseProjectileControlHandler.TryActivate(previousControlHandler))
        {
            previousControlHandler = _controlHandlers.Pop();
            Logger.Info("Popped handler: " + previousControlHandler.ToString());
            previousControlHandler.Dispose();

            _currentBaseProjectileControlHandler = _controlHandlers.Peek();
        }
    }
Example #5
0
    /// <summary>
    /// Exchanges the control handler.
    /// </summary>
    /// <param name="index">The index.</param>
    /// <param name="controlHandler">The control handler.</param>
    public void ExchangeControlHandler(int index, BaseProjectileControlHandler controlHandler)
    {
        Logger.Info("Exchanging handler " + _controlHandlers[index].ToString() + " (index: " + index + ") with " + controlHandler.ToString());

        if (_controlHandlers[index] == _currentBaseProjectileControlHandler)
        {
            BaseProjectileControlHandler poppedHandler = _controlHandlers.Exchange(index, controlHandler);
            poppedHandler.Dispose();

            TryActivateCurrentControlHandler(poppedHandler);
        }
        else
        {
            _controlHandlers.Exchange(index, controlHandler);
        }
    }
Example #6
0
    /// <summary>
    /// Removes the control handler.
    /// </summary>
    /// <param name="controlHandler">The control handler.</param>
    public void RemoveControlHandler(BaseProjectileControlHandler controlHandler)
    {
        Logger.Info("Removing handler: " + controlHandler.ToString());

        if (controlHandler == _currentBaseProjectileControlHandler)
        {
            BaseProjectileControlHandler poppedHandler = _controlHandlers.Pop();
            poppedHandler.Dispose();

            TryActivateCurrentControlHandler(poppedHandler);
        }
        else
        {
            _controlHandlers.Remove(controlHandler);
            controlHandler.Dispose();
        }
    }
Example #7
0
    void Update()
    {
        try
        {
            while (!_currentBaseProjectileControlHandler.Update())
            {
                BaseProjectileControlHandler poppedHandler = _controlHandlers.Pop();
                poppedHandler.Dispose();

                Logger.Info("Popped handler: " + poppedHandler.ToString());
                TryActivateCurrentControlHandler(poppedHandler);
            }
        }
        catch (Exception err)
        {
            Logger.Error("Game object " + this.name + " misses default control handler.", err);
            throw;
        }
    }
Example #8
0
 /// <summary>
 /// This method is called from the BaseCharacterController control handler stack in order to evaluate whether the
 /// top stack element can be activated or not. By default this method always returns true but can be overridden
 /// for special purposes or chained control handlers.
 /// </summary>
 public virtual bool TryActivate(BaseProjectileControlHandler previousControlHandler)
 {
     Logger.Trace("Activated control handler: " + ToString());
     return(true);
 }