// -------------------------------------------

        /*
         * Element's logic
         */
        public override void Logic()
        {
            base.Logic();

            switch (m_state)
            {
            case STATE_RUNNING:
                if (GameEventController.Instance.IsGameMaster())
                {
                    CheckToNextWaypoint();
                    MoveToTarget(m_waypointPosition, m_speed, 0.1f);

                    // TIMEOUT WAYPOINT
                    m_timeAcum += Time.deltaTime;
                    if (m_timeAcum >= 3)
                    {
                        m_timeAcum = 0;
                        UpdateToNextWaypoint();
                    }
                }
                break;

            case STATE_DIE:
                m_timeAcum += Time.deltaTime;
                if (m_timeAcum > 1)
                {
                    if (GameEventController.Instance.IsGameMaster())
                    {
                        NetworkEventController.Instance.DispatchNetworkEvent(FXController.EVENT_FXCONTROLLER_CREATE_NEW_FX, FXController.TYPE_FX_DEATH.ToString(), transform.position.x.ToString(), transform.position.y.ToString(), transform.position.z.ToString());
                    }
                    SoundsConstants.PlayFxDeathEnemy();
                    GameEventController.Instance.DispatchGameEvent(EVENT_ENEMY_DESTROY, NetworkID.NetID, NetworkID.UID);
                }
                break;

            case STATE_DIE_BY_EXPLOSION:
                m_timeAcum += Time.deltaTime;
                if (m_timeAcum > 3)
                {
                    if (GameEventController.Instance.IsGameMaster())
                    {
                        NetworkEventController.Instance.DispatchNetworkEvent(FXController.EVENT_FXCONTROLLER_CREATE_NEW_FX, FXController.TYPE_FX_DEATH.ToString(), transform.position.x.ToString(), transform.position.y.ToString(), transform.position.z.ToString());
                    }
                    SoundsConstants.PlayFxDeathEnemy();
                    GameEventController.Instance.DispatchGameEvent(EVENT_ENEMY_DESTROY, NetworkID.NetID, NetworkID.UID);
                }
                break;

            case STATE_DISAPPEAR:
                if (m_iterator == 1)
                {
                    if (GameEventController.Instance.IsGameMaster())
                    {
                        NetworkEventController.Instance.DispatchNetworkEvent(FXController.EVENT_FXCONTROLLER_CREATE_NEW_FX, FXController.TYPE_FX_DEATH.ToString(), transform.position.x.ToString(), transform.position.y.ToString(), transform.position.z.ToString());
                    }
                    m_life = 0;
                    SoundsConstants.PlayFxDeathEnemy();
                    GameEventController.Instance.DispatchGameEvent(EVENT_ENEMY_DESTROY, NetworkID.NetID, NetworkID.UID);
                    if (GameEventController.Instance.IsGameMaster())
                    {
                        NetworkEventController.Instance.DispatchNetworkEvent(GameEventController.EVENT_GAMEEVENT_DECREASE_GLOBAL_LIFES);
                    }
                }
                break;
            }
        }