Esempio n. 1
0
Response::~Response() {

    LOGV(LOG_LEVEL_RESPONSE, 0, LOG_FORMAT(), __PRETTY_FUNCTION__, __LINE__);
    for (unsigned char i = 0; i < TEXIDX_BUFFER_SIZE; ++i)
        if (mTexIdx[i] != 0)
            mTextures->delTexture(mTexIdx[i]);
}
//Interface for UI
//receive a index and url, create a IRDownloadRequest and append it to mReqMap
//then, schedule the downloading
bool IRParallelDownloadSession::addRequest(const int &aIndex,const QString &aUrl)
{
    LOG_METHOD;

    Qt::HANDLE threadid = QThread::currentThreadId();
    LOG_FORMAT("  !!!thread IRParallelDownloadSession::addRequest id=%d",(int)threadid);

    mMutex->lock();

    bool ret = true;

    if(KRquestCountMax > mReqMap.count())
    {
        //construct request object according to input parameter
        IRDownloadRequest *request = new IRDownloadRequest(aIndex,aUrl,this);

        request->moveToThread(this->thread());//in order to let onRequestFinished() run in sub thread

        //append just creaded request to mReqMap
        //This is not QList shouldn't use append();
        mReqMap.insert(aIndex, request);
    }
    else
    {
        ret = false;
    }

    mMutex->unlock();
    return ret;

    // can not scheduleReqForDownloading() now,  shedule it in startSchedule().
}
void IRNowPlayingView::updateSongName(const QString &aSongName)
{
    LOG_METHOD;
    iSongNameMarquee->stopAnimation();	
    iSongNameLabel->hide();
    iSongNameMarquee->hide();
    
    iSongNameLabel->setPlainText(aSongName);
    iSongNameMarquee->setText(aSongName);
        
    QFontMetricsF metrics(iSongNameLabel->font());
    LOG_FORMAT("song name = %s, song name length = %f, label width = %f",
                STRING2CHAR(aSongName), 
                metrics.boundingRect(aSongName).width(),
                iSongNameLabel->contentsRect().width()
                );
    if (metrics.boundingRect(aSongName).width() > iSongNameLabel->contentsRect().width())
    {
        iSongNameMarquee->show();
        iSongNameMarquee->startAnimation();
    }
    else
    {
        iSongNameLabel->show();
    }
}
Esempio n. 4
0
void Response::start() {

    LOGV(LOG_LEVEL_RESPONSE, 0, LOG_FORMAT(), __PRETTY_FUNCTION__, __LINE__);
    std::memcpy(mTransform, Object2D::TransformBuffer, sizeof(float) * TRANSFORM_BUFFER_SIZE);

    // Make a correction on indices (that start from -50°)
    rotate(ROTATION_CORRECTION); // => -2.5° for texture coordinates correction (that start from -2.5°)
}
void IrHsWidgetTitleRow::setStationName(const QString& aStationName)
{
    LOG_METHOD;
    LOG_FORMAT("aStationName = %s", STRING2CHAR(aStationName));
    if (mStationName->plainText() != aStationName)
    {
        mStationName->setPlainText(aStationName);
    }   
}
Esempio n. 6
0
Response::Response() : Sphere(false), mToRender(false), mToDisplay(0), mCancel(false), mForce(false), mScale(0.f),
        mOrientation(0), mRotateVel(0.f), mRotation(0.f) {

    LOGV(LOG_LEVEL_RESPONSE, 0, LOG_FORMAT(), __PRETTY_FUNCTION__, __LINE__);
    std::memset(mTexIdx, 0, TEXIDX_BUFFER_SIZE);
    std::memset(&mCurAccel, 0, sizeof(AccelData));

    mFullTexCoords = mTexCoords;
}
Esempio n. 7
0
FeedObject* MRFeedListModel::data(const int row) const
{
    LOG_METHOD;
    FeedObject *dobj = m_items.at(row);

    LOG_FORMAT("%s",dobj->type.toLatin1().data());

    return dobj;
}
//aIndexs need Traversall from start to end, so use foreach
void IRParallelDownloadSession::removeRequest(const QList<int> &aIndexList)
{
    LOG_METHOD;

    Qt::HANDLE threadid = QThread::currentThreadId();
    LOG_FORMAT("  !!!thread IRParallelDownloadSession::removeRequest_QList id=%d",(int)threadid);

    //NonRecursive Lock.  locked in removeRequest(inputIndex),  mMutex.lock() is not necessary here.

    //foreach is OK here. loop index by aIndexList, but the removed container is mReqMap. It's Safe!!
    foreach (int inputIndex, aIndexList)
    {
       removeRequest(inputIndex);
    }
//Implementation
IRParallelDownloadSession::IRParallelDownloadSession()
                          :mMaxActiveCount(0),
                           mActiveCount(0),
                           mStarted(false),
                           mThread(NULL),
                           mPendingRequest(false)
{
      Qt::HANDLE threadid = QThread::currentThreadId();
      LOG_FORMAT("  !!!thread IRParallelDownloadSession::IRParallelDownloadSession id=%d",(int)threadid);

      mMutex = new QMutex(QMutex::NonRecursive);

      mNwkAccessMgr = NULL;
}
Esempio n. 10
0
void Response::load(unsigned char responseId) {

    LOGV(LOG_LEVEL_RESPONSE, 0, LOG_FORMAT(" - r:%d"), __PRETTY_FUNCTION__, __LINE__, responseId);
    switch (responseId) {

        case RESPONSE_ID_TITLE:     mTexIdx[0] = Textures::loadTexture(TEXTURE_ID_TITLE); break;
        case RESPONSE_ID_AVAILABLE: mTexIdx[1] = Textures::loadTexture(TEXTURE_ID_AVAILABLE); break;
        case RESPONSE_ID_STORES:    mTexIdx[2] = Textures::loadTexture(TEXTURE_ID_STORES); break;
#ifdef DEBUG
        default: {

            LOGW(LOG_FORMAT(" - Unknown response item to load (%d)"), __PRETTY_FUNCTION__, __LINE__, responseId);
            assert(NULL);
            return;
        }
#endif
    }
    assert(mTexIdx[responseId] != 0);
    mTextures->genTexture(mTexIdx[responseId]);

    if (mToDisplay == responseId) // Needed when resume
        mTextureIdx = mTexIdx[responseId];
}
/********************************************************************************************************
 * SLOT for Network Event
 *******************************************************************************************************
 */
void IRNowPlayingView::handleNetworkEvent(IRQNetworkEvent aEvent)
{
    LOG_METHOD;
	LOG_FORMAT("aEvent = %d", (int)aEvent );
    if( this != getViewManager()->currentView() )
    {
        return;
    }
    
    switch(aEvent)
    {
    case EIRQNetworkConnectionEstablished:
        {
            if( EIR_UseNetwork_StartingView == getUseNetworkReason() )
            {
                IRPlayList *playList = iApplication->getPlayList();
                if (playList && 1 == playList->getNumberOfEntries())
                {
                    IRQPreset *preset = playList->getPresetForEntry(0);
                    iPlayController->connectToChannel(preset, EIRQAdhocExternal);
                    delete preset;
                }
                else
                {
                    IRLastPlayedStationInfo *lastPlayedStationInfo = iApplication->getLastPlayedStationInfo();                    
                    if( lastPlayedStationInfo )
                    {
                        IRQPreset *lastPreset = NULL;
                        lastPreset = lastPlayedStationInfo->getLastPlayedStation();
						if (lastPreset)
                        {
                            iPlayController->connectToChannel( lastPreset, lastPlayedStationInfo->connectedFrom() );
                        }
                    }                    
                }
            }
            else if( EIR_UseNetwork_PlayStation == getUseNetworkReason() )
            {
                iPlayController->resume();
            }
            break;
        }
    default:
        break;
    }
    
    setUseNetworkReason(EIR_UseNetwork_NoReason);
}
Esempio n. 12
0
MRFeedListModel::MRFeedListModel(const QString& foldername, QObject *parent) :
     QAbstractListModel(parent), mFolderName(foldername)
{
    LOG_METHOD;

    LOG_FORMAT("MRFeedListModel constuct folder name:%s", mFolderName.toLatin1().data());

    QHash<int, QByteArray> roles;
    roles[ETitle] = "title";
    roles[EType] = "type";
    roles[EUrl] = "url";
    roles[EIconUrl] = "iconUrl";
    roles[EHtmlUrl] = "htmlUrl";
    roles[EDescription] = "description";
    roles[ESubscribed] = "subscribed";
    roles[ELocalPath] = "localpath";
    setRoleNames(roles);
  }
Esempio n. 13
0
static VC_CONTAINER_STATUS_T ps_read_system_header( VC_CONTAINER_T *ctx )
{
   uint8_t header[8];
   uint32_t length;
   VC_CONTAINER_BITS_T bits;

   if(_READ_U32(ctx) != 0x1BB) return VC_CONTAINER_ERROR_CORRUPTED;
   LOG_FORMAT(ctx, "system_header");
   ctx->priv->module->level++;

   length = READ_U16(ctx, "header_length");
   if(length < 6) return VC_CONTAINER_ERROR_CORRUPTED;
   if(READ_BYTES(ctx, header, 6) != 6) return VC_CONTAINER_ERROR_EOS;

   BITS_INIT(ctx, &bits, header, 6);

   if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
   BITS_SKIP(ctx, &bits, 22, "rate_bound");
   if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
   BITS_SKIP(ctx, &bits, 6, "audio_bound");
   BITS_SKIP(ctx, &bits, 1, "fixed_flag");
   BITS_SKIP(ctx, &bits, 1, "CSPS_flag");
   BITS_SKIP(ctx, &bits, 1, "system_audio_lock_flag");
   BITS_SKIP(ctx, &bits, 1, "system_video_lock_flag");
   if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
   BITS_SKIP(ctx, &bits, 5, "video_bound");
   BITS_SKIP(ctx, &bits, 1, "packet_rate_restriction_flag");
   BITS_SKIP(ctx, &bits, 7, "reserved_bits");
   length -= 6;

   while(length >= 3 && (PEEK_U8(ctx) & 0x80))
   {
      SKIP_U8(ctx, "stream_id");
      SKIP_BYTES(ctx, 2);
      length -= 3;
   }
   SKIP_BYTES(ctx, length);

   ctx->priv->module->level--;
   return STREAM_STATUS(ctx);
}
Esempio n. 14
0
QString MRFeedListModel::data(const int row, int role) const
{
    FeedObject *dobj = m_items.at(row);

    QString result = QString();

    switch (role) {
    case Qt::DisplayRole: // The default display role now displays the first name as well
    case ETitle:
        result = dobj->title;
        break;
    case EType:
        result = dobj->type;
        break;
    case EUrl:
        result = dobj->url;
        break;
    case EIconUrl:
        result = dobj->iconUrl;
        break;
    case EHtmlUrl:
        result = dobj->htmlUrl;
        break;
    case EDescription:
        result = dobj->description;
        break;
    case ESubscribed:
        result = dobj->subscribed;
        break;
    case ELocalPath:
        result = dobj->urlLocalPath;
        break;
    default:
        result = QString();
    }

    LOG_FORMAT("FeedListModel data:%s, row:%d, role:%d", result.toLatin1().data(), row, role);
    return result;
}
/*
 * Description : from base class IRBaseView.
 *               handle view commands.
 * Parameters  : aCommand : see the definition of TIRViewCommand
 * Return      : EIR_DoDefault : caller does default handling
 *               EIR_NoDefault : caller doesn't do default handling
 */
TIRHandleResult IRNowPlayingView::handleCommand(TIRViewCommand aCommand, TIRViewCommandReason aReason)
{
    LOG_METHOD;
	LOG_FORMAT("aCommand = %d", (int)aCommand);
    
    Q_UNUSED(aReason);
    TIRHandleResult ret = EIR_DoDefault;

    switch (aCommand)
    {
    case EIR_ViewCommand_TOBEACTIVATED:       
        handleOrientationChanged(getViewManager()->orientation());                 
        updateMusicStoreStatus();
        updateWidgets();
        ret = EIR_NoDefault;
        break;

    case EIR_ViewCommand_ACTIVATED:
        connect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset* )),
                this, SLOT(handleLogoDownloaded(IRQPreset* )));
        updateStationLogo();
        getViewManager()->saveScreenShot();
        break;
        
    case EIR_ViewCommand_DEACTIVATE:
        if( iLogoDownloadState != EIdle )
        {
            // cancel downloading logo
            iIsdsClient->isdsLogoDownCancelTransaction();
            iLogoDownloadState = EIdle;            
        }        
        disconnect(iIsdsClient, SIGNAL(presetLogoDownloaded(IRQPreset*)),
                   this, SLOT(handleLogoDownloaded(IRQPreset* )));
        ret = EIR_NoDefault;
        break;
    }

    return ret;
}
Esempio n. 16
0
static VC_CONTAINER_STATUS_T ps_read_pack_header( VC_CONTAINER_T *ctx )
{
   VC_CONTAINER_MODULE_T *module = ctx->priv->module;
   uint8_t header[10];
   int64_t scr, scr_base, scr_ext = INT64_C(0);
   uint64_t pack_offset = STREAM_POSITION(ctx);
   uint32_t mux_rate, stuffing;
   VC_CONTAINER_BITS_T bits;
   VC_CONTAINER_STATUS_T status;

   if(_READ_U32(ctx) != 0x1BA) return VC_CONTAINER_ERROR_CORRUPTED;
   LOG_FORMAT(ctx, "pack_header");
   
   module->level++;

   if (PEEK_U8(ctx) & 0x40)  /* program stream */
   {
      if(READ_BYTES(ctx, header, 10) != 10) return VC_CONTAINER_ERROR_EOS;
      BITS_INIT(ctx, &bits, header, 10);
      if(BITS_READ_U32(ctx, &bits, 2, "'01' marker bits") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_base = BITS_READ_U32(ctx, &bits, 3, "system_clock_reference_base [32..30]") << 30;
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_base |= BITS_READ_U32(ctx, &bits, 15, "system_clock_reference_base [29..15]") << 15;
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_base |= BITS_READ_U32(ctx, &bits, 15, "system_clock_reference_base [14..0]");
      LOG_FORMAT(ctx, "system_clock_reference_base %"PRId64, scr_base);
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_ext = BITS_READ_U32(ctx, &bits, 9, "system_clock_reference_extension");
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      mux_rate = BITS_READ_U32(ctx, &bits, 22, "program_mux_rate");
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      BITS_SKIP(ctx, &bits, 5, "reserved");
      stuffing = BITS_READ_U32(ctx, &bits, 3, "pack_stuffing_length");
      SKIP_BYTES(ctx, stuffing);
   }
   else /* system stream */
   {
      if(READ_BYTES(ctx, header, 8) != 8) return VC_CONTAINER_ERROR_EOS;
      BITS_INIT(ctx, &bits, header, 8);
      if(BITS_READ_U32(ctx, &bits, 4, "'0010' marker bits") != 0x2) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_base = BITS_READ_U32(ctx, &bits, 3, "system_clock_reference_base [32..30]") << 30;
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_base |= BITS_READ_U32(ctx, &bits, 15, "system_clock_reference_base [29..15]") << 15;
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      scr_base |= BITS_READ_U32(ctx, &bits, 15, "system_clock_reference_base [14..0]");
      LOG_FORMAT(ctx, "system_clock_reference_base %"PRId64, scr_base);
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
      mux_rate = BITS_READ_U32(ctx, &bits, 22, "program_mux_rate");
      if(BITS_READ_U32(ctx, &bits, 1, "marker_bit") != 0x1) return VC_CONTAINER_ERROR_CORRUPTED;
   }

   if ((status = STREAM_STATUS(ctx)) != VC_CONTAINER_SUCCESS) return status;
   
   module->level--;

   /* Set or update system_clock_reference, adjust bias if necessary */
   scr = scr_base * INT64_C(300) + scr_ext;

   if (module->scr_offset == VC_CONTAINER_TIME_UNKNOWN)
      module->scr_offset = scr;

   if (module->scr == VC_CONTAINER_TIME_UNKNOWN)
      module->scr_bias = -scr;
   else if (scr < module->scr)
      module->scr_bias = module->scr - scr;

   if (module->scr != VC_CONTAINER_TIME_UNKNOWN)
   {
      /* system_clock_reference is not necessarily continuous across the entire stream */
      if (scr > module->scr)
      {
         int64_t data_rate;
         data_rate = INT64_C(27000000) * (pack_offset - module->pack_offset) / (scr - module->scr);

         if (module->data_rate)
         {
            /* Simple moving average over data rate seen so far */
            module->data_rate = (module->data_rate * 31 + data_rate) >> 5;
         }
         else
         {
Esempio n. 17
0
void Response::update(const Game* game, const Level* level) {

#ifdef DEBUG
    LOGV(LOG_LEVEL_RESPONSE, (*game->getLog() % 100), LOG_FORMAT(" - g:%x; l:%x (r:%s)"), __PRETTY_FUNCTION__, __LINE__, game,
            level, (mToRender)? "true":"false");
#endif
    if (!mToRender)
        return;

    // Rotation according device position
    if (game->mAccelData) {

#ifdef __ANDROID__
#ifdef DEBUG
        const Input* accelInput = Inputs::getInstance()->get(Inputs::ACCEL);
        assert((*static_cast<const float*>(accelInput->getConfig())) < ((ACCEL_LIMITS_SUP * 2.f) + 1.f));
        assert((*static_cast<const float*>(accelInput->getConfig())) > ((ACCEL_LIMITS_SUP * 2.f) - 1.f));
#endif
        float x = ACCEL_CLIP(game->mAccelData->X);
        float y = ACCEL_CLIP(game->mAccelData->Y);
        float z = ACCEL_CLIP(game->mAccelData->Z);

#else
        // No maximum accelerometer value available on iOS
        // -> Using a common range of [-11;11] values (after having * 10)

        float x = ACCEL_CLIP(-game->mAccelData->X * 10.f);
        float y = ACCEL_CLIP(-game->mAccelData->Y * 10.f);
        float z = ACCEL_CLIP(-game->mAccelData->Z * 10.f);
#endif
        unsigned char orientation = 0;
        if ((ORIENTATION_INF < z) && (z < ORIENTATION_SUP)) {

            if ((ORIENTATION_INF < x) && (x < ORIENTATION_SUP)) orientation = (ORIENTATION_SUP < y)? PORTRAIT:REV_PORTRAIT;
            else if ((ORIENTATION_INF < y) && (y < ORIENTATION_SUP)) orientation = (ORIENTATION_SUP < x)? LANDSCAPE:REV_LANDSCAPE;
        }
        if ((!orientation) && (ORIENTATION_INF < x) && (x < ORIENTATION_SUP) &&
                (ORIENTATION_INF < y) && (y < ORIENTATION_SUP)) orientation = (ORIENTATION_SUP < z)? FLAT:REVERSED;

        unsigned char prevOrientation = mOrientation;
        if (orientation)
            mOrientation = orientation;

        switch (mOrientation) {
            default: {

                mOrientation = PORTRAIT;
                //break;
            }
            case PORTRAIT: { // Portrait (home button at bottom)

                if (prevOrientation == LANDSCAPE) {

                    mRotation -= (2.f * PI_F);
                    mRotateVel -= (2.f * PI_F);
                }
                else if (ACCEL_CHANGED(mCurAccel.X, x))
                    mRotateVel = x * ACCEL_TO_ROTATION;
                break;
            }
            case REV_PORTRAIT: { // Reversed portrait

                if (ACCEL_CHANGED(mCurAccel.X, x))
                    mRotateVel = (x * -ACCEL_TO_ROTATION) + PI_F;
                break;
            }
            case LANDSCAPE: { // Landscape (home button at right)

                if (prevOrientation == PORTRAIT) {

                    mRotation += (2.f * PI_F);
                    mRotateVel += (2.f * PI_F);
                }
                else if (ACCEL_CHANGED(mCurAccel.Y, y))
                    mRotateVel = (y * -ACCEL_TO_ROTATION) + ((3.f * PI_F) / 2.f);
                break;
            }
            case REV_LANDSCAPE: { // Reversed landscape

                if (ACCEL_CHANGED(mCurAccel.Y, y))
                    mRotateVel = (y * ACCEL_TO_ROTATION) + (PI_F / 2.f);
                break;
            }
            case FLAT: // Flat
            case REVERSED: { // Reversed

                if ((!ACCEL_CHANGED(mCurAccel.X, x)) && (!ACCEL_CHANGED(mCurAccel.Y, y)))
                    break;

                static unsigned char prevPos = 0;
                if ((y > 0.f) && (x < 0.f)) {

                    mRotateVel = std::atan(-x / y);
                    prevPos = 0;
                }
                else if ((y < 0.f) && (x < 0.f)) {

                    mRotateVel = std::atan(y / x) + (PI_F / 2.f);
                    prevPos = 0;
                }
                else if ((y < 0.f) && (x > 0.f)) {

                    if (prevPos == 2)
                        mRotation += (2.f * PI_F);
                    mRotateVel = PI_F - std::atan(x / y);
                    prevPos = 1;
                }
                else if ((y > 0.f) && (x > 0.f)) { // 'else if' instead of 'else' coz 'y' must be > 0

                    if (prevPos == 1)
                        mRotation -= (2.f * PI_F);
                    mRotateVel = -std::atan(x / y);
                    prevPos = 2;
                }
                //else // 'x' & 'y' are equal to 0: Nothing to do
                break;
            }
        }
        if (ACCEL_CHANGED(mCurAccel.X, x)) mCurAccel.X = x;
        if (ACCEL_CHANGED(mCurAccel.Y, y)) mCurAccel.Y = y;
        if (ACCEL_CHANGED(mCurAccel.Z, z)) mCurAccel.Z = z;

        mRotation = mRotation - ((mRotation - mRotateVel) / VELOCITY);
        rotate(ROTATION_CORRECTION + mRotation);
    }

    // Hide & Display response
    if (mCancel) {

        if (getAlpha() < ALPHA_VEL_A) {

            mToDisplay = 0;
            mToRender = false;
            mCancel = false;
            mForce = false;
        }
        else
            setAlpha(getAlpha() - (ALPHA_VEL_A * game->getDelta() / DELTA_REF));

        if (mScale < MAX_SCALE) {

            mScale += (SCALE_VELOCITY * game->getDelta() / DELTA_REF);
            scale(mScale, mScale);
        }
        return;
    }

    if (mForce) {

        mScale = MAX_SCALE;
        //setAlpha(MAX_ALPHA); // Let caller manage this
        scale(MAX_SCALE, MAX_SCALE);
        return;
    }
    if (getAlpha() < ((mToDisplay == RESPONSE_ID_STORES)? 1.f:MAX_ALPHA)) {

        setAlpha(getAlpha() + (ALPHA_VEL_A * game->getDelta() / DELTA_REF));
        if (mScale < MAX_SCALE) {

            mScale += (SCALE_VELOCITY * game->getDelta() / DELTA_REF);
            scale(mScale, mScale);
        }
    }
}